get_turn_info_for_endpoint<true, true>
::apply(range_p, range_q,
tp_model, inters, method_none, out,
- umbrella_strategy.get_point_in_point_strategy());
+ umbrella_strategy);
break;
case 'd' : // disjoint: never do anything
case 'm' :
{
+ using handler = touch_interior<TurnInfo, verify_policy_ll>;
+
if ( get_turn_info_for_endpoint<false, true>
::apply(range_p, range_q,
tp_model, inters, method_touch_interior, out,
- umbrella_strategy.get_point_in_point_strategy()) )
+ umbrella_strategy) )
{
// do nothing
}
else
{
- typedef touch_interior
- <
- TurnInfo
- > policy;
-
// If Q (1) arrives (1)
if ( inters.d_info().arrival[1] == 1)
{
- policy::template apply<0>(range_p, range_q, tp,
+ handler::template apply<0>(range_p, range_q, tp,
inters.i_info(), inters.d_info(),
inters.sides(),
umbrella_strategy);
else
{
// Swap p/q
- policy::template apply<1>(range_q, range_p, tp,
+ handler::template apply<1>(range_q, range_p, tp,
inters.i_info(), inters.d_info(),
- inters.get_swapped_sides(),
+ inters.swapped_sides(),
umbrella_strategy);
}
break;
case 't' :
{
+ using handler = touch<TurnInfo, verify_policy_ll>;
+
// Both touch (both arrive there)
if ( get_turn_info_for_endpoint<false, true>
::apply(range_p, range_q,
tp_model, inters, method_touch, out,
- umbrella_strategy.get_point_in_point_strategy()) )
+ umbrella_strategy) )
{
// do nothing
}
else
{
- touch<TurnInfo>::apply(range_p, range_q, tp,
- inters.i_info(), inters.d_info(),
- inters.sides(),
- umbrella_strategy);
+ handler::apply(range_p, range_q, tp,
+ inters.i_info(), inters.d_info(),
+ inters.sides(),
+ umbrella_strategy);
// workarounds for touch<> not taking spikes into account starts here
// those was discovered empirically
break;
case 'e':
{
+ using handler = equal<TurnInfo, verify_policy_ll>;
+
if ( get_turn_info_for_endpoint<true, true>
::apply(range_p, range_q,
tp_model, inters, method_equal, out,
- umbrella_strategy.get_point_in_point_strategy()) )
+ umbrella_strategy) )
{
// do nothing
}
{
// Both equal
// or collinear-and-ending at intersection point
- equal<TurnInfo>::apply(range_p, range_q, tp,
+ handler::apply(range_p, range_q, tp,
inters.i_info(), inters.d_info(), inters.sides(),
umbrella_strategy);
if ( get_turn_info_for_endpoint<true, true>
::apply(range_p, range_q,
tp_model, inters, method_collinear, out,
- umbrella_strategy.get_point_in_point_strategy()) )
+ umbrella_strategy) )
{
// do nothing
}
if ( inters.d_info().arrival[0] == 0 )
{
// Collinear, but similar thus handled as equal
- equal<TurnInfo>::apply(range_p, range_q, tp,
+ using handler = equal<TurnInfo, verify_policy_ll>;
+
+ handler::apply(range_p, range_q, tp,
inters.i_info(), inters.d_info(), inters.sides(),
umbrella_strategy);
}
else
{
- collinear<TurnInfo>::apply(range_p, range_q,
- tp, inters.i_info(), inters.d_info(), inters.sides());
+ using handler = collinear<TurnInfo, verify_policy_ll>;
+ handler::apply(range_p, range_q, tp,
+ inters.i_info(), inters.d_info(),
+ inters.sides());
//method_replace = method_touch_interior;
//spike_op = operation_continue;
// degenerate points
if ( BOOST_GEOMETRY_CONDITION(AssignPolicy::include_degenerate) )
{
- typedef typename UmbrellaStrategy::point_in_point_strategy_type
- equals_strategy_type;
-
only_convert::apply(tp, inters.i_info());
// if any, only one of those should be true
if ( range_p.is_first_segment()
- && equals::equals_point_point(range_p.at(0), tp.point, equals_strategy_type()) )
+ && equals::equals_point_point(range_p.at(0), tp.point, umbrella_strategy) )
{
tp.operations[0].position = position_front;
}
else if ( range_p.is_last_segment()
- && equals::equals_point_point(range_p.at(1), tp.point, equals_strategy_type()) )
+ && equals::equals_point_point(range_p.at(1), tp.point, umbrella_strategy) )
{
tp.operations[0].position = position_back;
}
else if ( range_q.is_first_segment()
- && equals::equals_point_point(range_q.at(0), tp.point, equals_strategy_type()) )
+ && equals::equals_point_point(range_q.at(0), tp.point, umbrella_strategy) )
{
tp.operations[1].position = position_front;
}
else if ( range_q.is_last_segment()
- && equals::equals_point_point(range_q.at(1), tp.point, equals_strategy_type()) )
+ && equals::equals_point_point(range_q.at(1), tp.point, umbrella_strategy) )
{
tp.operations[1].position = position_back;
}