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:
authortamasmeszaros <meszaros.q@gmail.com>2019-10-03 15:23:03 +0300
committertamasmeszaros <meszaros.q@gmail.com>2019-10-03 15:23:22 +0300
commitc4d50ea639ed551aaf9557eb8c584dd4d84b5e38 (patch)
treefceab575832b86f01998ceefe51e6eb7653c17d8 /src/libslic3r/SLA
parent23a7e77a81d997ae789c9c0bff31f889460d868a (diff)
Add test obj and address for support under ground level if no elevation
Diffstat (limited to 'src/libslic3r/SLA')
-rw-r--r--src/libslic3r/SLA/SLASupportTreeBuilder.hpp4
-rw-r--r--src/libslic3r/SLA/SLASupportTreeBuildsteps.cpp24
2 files changed, 15 insertions, 13 deletions
diff --git a/src/libslic3r/SLA/SLASupportTreeBuilder.hpp b/src/libslic3r/SLA/SLASupportTreeBuilder.hpp
index 487e5cf94..9a0036474 100644
--- a/src/libslic3r/SLA/SLASupportTreeBuilder.hpp
+++ b/src/libslic3r/SLA/SLASupportTreeBuilder.hpp
@@ -308,6 +308,8 @@ public:
template<class...Args> long add_pillar(long headid, Args&&... args)
{
std::lock_guard<Mutex> lk(m_mutex);
+ if (m_pillars.capacity() < m_heads.size())
+ m_pillars.reserve(m_heads.size() * 2);
assert(headid >= 0 && headid < m_head_indices.size());
Head &head = m_heads[m_head_indices[size_t(headid)]];
@@ -357,6 +359,8 @@ public:
template<class...Args> long add_pillar(Args&&...args)
{
std::lock_guard<Mutex> lk(m_mutex);
+ if (m_pillars.capacity() < m_heads.size())
+ m_pillars.reserve(m_heads.size() * 2);
m_pillars.emplace_back(std::forward<Args>(args)...);
Pillar& pillar = m_pillars.back();
pillar.id = long(m_pillars.size() - 1);
diff --git a/src/libslic3r/SLA/SLASupportTreeBuildsteps.cpp b/src/libslic3r/SLA/SLASupportTreeBuildsteps.cpp
index 9b87aa469..60e8f15b7 100644
--- a/src/libslic3r/SLA/SLASupportTreeBuildsteps.cpp
+++ b/src/libslic3r/SLA/SLASupportTreeBuildsteps.cpp
@@ -440,7 +440,7 @@ bool SupportTreeBuildsteps::interconnect(const Pillar &pillar,
bool SupportTreeBuildsteps::connect_to_nearpillar(const Head &head,
long nearpillar_id)
{
- auto nearpillar = [this, nearpillar_id]() {
+ auto nearpillar = [this, nearpillar_id]() -> const Pillar& {
return m_builder.pillar(nearpillar_id);
};
@@ -543,9 +543,8 @@ bool SupportTreeBuildsteps::search_pillar_and_connect(const Head &head)
nearest_id = ne.second;
if(nearest_id >= 0) {
- auto nearpillarID = unsigned(nearest_id);
- if(nearpillarID < m_builder.pillarcount()) {
- if(!connect_to_nearpillar(head, nearpillarID)) {
+ if(size_t(nearest_id) < m_builder.pillarcount()) {
+ if(!connect_to_nearpillar(head, nearest_id)) {
nearest_id = ID_UNSET; // continue searching
spindex.remove(ne); // without the current pillar
}
@@ -1361,22 +1360,21 @@ void SupportTreeBuildsteps::routing_headless()
// This is only for checking
double idist = bridge_mesh_intersect(sph, dir, R, true);
- double dist = ray_mesh_intersect(sj, dir);
- if (std::isinf(dist))
- dist = sph(Z) - m_mesh.ground_level()
- + m_mesh.ground_level_offset();
+ double realdist = ray_mesh_intersect(sj, dir);
+ double dist = realdist;
- if(std::isnan(idist) || idist < 2*R ||
- std::isnan(dist) || dist < 2*R)
- {
+ if (std::isinf(dist)) dist = sph(Z) - m_builder.ground_level;
+
+ if(std::isnan(idist) || idist < 2*R || std::isnan(dist) || dist < 2*R) {
BOOST_LOG_TRIVIAL(warning) << "Can not find route for headless"
<< " support stick at: "
<< sj.transpose();
continue;
}
- Vec3d ej = sj + (dist + HWIDTH_MM)* dir;
- m_builder.add_compact_bridge(sp, ej, n, R, !std::isinf(dist));
+ bool use_endball = !std::isinf(realdist);
+ Vec3d ej = sj + (dist + HWIDTH_MM) * dir;
+ m_builder.add_compact_bridge(sp, ej, n, R, use_endball);
}
}