From 2bbda9d92c6fcae82cde74f839a76292fceef658 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 1 Feb 2020 22:33:31 +0000 Subject: [PATCH] Factor out morph bounding box setup --- similar/main/morph.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/similar/main/morph.cpp b/similar/main/morph.cpp index 5eb6bf6ff..001d5023d 100644 --- a/similar/main/morph.cpp +++ b/similar/main/morph.cpp @@ -129,6 +129,18 @@ static void find_min_max(polymodel *pm,int submodel_num,vms_vector &minv,vms_vec constexpr fix morph_rate = MORPH_RATE; +static fix update_bounding_box_extent(const vms_vector &vp, const vms_vector &box_size, fix vms_vector::*const p, const fix entry_extent) +{ + if (!(vp.*p)) + return entry_extent; + const auto box_size_p = box_size.*p; + const auto abs_vp_p = abs(vp.*p); + if (f2i(box_size_p) >= abs_vp_p / 2) + return entry_extent; + const fix t = fixdiv(box_size_p, abs_vp_p); + return std::min(entry_extent, t); +} + static void init_points(const polymodel *const pm, const vms_vector *const box_size, const unsigned submodel_num, morph_data *const md) { auto data = reinterpret_cast(&pm->model_data[pm->submodel_ptrs[submodel_num]]); @@ -157,17 +169,14 @@ static void init_points(const polymodel *const pm, const vms_vector *const box_s fix k,dist; if (box_size) { - fix t; - k = INT32_MAX; - if (vp->x && f2i(box_size->x)x)/2 && (t = fixdiv(box_size->x,abs(vp->x))) < k) k=t; - if (vp->y && f2i(box_size->y)y)/2 && (t = fixdiv(box_size->y,abs(vp->y))) < k) k=t; - if (vp->z && f2i(box_size->z)z)/2 && (t = fixdiv(box_size->z,abs(vp->z))) < k) k=t; + k = update_bounding_box_extent(*vp, *box_size, &vms_vector::x, k); + k = update_bounding_box_extent(*vp, *box_size, &vms_vector::y, k); + k = update_bounding_box_extent(*vp, *box_size, &vms_vector::z, k); if (k == INT32_MAX) k = 0; - } else k=0;