72 DegenerationError(std::string msg, std::string loc): util::ExceptionMixin<DegenerationError>(std::move(msg), std::move(loc)) {}
93 template <
class Primitive>
94 static void enforceEdge(
const Primitive& iPrimitive,
int iIndexOfTailVertex)
96 if (iPrimitive.at(iIndexOfTailVertex) == iPrimitive.at(iIndexOfTailVertex + 1))
98 LASS_THROW_EX(DegenerationError,
"Degenerate edge detected at tail vertex '" << iIndexOfTailVertex <<
"'.");
102 template <
class Primitive>
103 static void enforceSimple(
const Primitive& )
107 template <
class Primitive>
108 static const typename Primitive::TValue enforceNonZeroSignedArea(
const Primitive& iPrimitive)
110 const typename Primitive::TValue result = iPrimitive.signedArea();
111 if (result == Primitive::TNumTraits::zero)
113 LASS_THROW_EX(DegenerationError,
"Area of primitive is zero.");
131 template <
class Primitive>
132 static void enforceEdge(
const Primitive& iPrimitive,
int iIndexOfTailVertex)
134 if (iPrimitive.at(iIndexOfTailVertex) == iPrimitive.at(iIndexOfTailVertex + 1))
136 LASS_THROW_EX(DegenerationError,
"Degenerate edge detected at tail vertex '" << iIndexOfTailVertex <<
"'.");
140 template <
class Primitive>
141 static void enforceSimple(
const Primitive& iPrimitive)
143 if (!iPrimitive.isSimple())
145 LASS_THROW_EX(DegenerationError,
"polygon is not simple.");
149 template <
class Primitive>
150 static const typename Primitive::TValue enforceNonZeroSignedArea(
const Primitive& iPrimitive)
152 const typename Primitive::TValue result = iPrimitive.signedArea();
153 if (result == Primitive::TNumTraits::zero)
155 LASS_THROW_EX(DegenerationError,
"Area of primitive is zero.");