Blender V4.3
mathutils.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
11/* Can cast different mathutils types to this, use for generic functions. */
12
13#include "BLI_array.hh"
14#include "BLI_compiler_attrs.h"
15#include "BLI_vector.hh"
16
17struct DynStr;
18
21extern char BaseMathObject_is_valid_doc[];
22extern char BaseMathObject_owner_doc[];
23
24PyObject *_BaseMathObject_new_impl(PyTypeObject *root_type, PyTypeObject *base_type);
25
26#define BASE_MATH_NEW(struct_name, root_type, base_type) \
27 ((struct_name *)_BaseMathObject_new_impl(&root_type, base_type))
28
30enum {
42};
43#define BASE_MATH_FLAG_DEFAULT 0
44
45#define BASE_MATH_MEMBERS(_data) \
46 \
47 PyObject_VAR_HEAD \
48 float *_data; \
49 \
50 PyObject *cb_user; \
51 \
52 unsigned char cb_type; \
53
54 \
55 unsigned char cb_subtype; \
56 \
57 unsigned char flag
61};
62
63/* types */
64#include "mathutils_Color.hh"
65#include "mathutils_Euler.hh"
66#include "mathutils_Matrix.hh"
68#include "mathutils_Vector.hh"
69
70/* avoid checking all types */
71#define BaseMathObject_CheckExact(v) (Py_TYPE(v)->tp_dealloc == (destructor)BaseMathObject_dealloc)
72
77
78extern char BaseMathObject_freeze_doc[];
80
81int BaseMathObject_traverse(BaseMathObject *self, visitproc visit, void *arg);
85
86PyMODINIT_FUNC PyInit_mathutils();
87
88int EXPP_FloatsAreEqual(float af, float bf, int maxDiff);
89int EXPP_VectorsAreEqual(const float *vecA, const float *vecB, int size, int floatSteps);
92
110};
111
113
119
122
123/* since this is called so often avoid where possible */
124#define BaseMath_CheckCallback(_self) \
125 (((_self)->cb_user ? _BaseMathObject_CheckCallback((BaseMathObject *)_self) : 0))
126#define BaseMath_ReadCallback(_self) \
127 (((_self)->cb_user ? _BaseMathObject_ReadCallback((BaseMathObject *)_self) : 0))
128#define BaseMath_WriteCallback(_self) \
129 (((_self)->cb_user ? _BaseMathObject_WriteCallback((BaseMathObject *)_self) : 0))
130#define BaseMath_ReadIndexCallback(_self, _index) \
131 (((_self)->cb_user ? _BaseMathObject_ReadIndexCallback((BaseMathObject *)_self, _index) : 0))
132#define BaseMath_WriteIndexCallback(_self, _index) \
133 (((_self)->cb_user ? _BaseMathObject_WriteIndexCallback((BaseMathObject *)_self, _index) : 0))
134
135/* support BASE_MATH_FLAG_IS_FROZEN */
136#define BaseMath_ReadCallback_ForWrite(_self) \
137 (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \
138 (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : \
139 (BaseMath_ReadCallback(_self)))
141#define BaseMath_ReadIndexCallback_ForWrite(_self, _index) \
142 (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \
143 (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : \
144 (BaseMath_ReadIndexCallback(_self, _index)))
146#define BaseMath_Prepare_ForWrite(_self) \
147 (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \
148 (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : \
149 0)
151#define BaseMathObject_Prepare_ForHash(_self) \
152 (UNLIKELY(((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) == 0) ? \
153 (_BaseMathObject_RaiseNotFrozenExc((BaseMathObject *)_self), -1) : \
154 0)
155
156/* utility func */
162 float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix);
167 int array_num_min,
168 PyObject *value,
169 const char *error_prefix);
174 int array_dim,
175 PyObject *value,
176 const char *error_prefix);
181 int array_dim,
182 PyObject *value,
183 const char *error_prefix);
188 int array_dim,
189 PyObject *value,
190 const char *error_prefix);
194bool mathutils_array_parse_alloc_viseq(PyObject *value,
195 const char *error_prefix,
197int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix);
198
204Py_hash_t mathutils_array_hash(const float *array, size_t array_len);
205
206/* zero remaining unused elements of the array */
207#define MU_ARRAY_ZERO (1u << 30)
208/* ignore larger py sequences than requested (just use first elements),
209 * handy when using 3d vectors as 2d */
210#define MU_ARRAY_SPILL (1u << 31)
212#define MU_ARRAY_FLAGS (MU_ARRAY_ZERO | MU_ARRAY_SPILL)
213
225int column_vector_multiplication(float r_vec[4], VectorObject *vec, MatrixObject *mat);
226
227#ifndef MATH_STANDALONE
228/* dynstr as python string utility functions */
229/* dynstr as python string utility functions, frees 'ds'! */
230PyObject *mathutils_dynstr_to_py(struct DynStr *ds);
231#endif
PyObject * self
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
int(* BaseMathGetFunc)(BaseMathObject *, int)
Definition mathutils.hh:95
@ BASE_MATH_FLAG_IS_WRAP
Definition mathutils.hh:36
@ BASE_MATH_FLAG_IS_FROZEN
Definition mathutils.hh:41
int _BaseMathObject_CheckCallback(BaseMathObject *self)
Definition mathutils.cc:540
int EXPP_FloatsAreEqual(float af, float bf, int maxDiff)
Definition mathutils.cc:471
int(* BaseMathGetIndexFunc)(BaseMathObject *, int, int)
Definition mathutils.hh:99
bool mathutils_array_parse_alloc_viseq(PyObject *value, const char *error_prefix, blender::Array< blender::Vector< int > > &r_data)
Definition mathutils.cc:373
PyMODINIT_FUNC PyInit_mathutils()
Definition mathutils.cc:765
int mathutils_array_parse_alloc(float **array, int array_num_min, PyObject *value, const char *error_prefix)
Definition mathutils.cc:193
int(* BaseMathSetIndexFunc)(BaseMathObject *, int, int)
Definition mathutils.hh:101
int BaseMathObject_is_gc(BaseMathObject *self)
Definition mathutils.cc:711
void _BaseMathObject_RaiseFrozenExc(const BaseMathObject *self)
Definition mathutils.cc:605
Py_hash_t mathutils_array_hash(const float *array, size_t array_len)
Definition mathutils.cc:69
void BaseMathObject_dealloc(BaseMathObject *self)
Definition mathutils.cc:689
int _BaseMathObject_WriteCallback(BaseMathObject *self)
Definition mathutils.cc:564
int mathutils_int_array_parse(int *array, int array_dim, PyObject *value, const char *error_prefix)
Definition mathutils.cc:301
int EXPP_VectorsAreEqual(const float *vecA, const float *vecB, int size, int floatSteps)
Definition mathutils.cc:490
int mathutils_array_parse(float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix)
Definition mathutils.cc:97
int(* BaseMathSetFunc)(BaseMathObject *, int)
Definition mathutils.hh:97
int mathutils_array_parse_alloc_vi(int **array, int array_dim, PyObject *value, const char *error_prefix)
Definition mathutils.cc:336
int mathutils_array_parse_alloc_v(float **array, int array_dim, PyObject *value, const char *error_prefix)
Definition mathutils.cc:260
char BaseMathObject_is_valid_doc[]
Definition mathutils.cc:639
char BaseMathObject_is_wrapped_doc[]
Definition mathutils.cc:625
PyObject * BaseMathObject_owner_get(BaseMathObject *self, void *)
Definition mathutils.cc:619
char BaseMathObject_is_frozen_doc[]
Definition mathutils.cc:632
PyObject * _BaseMathObject_new_impl(PyTypeObject *root_type, PyTypeObject *base_type)
Definition mathutils.cc:716
int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix)
Definition mathutils.cc:409
int column_vector_multiplication(float r_vec[4], VectorObject *vec, MatrixObject *mat)
PyObject * BaseMathObject_is_frozen_get(BaseMathObject *self, void *)
Definition mathutils.cc:634
PyObject * BaseMathObject_freeze(BaseMathObject *self)
Definition mathutils.cc:653
#define BASE_MATH_MEMBERS(_data)
Definition mathutils.hh:45
PyObject * BaseMathObject_is_wrapped_get(BaseMathObject *self, void *)
Definition mathutils.cc:627
PyObject * mathutils_dynstr_to_py(struct DynStr *ds)
Definition mathutils.cc:502
char BaseMathObject_owner_doc[]
Definition mathutils.cc:618
int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index)
Definition mathutils.cc:591
char BaseMathObject_freeze_doc[]
Definition mathutils.cc:645
PyObject * BaseMathObject_is_valid_get(BaseMathObject *self, void *)
Definition mathutils.cc:640
int BaseMathObject_clear(BaseMathObject *self)
Definition mathutils.cc:671
int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index)
Definition mathutils.cc:577
int _BaseMathObject_ReadCallback(BaseMathObject *self)
Definition mathutils.cc:549
int(* BaseMathCheckFunc)(BaseMathObject *)
Definition mathutils.hh:93
unsigned char Mathutils_RegisterCallback(Mathutils_Callback *cb)
Definition mathutils.cc:522
void _BaseMathObject_RaiseNotFrozenExc(const BaseMathObject *self)
Definition mathutils.cc:610
int BaseMathObject_traverse(BaseMathObject *self, visitproc visit, void *arg)
Definition mathutils.cc:665
BaseMathSetIndexFunc set_index
Definition mathutils.hh:108
BaseMathCheckFunc check
Definition mathutils.hh:104
BaseMathGetIndexFunc get_index
Definition mathutils.hh:107
BaseMathSetFunc set
Definition mathutils.hh:106
BaseMathGetFunc get
Definition mathutils.hh:105