add transform function with another output stl

This commit is contained in:
Michael Kirsch 2019-03-30 17:28:43 +01:00 committed by Joseph Lenox
parent 18a85e93f6
commit 32b3435e06
2 changed files with 22 additions and 0 deletions

View File

@ -202,6 +202,7 @@ extern void stl_mirror_xy(stl_file *stl);
extern void stl_mirror_yz(stl_file *stl);
extern void stl_mirror_xz(stl_file *stl);
extern void stl_transform(stl_file *stl, float *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_invalidate_shared_vertices(stl_file *stl);
extern void stl_generate_shared_vertices(stl_file *stl);

View File

@ -203,6 +203,27 @@ void stl_transform(stl_file *stl, float *trafo3x4) {
calculate_normals(stl);
}
void stl_transform(stl_file const *stl_src, stl_file *stl_dst, float const *trafo3x4) {
int i_face, i_vertex, i, j;
if (stl_src->error || stl_dst->error)
return;
stl_dst->stats.number_of_facets = stl_src->stats.number_of_facets;
stl_allocate(stl_dst);
for (i_face = 0; i_face < stl_src->stats.number_of_facets; ++ i_face) {
stl_vertex const *vertices_src = stl_src->facet_start[i_face].vertex;
stl_vertex *vertices_dst = stl_dst->facet_start[i_face].vertex;
for (i_vertex = 0; i_vertex < 3; ++ i_vertex) {
stl_vertex* v_dst = &vertices_dst[i_vertex];
stl_vertex const * v_src = &vertices_src[i_vertex];
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_dst);
calculate_normals(stl_dst);
}
void
stl_rotate_x(stl_file *stl, float angle) {
int i;