Blender V4.5
BCMath.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BKE_object.hh"
12#include "BLI_math_rotation.h"
13#include "BLI_math_vector.h"
14#include "BlenderTypes.h"
15
16class BCQuat {
17 private:
18 mutable Quat q;
19
20 public:
21 BCQuat(const BCQuat &other)
22 {
23 copy_v4_v4(q, other.q);
24 }
25
26 BCQuat(Quat &other)
27 {
28 copy_v4_v4(q, other);
29 }
30
32 {
33 unit_qt(q);
34 }
35
37 {
38 return q;
39 }
40
41 void rotate_to(Matrix &mat_to);
42};
43
44class BCMatrix {
45
46 private:
47 mutable float matrix[4][4];
48 mutable float size[3];
49 mutable float rot[3];
50 mutable float loc[3];
51 mutable float q[4];
52
53 void unit();
54 void copy(Matrix &r, Matrix &a);
55
56 public:
57 float (&location() const)[3];
58 float (&rotation() const)[3];
59 float (&scale() const)[3];
60 float (&quat() const)[4];
61
62 BCMatrix(BC_global_forward_axis global_forward_axis, BC_global_up_axis global_up_axis);
63 BCMatrix(const BCMatrix &mat);
64 BCMatrix(Matrix &mat);
65 BCMatrix(Object *ob);
66 BCMatrix();
67
72 void get_matrix(DMatrix &matrix, bool transposed = false, int precision = -1) const;
73 void get_matrix(Matrix &matrix,
74 bool transposed = false,
75 int precision = -1,
76 bool inverted = false) const;
77 void set_transform(Object *ob);
78 void set_transform(Matrix &mat);
79 void add_transform(Matrix &to,
80 const Matrix &transform,
81 const Matrix &from,
82 bool inverted = false);
83 void apply_transform(Matrix &to,
84 const Matrix &transform,
85 const Matrix &from,
86 bool inverse = false);
87 void add_inverted_transform(Matrix &to, const Matrix &transform, const Matrix &from);
88 void add_transform(const Matrix &matrix, bool inverted = false);
89 void add_transform(const BCMatrix &matrix, bool inverted = false);
90 void apply_transform(const BCMatrix &matrix, bool inverted = false);
91
92 bool in_range(const BCMatrix &other, float distance) const;
93
94 static void sanitize(Matrix &matrix, int precision);
95 static void sanitize(DMatrix &matrix, int precision);
96 static void transpose(Matrix &matrix);
97};
General operations, lookup, etc. for blender objects.
void unit_qt(float q[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
BC_global_up_axis
float[4][4] Matrix
BC_global_forward_axis
double[4][4] DMatrix
float[4] Quat
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
float(& rotation() const)[3]
Definition BCMath.cpp:217
BCMatrix(BC_global_forward_axis global_forward_axis, BC_global_up_axis global_up_axis)
Definition BCMath.cpp:48
void add_transform(Matrix &to, const Matrix &transform, const Matrix &from, bool inverted=false)
Definition BCMath.cpp:73
void add_inverted_transform(Matrix &to, const Matrix &transform, const Matrix &from)
Definition BCMath.cpp:104
void set_transform(Object *ob)
Definition BCMath.cpp:111
float(& scale() const)[3]
Definition BCMath.cpp:222
void get_matrix(DMatrix &matrix, bool transposed=false, int precision=-1) const
Definition BCMath.cpp:167
float(& location() const)[3]
Definition BCMath.cpp:212
float(& quat() const)[4]
Definition BCMath.cpp:227
void apply_transform(Matrix &to, const Matrix &transform, const Matrix &from, bool inverse=false)
Definition BCMath.cpp:88
BCMatrix()
Definition BCMath.cpp:43
static void sanitize(Matrix &matrix, int precision)
Definition BCMath.cpp:140
bool in_range(const BCMatrix &other, float distance) const
Definition BCMath.cpp:200
void rotate_to(Matrix &mat_to)
Definition BCMath.cpp:10
BCQuat(const BCQuat &other)
Definition BCMath.h:21
BCQuat(Quat &other)
Definition BCMath.h:26
Quat & quat()
Definition BCMath.h:36
BCQuat()
Definition BCMath.h:31
MatBase< C, R > inverse(MatBase< C, R >) RET
MatBase< R, C > transpose(MatBase< C, R >) RET
float distance(VecOp< float, D >, VecOp< float, D >) RET