public class SnapRoundingNoder extends Object implements Noder
SegmentString
s,
in a performant way, and avoiding unnecessary noding.
Implements the Snap Rounding technique described in
the papers by Hobby, Guibas & Marimont, and Goodrich et al.
Snap Rounding enforces that all output vertices lie on a uniform grid,
which is determined by the provided PrecisionModel
.
Input vertices do not have to be rounded to the grid beforehand; this is done during the snap-rounding process. In fact, rounding cannot be done a priori, since rounding vertices by themselves can distort the rounded topology of the arrangement (i.e. by moving segments away from hot pixels that would otherwise intersect them, or by moving vertices across segments).
To minimize the number of introduced nodes,
the Snap-Rounding Noder avoids creating nodes
at edge vertices if there is no intersection or snap at that location.
However, if two different input edges contain identical segments,
each of the segment vertices will be noded.
This still provides fully-noded output.
This is the same behaviour provided by other noders,
such as MCIndexNoder
and SnappingNoder
.
Constructor and Description |
---|
SnapRoundingNoder(PrecisionModel pm) |
Modifier and Type | Method and Description |
---|---|
void |
computeNodes(Collection inputSegmentStrings)
Computes the nodes in the snap-rounding line arrangement.
|
Collection |
getNodedSubstrings()
Returns a
Collection of fully noded SegmentString s. |
public SnapRoundingNoder(PrecisionModel pm)
public Collection getNodedSubstrings()
Noder
Collection
of fully noded SegmentString
s.
The SegmentStrings have the same context as their parent.getNodedSubstrings
in interface Noder
public void computeNodes(Collection inputSegmentStrings)
NodedSegmentString
s provided as the input.computeNodes
in interface Noder
inputSegmentStrings
- a Collection of NodedSegmentStringsCopyright © 2022. All rights reserved.