void TriangleMesh::merge(const TriangleMesh* mesh) { // reset stats and metadata int number_of_facets = this->stl.stats.number_of_facets; stl_invalidate_shared_vertices(&this->stl); this->repaired = false; // update facet count and allocate more memory this->stl.stats.number_of_facets = number_of_facets + mesh->stl.stats.number_of_facets; this->stl.stats.original_num_facets = this->stl.stats.number_of_facets; stl_reallocate(&this->stl); // copy facets for (int i = 0; i < mesh->stl.stats.number_of_facets; i++) { this->stl.facet_start[number_of_facets + i] = mesh->stl.facet_start[i]; } // update size stl_get_size(&this->stl); }
void stl_translate(stl_file *stl, float x, float y, float z) { int i; int j; for(i = 0; i < stl->stats.number_of_facets; i++) { for(j = 0; j < 3; j++) { stl->facet_start[i].vertex[j].x += x; stl->facet_start[i].vertex[j].y += y; stl->facet_start[i].vertex[j].z += z; } } stl->stats.min.x += x; stl->stats.min.y += y; stl->stats.min.z += z; stl->stats.max.x += x; stl->stats.max.y += y; stl->stats.max.z += z; stl_invalidate_shared_vertices(stl); }
void stl_scale(stl_file *stl, float factor) { int i; int j; // scale extents stl->stats.min.x *= factor; stl->stats.min.y *= factor; stl->stats.min.z *= factor; stl->stats.max.x *= factor; stl->stats.max.y *= factor; stl->stats.max.z *= factor; // scale size stl->stats.size.x *= factor; stl->stats.size.y *= factor; stl->stats.size.z *= factor; // scale volume if (stl->stats.volume > 0.0) { stl->stats.volume *= (factor * factor * factor); } for(i = 0; i < stl->stats.number_of_facets; i++) { for(j = 0; j < 3; j++) { stl->facet_start[i].vertex[j].x *= factor; stl->facet_start[i].vertex[j].y *= factor; stl->facet_start[i].vertex[j].z *= factor; } } stl_invalidate_shared_vertices(stl); }