Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xs/src/libslic3r/ExtrusionEntityCollection.cpp')
-rw-r--r--xs/src/libslic3r/ExtrusionEntityCollection.cpp61
1 files changed, 54 insertions, 7 deletions
diff --git a/xs/src/libslic3r/ExtrusionEntityCollection.cpp b/xs/src/libslic3r/ExtrusionEntityCollection.cpp
index 79736cbcb..5904252ff 100644
--- a/xs/src/libslic3r/ExtrusionEntityCollection.cpp
+++ b/xs/src/libslic3r/ExtrusionEntityCollection.cpp
@@ -8,9 +8,13 @@ namespace Slic3r {
ExtrusionEntityCollection::ExtrusionEntityCollection(const ExtrusionEntityCollection& collection)
: no_sort(collection.no_sort), orig_indices(collection.orig_indices)
{
- this->entities.reserve(collection.entities.size());
- for (ExtrusionEntitiesPtr::const_iterator it = collection.entities.begin(); it != collection.entities.end(); ++it)
- this->entities.push_back((*it)->clone());
+ this->append(collection);
+}
+
+ExtrusionEntityCollection::ExtrusionEntityCollection(const ExtrusionPaths &paths)
+ : no_sort(false)
+{
+ this->append(paths);
}
ExtrusionEntityCollection& ExtrusionEntityCollection::operator= (const ExtrusionEntityCollection &other)
@@ -28,6 +32,16 @@ ExtrusionEntityCollection::swap (ExtrusionEntityCollection &c)
std::swap(this->no_sort, c.no_sort);
}
+ExtrusionEntityCollection::operator ExtrusionPaths() const
+{
+ ExtrusionPaths paths;
+ for (ExtrusionEntitiesPtr::const_iterator it = this->entities.begin(); it != this->entities.end(); ++it) {
+ if (const ExtrusionPath* path = dynamic_cast<const ExtrusionPath*>(*it))
+ paths.push_back(*path);
+ }
+ return paths;
+}
+
ExtrusionEntityCollection*
ExtrusionEntityCollection::clone() const
{
@@ -58,6 +72,33 @@ ExtrusionEntityCollection::last_point() const
}
void
+ExtrusionEntityCollection::append(const ExtrusionEntity &entity)
+{
+ this->entities.push_back(entity.clone());
+}
+
+void
+ExtrusionEntityCollection::append(const ExtrusionEntityCollection &collection)
+{
+ this->entities.insert(this->entities.end(), collection.entities.begin(), collection.entities.end());
+}
+
+void
+ExtrusionEntityCollection::append(const ExtrusionPaths &paths)
+{
+ for (ExtrusionPaths::const_iterator path = paths.begin(); path != paths.end(); ++path)
+ this->append(*path);
+}
+
+ExtrusionEntityCollection
+ExtrusionEntityCollection::chained_path(bool no_reverse, std::vector<size_t>* orig_indices) const
+{
+ ExtrusionEntityCollection coll;
+ this->chained_path(&coll, no_reverse, orig_indices);
+ return coll;
+}
+
+void
ExtrusionEntityCollection::chained_path(ExtrusionEntityCollection* retval, bool no_reverse, std::vector<size_t>* orig_indices) const
{
if (this->entities.empty()) return;
@@ -145,15 +186,21 @@ ExtrusionEntityCollection::flatten(ExtrusionEntityCollection* retval) const
for (ExtrusionEntitiesPtr::const_iterator it = this->entities.begin(); it != this->entities.end(); ++it) {
if ((*it)->is_collection()) {
ExtrusionEntityCollection* collection = dynamic_cast<ExtrusionEntityCollection*>(*it);
- ExtrusionEntityCollection contents;
- collection->flatten(&contents);
- retval->entities.insert(retval->entities.end(), contents.entities.begin(), contents.entities.end());
+ retval->append(collection->flatten());
} else {
- retval->entities.push_back((*it)->clone());
+ retval->append(**it);
}
}
}
+ExtrusionEntityCollection
+ExtrusionEntityCollection::flatten() const
+{
+ ExtrusionEntityCollection coll;
+ this->flatten(&coll);
+ return coll;
+}
+
double
ExtrusionEntityCollection::min_mm3_per_mm() const
{