Cleanup: pass a const Lattice to BKE_lattice_* functions

Also match arguments between function & declaration.
This commit is contained in:
Campbell Barton 2024-04-30 12:13:25 +10:00
parent e42f03bc75
commit 9ee0912d1c
2 changed files with 45 additions and 41 deletions

@ -26,7 +26,7 @@ struct Mesh;
struct Object;
struct Scene;
void BKE_lattice_resize(Lattice *lt, int u, int v, int w, Object *ltOb);
void BKE_lattice_resize(Lattice *lt, int u_new, int v_new, int w_new, Object *lt_ob);
Lattice *BKE_lattice_add(Main *bmain, const char *name);
void calc_lat_fudu(int flag, int res, float *r_fu, float *r_du);
@ -50,11 +50,11 @@ void BKE_lattice_transform(Lattice *lt, const float mat[4][4], bool do_keys);
bool BKE_lattice_is_any_selected(const Lattice *lt);
int BKE_lattice_index_from_uvw(Lattice *lt, int u, int v, int w);
void BKE_lattice_index_to_uvw(Lattice *lt, int index, int *r_u, int *r_v, int *r_w);
int BKE_lattice_index_flip(Lattice *lt, int index, bool flip_u, bool flip_v, bool flip_w);
int BKE_lattice_index_from_uvw(const Lattice *lt, int u, int v, int w);
void BKE_lattice_index_to_uvw(const Lattice *lt, int index, int *r_u, int *r_v, int *r_w);
int BKE_lattice_index_flip(const Lattice *lt, int index, bool flip_u, bool flip_v, bool flip_w);
void BKE_lattice_bitmap_from_flag(
Lattice *lt, unsigned int *bitmap, uint8_t flag, bool clear, bool respecthide);
const Lattice *lt, unsigned int *bitmap, uint8_t flag, bool clear, bool respecthide);
/* **** Depsgraph evaluation **** */

