39 [&](
const auto& aShape ) ->
double
41 using MANIFOLD_TYPE = std::decay_t<
decltype( aShape )>;
43 if constexpr( std::is_same_v<MANIFOLD_TYPE, LINE> )
44 return aShape.Distance( aPoint );
45 else if constexpr( std::is_same_v<MANIFOLD_TYPE, HALF_LINE> )
46 return aShape.NearestPoint( aPoint ).Distance( aPoint );
47 else if constexpr( std::is_same_v<MANIFOLD_TYPE, SEG> )
48 return aShape.Distance( aPoint );
49 else if constexpr( std::is_same_v<MANIFOLD_TYPE, CIRCLE> )
50 return std::abs( aShape.Center.Distance( aPoint ) - aShape.Radius );
51 else if constexpr( std::is_same_v<MANIFOLD_TYPE, SHAPE_ARC> )
52 return aShape.NearestPoint( aPoint ).Distance( aPoint );
54 return aShape.Distance( aPoint );
std::variant< LINE, HALF_LINE, SEG, CIRCLE, SHAPE_ARC, BOX2I > INTERSECTABLE_GEOM
A variant type that can hold any of the supported geometry types for intersection calculations.