static inline void apply(std::size_t size_at_start, Rings& rings, typename boost::range_value<Rings>::type& ring, Turns& turns, typename boost::range_value<Turns>::type const& turn, Operation& operation, detail::overlay::traverse_error_type traverse_error, Geometry const& , Geometry const& , RobustPolicy const& , state_type& state, Visitor& visitor ) { #if defined(BOOST_GEOMETRY_COUNT_BACKTRACK_WARNINGS) extern int g_backtrack_warning_count; g_backtrack_warning_count++; #endif //std::cout << "!"; //std::cout << "WARNING " << traverse_error_string(traverse_error) << std::endl; state.m_good = false; // Make bad output clean rings.resize(size_at_start); ring.clear(); // Reject this as a starting point operation.visited.set_rejected(); // And clear all visit info clear_visit_info(turns); }
static inline void apply(std::size_t size_at_start, Rings& rings, typename boost::range_value<Rings>::type& ring, Turns& turns, Operation& operation, std::string const& reason, Geometry const& , Geometry const& , state_type& state ) { #if defined(BOOST_GEOMETRY_COUNT_BACKTRACK_WARNINGS) extern int g_backtrack_warning_count; g_backtrack_warning_count++; #endif //std::cout << "!"; //std::cout << "WARNING " << reason << std::endl; // TODO this is a copy of dissolve, check this for buffer state.m_good = false; // Make bad output clean rings.resize(size_at_start); ring.clear(); // Reject this as a starting point operation.visited.set_rejected(); // And clear all visit info clear_visit_info(turns); }
void traverse_with_operation(turn_type const& start_turn, std::size_t turn_index, int op_index, Rings& rings, std::size_t& finalized_ring_size, typename Backtrack::state_type& state) { typedef typename boost::range_value<Rings>::type ring_type; turn_operation_type const& start_op = start_turn.operations[op_index]; if (! start_op.visited.none() || ! start_op.enriched.startable || start_op.visited.rejected() || ! (start_op.operation == target_operation || start_op.operation == detail::overlay::operation_continue)) { return; } ring_type ring; traverse_error_type traverse_error = traverse(ring, turn_index, op_index); if (traverse_error == traverse_error_none) { std::size_t const min_num_points = core_detail::closure::minimum_ring_size < geometry::closure<ring_type>::value >::value; if (geometry::num_points(ring) >= min_num_points) { clean_closing_dups_and_spikes(ring, m_robust_policy); rings.push_back(ring); m_trav.finalize_visit_info(); finalized_ring_size++; } } else { Backtrack::apply( finalized_ring_size, rings, ring, m_turns, start_turn, m_turns[turn_index].operations[op_index], traverse_error, m_geometry1, m_geometry2, m_robust_policy, state, m_visitor); } }
static inline void apply(std::size_t size_at_start, Rings& rings, typename boost::range_value<Rings>::type& ring, Turns& turns, Operation& operation, std::string const& , Geometry const& , Geometry const& , state_type& state ) { state.m_good = false; // Make bad output clean rings.resize(size_at_start); ring.clear(); // Reject this as a starting point operation.visited.set_rejected(); // And clear all visit info clear_visit_info(turns); }