@ -190,7 +190,7 @@ IDTypeInfo IDType_ID_LT = {
/*lib_override_apply_post*/ nullptr,
};
int BKE_lattice_index_from_uvw(Lattice *lt, const int u, const int v, const int w)
int BKE_lattice_index_from_uvw(const Lattice *lt, const int u, const int v, const int w)
{
const int totu = lt->pntsu;
const int totv = lt->pntsv;
@ -198,7 +198,7 @@ int BKE_lattice_index_from_uvw(Lattice *lt, const int u, const int v, const int
return (w * (totu * totv) + (v * totu) + u);
}
void BKE_lattice_index_to_uvw(Lattice *lt, const int index, int *r_u, int *r_v, int *r_w)
void BKE_lattice_index_to_uvw(const Lattice *lt, const int index, int *r_u, int *r_v, int *r_w)
{
const int totu = lt->pntsu;
const int totv = lt->pntsv;
@ -209,7 +209,7 @@ void BKE_lattice_index_to_uvw(Lattice *lt, const int index, int *r_u, int *r_v,
}
int BKE_lattice_index_flip(
Lattice *lt, const int index, const bool flip_u, const bool flip_v, const bool flip_w)
const Lattice *lt, const int index, const bool flip_u, const bool flip_v, const bool flip_w)
{
int u, v, w;
@ -230,8 +230,11 @@ int BKE_lattice_index_flip(
return BKE_lattice_index_from_uvw(lt, u, v, w);
}
void BKE_lattice_bitmap_from_flag(
Lattice *lt, BLI_bitmap *bitmap, const uint8_t flag, const bool clear, const bool respecthide)
void BKE_lattice_bitmap_from_flag(const Lattice *lt,
BLI_bitmap *bitmap,
const uint8_t flag,
const bool clear,
const bool respecthide)
{
const uint tot = lt->pntsu * lt->pntsv * lt->pntsw;
BPoint *bp;
@ -265,7 +268,7 @@ void calc_lat_fudu(int flag, int res, float *r_fu, float *r_du)
}
}
void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
void BKE_lattice_resize(Lattice *lt, int u_new, int v_new, int w_new, Object *lt_ob)
{
BPoint *bp;
int i, u, v, w;
@ -278,53 +281,53 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
lt->dvert = nullptr;
}
while (uNew * vNew * wNew > 32000) {
if (uNew >= vNew && uNew >= wNew) {
uNew--;
while (u_new * v_new * w_new > 32000) {
if (u_new >= v_new && u_new >= w_new) {
u_new--;
}
else if (vNew >= uNew && vNew >= wNew) {
vNew--;
else if (v_new >= u_new && v_new >= w_new) {
v_new--;
}
else {
wNew--;
w_new--;
}
}
vert_coords = static_cast<float(*)[3]>(
MEM_mallocN(sizeof(*vert_coords) * uNew * vNew * wNew, "tmp_vcos"));
MEM_mallocN(sizeof(*vert_coords) * u_new * v_new * w_new, "tmp_vcos"));
calc_lat_fudu(lt->flag, uNew, &fu, &du);
calc_lat_fudu(lt->flag, vNew, &fv, &dv);
calc_lat_fudu(lt->flag, wNew, &fw, &dw);
calc_lat_fudu(lt->flag, u_new, &fu, &du);
calc_lat_fudu(lt->flag, v_new, &fv, &dv);
calc_lat_fudu(lt->flag, w_new, &fw, &dw);
/* If old size is different than resolution changed in interface,
* try to do clever reinitialize of points. Pretty simply idea, we just
* deform new verts by old lattice, but scaling them to match old
* size first.
*/
if (ltOb) {
if (lt_ob) {
const float default_size = 1.0;
if (uNew != 1) {
if (u_new != 1) {
fu = -default_size / 2.0;
du = default_size / (uNew - 1);
du = default_size / (u_new - 1);
}
if (vNew != 1) {
if (v_new != 1) {
fv = -default_size / 2.0;
dv = default_size / (vNew - 1);
dv = default_size / (v_new - 1);
}
if (wNew != 1) {
if (w_new != 1) {
fw = -default_size / 2.0;
dw = default_size / (wNew - 1);
dw = default_size / (w_new - 1);
}
}
co = vert_coords[0];
for (w = 0, wc = fw; w < wNew; w++, wc += dw) {
for (v = 0, vc = fv; v < vNew; v++, vc += dv) {
for (u = 0, uc = fu; u < uNew; u++, co += 3, uc += du) {
for (w = 0, wc = fw; w < w_new; w++, wc += dw) {
for (v = 0, vc = fv; v < v_new; v++, vc += dv) {
for (u = 0, uc = fu; u < u_new; u++, co += 3, uc += du) {
co[0] = uc;
co[1] = vc;
co[2] = wc;
@ -332,22 +335,23 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
}
}
if (ltOb) {
if (lt_ob) {
float mat[4][4];
int typeu = lt->typeu, typev = lt->typev, typew = lt->typew;
/* works best if we force to linear type (endpoints match) */
lt->typeu = lt->typev = lt->typew = KEY_LINEAR;
if (ltOb->runtime->curve_cache) {
if (lt_ob->runtime->curve_cache) {
/* prevent using deformed locations */
BKE_displist_free(&ltOb->runtime->curve_cache->disp);
BKE_displist_free(&lt_ob->runtime->curve_cache->disp);
}
copy_m4_m4(mat, ltOb->object_to_world().ptr());
unit_m4(ltOb->runtime->object_to_world.ptr());
BKE_lattice_deform_coords(ltOb, nullptr, vert_coords, uNew * vNew * wNew, 0, nullptr, 1.0f);
copy_m4_m4(ltOb->runtime->object_to_world.ptr(), mat);
copy_m4_m4(mat, lt_ob->object_to_world().ptr());
unit_m4(lt_ob->runtime->object_to_world.ptr());
BKE_lattice_deform_coords(
lt_ob, nullptr, vert_coords, u_new * v_new * w_new, 0, nullptr, 1.0f);
copy_m4_m4(lt_ob->runtime->object_to_world.ptr(), mat);
lt->typeu = typeu;
lt->typev = typev;
@ -361,9 +365,9 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
lt->dv = dv;
lt->dw = dw;
lt->pntsu = uNew;
lt->pntsv = vNew;
lt->pntsw = wNew;
lt->pntsu = u_new;
lt->pntsv = v_new;
lt->pntsw = w_new;
lt->actbp = LT_ACTBP_NONE;
MEM_freeN(lt->def);