reinstate original transform function

This commit is contained in:
Michael Kirsch 2019-05-25 00:58:17 +02:00 committed by Joseph Lenox
parent 4dc53fff4b
commit a8cda979d8
2 changed files with 19 additions and 0 deletions

View File

@ -201,6 +201,7 @@ extern void stl_rotate_z(stl_file *stl, float angle);
extern void stl_mirror_xy(stl_file *stl); extern void stl_mirror_xy(stl_file *stl);
extern void stl_mirror_yz(stl_file *stl); extern void stl_mirror_yz(stl_file *stl);
extern void stl_mirror_xz(stl_file *stl); extern void stl_mirror_xz(stl_file *stl);
extern void stl_transform(stl_file *stl, float const *trafo3x4);
extern void stl_transform(stl_file const *stl_src, stl_file *stl_dst, float const *trafo3x4); extern void stl_transform(stl_file const *stl_src, stl_file *stl_dst, float const *trafo3x4);
extern void stl_open_merge(stl_file *stl, ADMESH_CHAR *file); extern void stl_open_merge(stl_file *stl, ADMESH_CHAR *file);
extern void stl_invalidate_shared_vertices(stl_file *stl); extern void stl_invalidate_shared_vertices(stl_file *stl);

View File

@ -185,6 +185,24 @@ void calculate_normals(stl_file *stl) {
} }
} }
void stl_transform(stl_file *stl, float const *trafo3x4) {
int i_face, i_vertex, i, j;
if (stl->error)
return;
for (i_face = 0; i_face < stl->stats.number_of_facets; ++ i_face) {
stl_vertex *vertices = stl->facet_start[i_face].vertex;
for (i_vertex = 0; i_vertex < 3; ++ i_vertex) {
stl_vertex* v_dst = &vertices[i_vertex];
stl_vertex v_src = *v_dst;
v_dst->x = trafo3x4[0] * v_src.x + trafo3x4[1] * v_src.y + trafo3x4[2] * v_src.z + trafo3x4[3];
v_dst->y = trafo3x4[4] * v_src.x + trafo3x4[5] * v_src.y + trafo3x4[6] * v_src.z + trafo3x4[7];
v_dst->z = trafo3x4[8] * v_src.x + trafo3x4[9] * v_src.y + trafo3x4[10] * v_src.z + trafo3x4[11];
}
}
stl_get_size(stl);
calculate_normals(stl);
}
void stl_transform(stl_file const *stl_src, stl_file *stl_dst, float const *trafo3x4) { void stl_transform(stl_file const *stl_src, stl_file *stl_dst, float const *trafo3x4) {
int i_face, i_vertex, i, j; int i_face, i_vertex, i, j;
if (stl_src->error || stl_dst->error) if (stl_src->error || stl_dst->error)