Add safety offset to thin wall regions to prevent overlapping geometry and corrupt Voronoi diagram
This commit is contained in:
parent
e1f93fd112
commit
4a894b1e20
@ -99,6 +99,7 @@ sub make_perimeters {
|
||||
my $diff = diff_ex(
|
||||
\@last,
|
||||
offset(\@offsets, +0.5*$pwidth),
|
||||
1, # medial axis requires non-overlapping geometry
|
||||
);
|
||||
push @thin_walls, @$diff;
|
||||
}
|
||||
@ -222,9 +223,6 @@ sub make_perimeters {
|
||||
$self->perimeters->append(@loops);
|
||||
|
||||
# process thin walls by collapsing slices to single passes
|
||||
my $min_thin_wall_width = $pwidth/3;
|
||||
my $min_thin_wall_length = 2*$pwidth;
|
||||
#@thin_walls = @{offset2_ex([ map @$_, @thin_walls ], -0.5*$min_thin_wall_width, +0.5*$min_thin_wall_width)};
|
||||
if (@thin_walls) {
|
||||
my @p = map @{$_->medial_axis($pspacing)}, @thin_walls;
|
||||
|
||||
@ -240,6 +238,7 @@ sub make_perimeters {
|
||||
}
|
||||
|
||||
my @paths = ();
|
||||
my $min_thin_wall_length = 2*$pwidth;
|
||||
for my $p (@p) {
|
||||
next if $p->length < $min_thin_wall_length;
|
||||
my %params = (
|
||||
|
@ -237,7 +237,7 @@ MedialAxis::is_valid_edge(const VD::edge_type& edge) const
|
||||
// if we only process segments representing closed loops, none if the
|
||||
// infinite edges (if any) would be part of our MAT anyway
|
||||
if (edge.is_secondary() || edge.is_infinite()) return false;
|
||||
|
||||
|
||||
/* If the cells sharing this edge have a common vertex, we're not interested
|
||||
in this edge. Why? Because it means that the edge lies on the bisector of
|
||||
two contiguous input lines and it was included in the Voronoi graph because
|
||||
|
Loading…
Reference in New Issue
Block a user