Fix for invalid support geometry when connecting to model surface
This commit is contained in:
parent
9b8a68565f
commit
d88f3adce9
1 changed files with 23 additions and 5 deletions
|
@ -8,11 +8,12 @@
|
||||||
#include "SLABoilerPlate.hpp"
|
#include "SLABoilerPlate.hpp"
|
||||||
#include "SLASpatIndex.hpp"
|
#include "SLASpatIndex.hpp"
|
||||||
#include "SLABasePool.hpp"
|
#include "SLABasePool.hpp"
|
||||||
#include <libnest2d/tools/benchmark.h>
|
|
||||||
#include "ClipperUtils.hpp"
|
|
||||||
|
|
||||||
|
#include "ClipperUtils.hpp"
|
||||||
#include "Model.hpp"
|
#include "Model.hpp"
|
||||||
|
|
||||||
|
#include <boost/log/trivial.hpp>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Terminology:
|
* Terminology:
|
||||||
*
|
*
|
||||||
|
@ -1515,22 +1516,39 @@ bool SLASupportTree::generate(const PointSet &points,
|
||||||
{
|
{
|
||||||
// TODO: connect these to the ground pillars if possible
|
// TODO: connect these to the ground pillars if possible
|
||||||
for(auto idx : nogndidx) { tifcl();
|
for(auto idx : nogndidx) { tifcl();
|
||||||
|
double gh = gndheight[idx];
|
||||||
|
double base_width = cfg.head_width_mm;
|
||||||
|
|
||||||
auto& head = result.head(idx);
|
auto& head = result.head(idx);
|
||||||
|
|
||||||
|
// In this case there is no room for the base pinhead.
|
||||||
|
if(gh < head.fullwidth()) {
|
||||||
|
base_width = gh - 2 * cfg.head_front_radius_mm -
|
||||||
|
2*cfg.head_back_radius_mm + cfg.head_penetration_mm;
|
||||||
|
}
|
||||||
|
|
||||||
head.transform();
|
head.transform();
|
||||||
|
|
||||||
double gh = gndheight[idx];
|
|
||||||
Vec3d headend = head.junction_point();
|
Vec3d headend = head.junction_point();
|
||||||
|
|
||||||
Head base_head(cfg.head_back_radius_mm,
|
Head base_head(cfg.head_back_radius_mm,
|
||||||
cfg.head_front_radius_mm,
|
cfg.head_front_radius_mm,
|
||||||
cfg.head_width_mm,
|
base_width,
|
||||||
cfg.head_penetration_mm,
|
cfg.head_penetration_mm,
|
||||||
{0.0, 0.0, 1.0},
|
{0.0, 0.0, 1.0},
|
||||||
{headend(X), headend(Y), headend(Z) - gh});
|
{headend(X), headend(Y), headend(Z) - gh});
|
||||||
|
|
||||||
base_head.transform();
|
base_head.transform();
|
||||||
|
|
||||||
double hl = head.fullwidth() - head.r_back_mm;
|
// Robustness check:
|
||||||
|
if(headend(Z) < base_head.junction_point()(Z)) {
|
||||||
|
// This should not happen it is against all assumptions
|
||||||
|
BOOST_LOG_TRIVIAL(warning)
|
||||||
|
<< "Ignoring invalid supports connecting to model body";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
double hl = base_head.fullwidth() - head.r_back_mm;
|
||||||
|
|
||||||
result.add_pillar(idx,
|
result.add_pillar(idx,
|
||||||
Vec3d{headend(X), headend(Y), headend(Z) - gh + hl},
|
Vec3d{headend(X), headend(Y), headend(Z) - gh + hl},
|
||||||
|
|
Loading…
Add table
Reference in a new issue