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:
authorHans Goudey <h.goudey@me.com>2022-04-01 22:48:48 +0300
committerHans Goudey <h.goudey@me.com>2022-04-01 22:48:48 +0300
commit59c3194f8e88509a44384c4c48a9a466f8aeffde (patch)
tree15757e0e1bb7dd4c8e4b96b18e171911a5e64068
parent11c6d4e88eb9190826833390d577f9fffb45e971 (diff)
Cleanup: Use float3 type
This can help make some refactoring to bounding boxes slightly easier.
-rw-r--r--source/blender/blenkernel/intern/object.cc66
1 files changed, 32 insertions, 34 deletions
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc
index b37cf7db739..4679e643b01 100644
--- a/source/blender/blenkernel/intern/object.cc
+++ b/source/blender/blenkernel/intern/object.cc
@@ -54,6 +54,7 @@
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_math_vec_types.hh"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
@@ -143,6 +144,8 @@
#include "CCGSubSurf.h"
#include "atomic_ops.h"
+using blender::float3;
+
static CLG_LogRef LOG = {"bke.object"};
/**
@@ -1172,7 +1175,7 @@ static void object_lib_override_apply_post(ID *id_dst, ID *id_src)
static IDProperty *object_asset_dimensions_property(Object *ob)
{
- float dimensions[3];
+ float3 dimensions;
BKE_object_dimensions_get(ob, dimensions);
if (is_zero_v3(dimensions)) {
return nullptr;
@@ -2837,7 +2840,7 @@ void BKE_object_obdata_size_init(struct Object *ob, const float size)
void BKE_object_scale_to_mat3(Object *ob, float mat[3][3])
{
- float vec[3];
+ float3 vec;
mul_v3_v3v3(vec, ob->scale, ob->dscale);
size_to_mat3(mat, vec);
}
@@ -3119,7 +3122,7 @@ static bool ob_parcurve(Object *ob, Object *par, float r_mat[4][4])
static void ob_parbone(Object *ob, Object *par, float r_mat[4][4])
{
- float vec[3];
+ float3 vec;
if (par->type != OB_ARMATURE) {
unit_m4(r_mat);
@@ -3540,11 +3543,8 @@ void BKE_object_apply_mat4(Object *ob,
BoundBox *BKE_boundbox_alloc_unit()
{
- const float min[3] = {-1.0f, -1.0f, -1.0f}, max[3] = {1.0f, 1.0f, 1.0f};
-
- BoundBox *bb = MEM_cnew<BoundBox>("OB-BoundBox");
- BKE_boundbox_init_from_minmax(bb, min, max);
-
+ BoundBox *bb = MEM_cnew<BoundBox>(__func__);
+ BKE_boundbox_init_from_minmax(bb, float3(-1), float3(1));
return bb;
}
@@ -3642,13 +3642,12 @@ void BKE_object_boundbox_flag(Object *ob, int flag, const bool set)
void BKE_object_boundbox_calc_from_mesh(Object *ob, const Mesh *me_eval)
{
- float min[3], max[3];
-
- INIT_MINMAX(min, max);
+ float3 min(FLT_MAX);
+ float3 max(-FLT_MAX);
if (!BKE_mesh_wrapper_minmax(me_eval, min, max)) {
- zero_v3(min);
- zero_v3(max);
+ min = float3(0);
+ max = float3(0);
}
if (ob->runtime.bb == nullptr) {
@@ -3662,19 +3661,19 @@ void BKE_object_boundbox_calc_from_mesh(Object *ob, const Mesh *me_eval)
bool BKE_object_boundbox_calc_from_evaluated_geometry(Object *ob)
{
- blender::float3 min, max;
- INIT_MINMAX(min, max);
+ float3 min(FLT_MAX);
+ float3 max(-FLT_MAX);
if (ob->runtime.geometry_set_eval) {
if (!ob->runtime.geometry_set_eval->compute_boundbox_without_instances(&min, &max)) {
- zero_v3(min);
- zero_v3(max);
+ min = float3(0);
+ max = float3(0);
}
}
else if (const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob)) {
if (!BKE_mesh_wrapper_minmax(mesh_eval, min, max)) {
- zero_v3(min);
- zero_v3(max);
+ min = float3(0);
+ max = float3(0);
}
}
else if (ob->runtime.curve_cache) {
@@ -3707,8 +3706,7 @@ void BKE_object_dimensions_get(Object *ob, float r_vec[3])
{
const BoundBox *bb = BKE_object_boundbox_get(ob);
if (bb) {
- float scale[3];
-
+ float3 scale;
mat4_to_size(scale, ob->obmat);
r_vec[0] = fabsf(scale[0]) * (bb->vec[4][0] - bb->vec[0][0]);
@@ -3728,11 +3726,10 @@ void BKE_object_dimensions_set_ex(Object *ob,
{
const BoundBox *bb = BKE_object_boundbox_get(ob);
if (bb) {
- float len[3];
-
- len[0] = bb->vec[4][0] - bb->vec[0][0];
- len[1] = bb->vec[2][1] - bb->vec[0][1];
- len[2] = bb->vec[1][2] - bb->vec[0][2];
+ float3 len;
+ len.x = bb->vec[4][0] - bb->vec[0][0];
+ len.y = bb->vec[2][1] - bb->vec[0][1];
+ len.z = bb->vec[1][2] - bb->vec[0][2];
for (int i = 0; i < 3; i++) {
if (((1 << i) & axis_mask) == 0) {
@@ -3760,7 +3757,6 @@ void BKE_object_dimensions_set(Object *ob, const float value[3], int axis_mask)
void BKE_object_minmax(Object *ob, float r_min[3], float r_max[3], const bool use_hidden)
{
- float vec[3];
bool changed = false;
switch (ob->type) {
@@ -3792,6 +3788,7 @@ void BKE_object_minmax(Object *ob, float r_min[3], float r_max[3], const bool us
for (w = 0; w < lt->pntsw; w++) {
for (v = 0; v < lt->pntsv; v++) {
for (u = 0; u < lt->pntsu; u++, bp++) {
+ float3 vec;
mul_v3_m4v3(vec, ob->obmat, bp->vec);
minmax_v3v3_v3(r_min, r_max, vec);
}
@@ -3836,15 +3833,16 @@ void BKE_object_minmax(Object *ob, float r_min[3], float r_max[3], const bool us
}
if (changed == false) {
- float size[3];
+ float3 size = ob->scale;
copy_v3_v3(size, ob->scale);
if (ob->type == OB_EMPTY) {
- mul_v3_fl(size, ob->empty_drawsize);
+ size *= ob->empty_drawsize;
}
minmax_v3v3_v3(r_min, r_max, ob->obmat[3]);
+ float3 vec;
copy_v3_v3(vec, ob->obmat[3]);
add_v3_v3(vec, size);
minmax_v3v3_v3(r_min, r_max, vec);
@@ -3895,7 +3893,7 @@ bool BKE_object_empty_image_data_is_visible_in_view3d(const Object *ob, const Re
/* NOTE: we could normalize the 'view_dir' then use 'eps'
* however the issue with empty objects being visible when viewed from the side
* is only noticeable in orthographic views. */
- float view_dir[3];
+ float3 view_dir;
sub_v3_v3v3(view_dir, rv3d->viewinv[3], ob->obmat[3]);
dot = dot_v3v3(ob->obmat[2], view_dir);
eps = 0.0f;
@@ -3917,7 +3915,7 @@ bool BKE_object_empty_image_data_is_visible_in_view3d(const Object *ob, const Re
}
if (visibility_flag & OB_EMPTY_IMAGE_HIDE_NON_AXIS_ALIGNED) {
- float proj[3];
+ float3 proj;
project_plane_v3_v3v3(proj, ob->obmat[2], rv3d->viewinv[2]);
const float proj_length_sq = len_squared_v3(proj);
if (proj_length_sq > 1e-5f) {
@@ -3955,7 +3953,7 @@ bool BKE_object_minmax_dupli(Depsgraph *depsgraph,
if (bb) {
int i;
for (i = 0; i < 8; i++) {
- float vec[3];
+ float3 vec;
mul_v3_m4v3(vec, dob->mat, bb->vec[i]);
minmax_v3v3_v3(r_min, r_max, vec);
}
@@ -3988,7 +3986,7 @@ static void foreach_display_point_gpencil_stroke_fn(bGPDlayer *UNUSED(layer),
bGPDspoint *pt;
int i;
for (i = 0, pt = stroke->points; i < stroke->totpoints; i++, pt++) {
- float co[3];
+ float3 co;
mul_v3_m4v3(co, iter_data->obmat, &pt->x);
iter_data->point_func_cb(co, iter_data->user_data);
}
@@ -4002,7 +4000,7 @@ void BKE_object_foreach_display_point(Object *ob,
{
/* TODO: pointcloud and curves object support */
const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob);
- float co[3];
+ float3 co;
if (mesh_eval != nullptr) {
const MVert *mv = mesh_eval->mvert;