This commit is contained in:
YuSanka 2019-09-19 12:30:35 +02:00
commit 91311fc0a0
3 changed files with 15 additions and 16 deletions

View file

@ -151,8 +151,8 @@ bool stl_write_binary(stl_file *stl, const char *file, const char *label)
memcpy(buffer, &stl->stats.number_of_facets, 4); memcpy(buffer, &stl->stats.number_of_facets, 4);
stl_internal_reverse_quads(buffer, 4); stl_internal_reverse_quads(buffer, 4);
fwrite(buffer, 4, 1, fp); fwrite(buffer, 4, 1, fp);
for (size_t i = 0; i < stl->stats.number_of_facets; ++ i) { for (const stl_facet &facet : stl->facet_start) {
memcpy(buffer, stl->facet_start + i, 50); memcpy(buffer, &facet, 50);
// Convert to little endian. // Convert to little endian.
stl_internal_reverse_quads(buffer, 48); stl_internal_reverse_quads(buffer, 48);
fwrite(buffer, SIZEOF_STL_FACET, 1, fp); fwrite(buffer, SIZEOF_STL_FACET, 1, fp);

View file

@ -11,7 +11,7 @@ ExtrusionEntityCollection::ExtrusionEntityCollection(const ExtrusionPaths &paths
this->append(paths); this->append(paths);
} }
ExtrusionEntityCollection& ExtrusionEntityCollection::operator= (const ExtrusionEntityCollection &other) ExtrusionEntityCollection& ExtrusionEntityCollection::operator=(const ExtrusionEntityCollection &other)
{ {
this->entities = other.entities; this->entities = other.entities;
for (size_t i = 0; i < this->entities.size(); ++i) for (size_t i = 0; i < this->entities.size(); ++i)
@ -175,20 +175,20 @@ size_t ExtrusionEntityCollection::items_count() const
} }
// Returns a single vector of pointers to all non-collection items contained in this one. // Returns a single vector of pointers to all non-collection items contained in this one.
void ExtrusionEntityCollection::flatten(ExtrusionEntityCollection* retval) const
{
for (const ExtrusionEntity *entity : this->entities)
if (entity->is_collection())
retval->append(static_cast<const ExtrusionEntityCollection*>(entity)->flatten().entities);
else
retval->append(*entity);
}
ExtrusionEntityCollection ExtrusionEntityCollection::flatten() const ExtrusionEntityCollection ExtrusionEntityCollection::flatten() const
{ {
ExtrusionEntityCollection coll; struct Flatten {
this->flatten(&coll); ExtrusionEntityCollection out;
return coll; void recursive_do(const ExtrusionEntityCollection &collection) {
for (const ExtrusionEntity* entity : collection.entities)
if (entity->is_collection())
this->recursive_do(*static_cast<const ExtrusionEntityCollection*>(entity));
else
out.append(*entity);
}
} flatten;
flatten.recursive_do(*this);
return flatten.out;
} }
double ExtrusionEntityCollection::min_mm3_per_mm() const double ExtrusionEntityCollection::min_mm3_per_mm() const

View file

@ -85,7 +85,6 @@ public:
Polygons polygons_covered_by_spacing(const float scaled_epsilon = 0.f) const Polygons polygons_covered_by_spacing(const float scaled_epsilon = 0.f) const
{ Polygons out; this->polygons_covered_by_spacing(out, scaled_epsilon); return out; } { Polygons out; this->polygons_covered_by_spacing(out, scaled_epsilon); return out; }
size_t items_count() const; size_t items_count() const;
void flatten(ExtrusionEntityCollection* retval) const;
ExtrusionEntityCollection flatten() const; ExtrusionEntityCollection flatten() const;
double min_mm3_per_mm() const; double min_mm3_per_mm() const;
double total_volume() const override { double volume=0.; for (const auto& ent : entities) volume+=ent->total_volume(); return volume; } double total_volume() const override { double volume=0.; for (const auto& ent : entities) volume+=ent->total_volume(); return volume; }