Cleanup: Use float3 type

This can help make some refactoring to bounding boxes slightly easier.
This commit is contained in:
Hans Goudey 2022-04-01 14:48:48 -05:00
parent 11c6d4e88e
commit 59c3194f8e
1 changed files with 32 additions and 34 deletions

View File

@ -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;