mirror of
git://projects.qi-hardware.com/cae-tools.git
synced 2024-12-23 04:23:55 +02:00
Correct z0 for z vs. xy scale differences. Now things work as planned !
- solidify/face.h (z0_scale, fx_to_angle, fy_to_angle, fx_from_angle, fy_from_angle): correct for z vs. xy scale differences - solidify/overlap.c (merge_matrix): correct z0 shrinkage for z vs. xy scale differences
This commit is contained in:
parent
1638123771
commit
6acca4ea4a
@ -36,27 +36,33 @@ static inline double face_z0(const struct face *f, int x, int y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline double z0_scale(const struct face *f)
|
||||||
|
{
|
||||||
|
return f->z_step/f->x_step;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline double fx_to_angle(const struct face *f)
|
static inline double fx_to_angle(const struct face *f)
|
||||||
{
|
{
|
||||||
return atan(f->fx)/M_PI*180;
|
return atan(f->fx*z0_scale(f))/M_PI*180;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline double fy_to_angle(const struct face *f)
|
static inline double fy_to_angle(const struct face *f)
|
||||||
{
|
{
|
||||||
return atan(f->fy)/M_PI*180;
|
return atan(f->fy*z0_scale(f))/M_PI*180;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void fx_from_angle(struct face *f, double a)
|
static inline void fx_from_angle(struct face *f, double a)
|
||||||
{
|
{
|
||||||
f->fx = tan(a/180*M_PI);
|
f->fx = tan(a/180*M_PI)/z0_scale(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void fy_from_angle(struct face *f, double a)
|
static inline void fy_from_angle(struct face *f, double a)
|
||||||
{
|
{
|
||||||
f->fy = tan(a/180*M_PI);
|
f->fy = tan(a/180*M_PI)/z0_scale(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ static void merge_matrix(struct matrix *m, const struct solid *s,
|
|||||||
double tm[2][2], tm2[2][2];
|
double tm[2][2], tm2[2][2];
|
||||||
double tv[2];
|
double tv[2];
|
||||||
double f_x, f_y;
|
double f_x, f_y;
|
||||||
|
double z0s2 = z0_scale(f)*z0_scale(f);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finally, we convert to model matrix coordinates.
|
* Finally, we convert to model matrix coordinates.
|
||||||
@ -180,8 +181,8 @@ static void merge_matrix(struct matrix *m, const struct solid *s,
|
|||||||
* cos a = sqrt(1/(f^2+1))
|
* cos a = sqrt(1/(f^2+1))
|
||||||
*/
|
*/
|
||||||
|
|
||||||
f_x = sqrt(f->fx*f->fx+1);
|
f_x = sqrt(f->fx*f->fx*z0s2+1);
|
||||||
f_y = sqrt(f->fy*f->fy+1);
|
f_y = sqrt(f->fy*f->fy*z0s2+1);
|
||||||
|
|
||||||
m->a[0][0] *= f_x;
|
m->a[0][0] *= f_x;
|
||||||
m->a[0][1] *= f_x;
|
m->a[0][1] *= f_x;
|
||||||
|
Loading…
Reference in New Issue
Block a user