18template<fishnet::math::Number T>
20 if (segments.size() < 3)
22 for(
size_t i = 0 ; i < segments.size();++i) {
26 for (
size_t j = i+2; j< segments.size(); ++j){
30 if (l.intersects(r) and not l.touches(r)){
34 if(not segments[i].touches(segments[(i+1)%segments.size()]))
47template<fishnet::math::Number T>
49 if (segments.size() < 3)
51 for(
size_t i = 0 ; i < segments.size();++i) {
53 if(not l.isValid())
continue;
54 for (
size_t j = i+2; j< segments.size(); ++j){
56 if(not r.isValid())
continue;
57 if (l.intersects(r) and not l.touches(r))
60 if(not segments[i].touches(segments[(i+1)%segments.size()]))
61 throw InvalidGeometryException(
"Adjacent Segments of Ring do not touch at endpoints: \n"+segments[i].toString()+
" does not touch "+segments[(i+1)%segments.size()].toString());
Exception class for geometry-related errors.
Definition InvalidGeometryException.hpp:10
Implementation of a segment.
Definition Segment.hpp:14
Definition CollectionConcepts.hpp:39
Definition BoundingBoxWrapper.hpp:5
static constexpr bool isValidPolygonalRing(util::random_access_range_of< Segment< T > > auto const &segments) noexcept
Decides whether a range of segments is a valid, closed polygonal ring.
Definition PolygonalRingVerification.hpp:19
static constexpr void verifyPolygonalRing(util::random_access_range_of< Segment< T > > auto const &segments)
Verify a range segments is a valid, closed polygonal ring.
Definition PolygonalRingVerification.hpp:48