}
-template <typename Point, typename Original>
-inline int point_in_original(Point const& point, Original const& original)
+template <typename Point, typename Original, typename PointInGeometryStrategy>
+inline int point_in_original(Point const& point, Original const& original,
+ PointInGeometryStrategy const& strategy)
{
- // The winding strategy is scanning in x direction
- // therefore it's critical to pass direction calculated
- // for x dimension below.
- typedef strategy::within::winding<Point> strategy_type;
-
- typename strategy_type::state_type state;
- strategy_type strategy;
+ typename PointInGeometryStrategy::state_type state;
if (boost::size(original.m_sections) == 0
|| boost::size(original.m_ring) - boost::size(original.m_sections) < 16)
}
-template <typename Turns>
+template <typename Turns, typename PointInGeometryStrategy>
class turn_in_original_visitor
{
public:
- turn_in_original_visitor(Turns& turns)
+ turn_in_original_visitor(Turns& turns, PointInGeometryStrategy const& strategy)
: m_mutable_turns(turns)
+ , m_point_in_geometry_strategy(strategy)
{}
template <typename Turn, typename Original>
return true;
}
- int const code = point_in_original(turn.robust_point, original);
+ int const code = point_in_original(turn.robust_point, original, m_point_in_geometry_strategy);
if (code == -1)
{
private :
Turns& m_mutable_turns;
+ PointInGeometryStrategy const& m_point_in_geometry_strategy;
};