![]() |
Prusa Slicer 2.6.0
|
Inheritance diagram for igl::geodesic::GeodesicAlgorithmExact:
Collaboration diagram for igl::geodesic::GeodesicAlgorithmExact:Public Types | |
| enum | AlgorithmType { EXACT , DIJKSTRA , SUBDIVISION , UNDEFINED_ALGORITHM } |
Public Member Functions | |
| GeodesicAlgorithmExact (geodesic::Mesh *mesh) | |
| ~GeodesicAlgorithmExact () | |
| void | propagate (std::vector< SurfacePoint > &sources, double max_propagation_distance=GEODESIC_INF, std::vector< SurfacePoint > *stop_points=NULL) |
| void | trace_back (SurfacePoint &destination, std::vector< SurfacePoint > &path) |
| unsigned | best_source (SurfacePoint &point, double &best_source_distance) |
| void | print_statistics () |
| void | geodesic (SurfacePoint &source, SurfacePoint &destination, std::vector< SurfacePoint > &path) |
| void | geodesic (std::vector< SurfacePoint > &sources, std::vector< SurfacePoint > &destinations, std::vector< std::vector< SurfacePoint > > &paths) |
| AlgorithmType | type () |
| virtual std::string | name () |
| geodesic::Mesh * | mesh () |
Protected Types | |
| typedef std::pair< vertex_pointer, double > | stop_vertex_with_distace_type |
Protected Member Functions | |
| void | set_stop_conditions (std::vector< SurfacePoint > *stop_points, double stop_distance) |
| double | stop_distance () |
Protected Attributes | |
| AlgorithmType | m_type |
| std::vector< stop_vertex_with_distace_type > | m_stop_vertices |
| double | m_max_propagation_distance |
| geodesic::Mesh * | m_mesh |
| double | m_time_consumed |
| double | m_propagation_distance_stopped |
Private Types | |
| enum | MapType { OLD , NEW } |
| typedef std::set< interval_pointer, Interval > | IntervalQueue |
Private Member Functions | |
| void | update_list_and_queue (list_pointer list, IntervalWithStop *candidates, unsigned num_candidates) |
| unsigned | compute_propagated_parameters (double pseudo_x, double pseudo_y, double d, double start, double end, double alpha, double L, bool first_interval, bool last_interval, bool turn_left, bool turn_right, IntervalWithStop *candidates) |
| void | construct_propagated_intervals (bool invert, edge_pointer edge, face_pointer face, IntervalWithStop *candidates, unsigned &num_candidates, interval_pointer source_interval) |
| double | compute_positive_intersection (double start, double pseudo_x, double pseudo_y, double sin_alpha, double cos_alpha) |
| unsigned | intersect_intervals (interval_pointer zero, IntervalWithStop *one) |
| interval_pointer | best_first_interval (SurfacePoint &point, double &best_total_distance, double &best_interval_position, unsigned &best_source_index) |
| bool | check_stop_conditions (unsigned &index) |
| void | clear () |
| list_pointer | interval_list (edge_pointer e) |
| void | set_sources (std::vector< SurfacePoint > &sources) |
| void | initialize_propagation_data () |
| void | list_edges_visible_from_source (MeshElementBase *p, std::vector< edge_pointer > &storage) |
| long | visible_from_source (SurfacePoint &point) |
| void | best_point_on_the_edge_set (SurfacePoint &point, std::vector< edge_pointer > const &storage, interval_pointer &best_interval, double &best_total_distance, double &best_interval_position) |
| void | possible_traceback_edges (SurfacePoint &point, std::vector< edge_pointer > &storage) |
| bool | erase_from_queue (interval_pointer p) |
Private Attributes | |
| IntervalQueue | m_queue |
| MemoryAllocator< Interval > | m_memory_allocator |
| std::vector< IntervalList > | m_edge_interval_lists |
| MapType | map [5] |
| double | start [6] |
| interval_pointer | i_new [5] |
| unsigned | m_queue_max_size |
| unsigned | m_iterations |
| SortedSources | m_sources |
|
private |
|
protectedinherited |
|
inherited |
| Enumerator | |
|---|---|
| EXACT | |
| DIJKSTRA | |
| SUBDIVISION | |
| UNDEFINED_ALGORITHM | |
|
private |
|
inline |
References igl::geodesic::Mesh::edges(), igl::geodesic::GeodesicAlgorithmBase::EXACT, m_edge_interval_lists, igl::geodesic::GeodesicAlgorithmBase::m_type, and igl::geodesic::GeodesicAlgorithmBase::mesh().
Here is the call graph for this function:
|
inline |
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_edges(), igl::geodesic::SurfacePoint::base_element(), igl::geodesic::IntervalList::covering_interval(), igl::geodesic::Point3D::distance(), igl::geodesic::EDGE, igl::geodesic::FACE, igl::geodesic::IntervalList::find_closest_point(), igl::geodesic::GEODESIC_INF, igl::geodesic::MeshElementBase::id(), igl::geodesic::SurfacePointWithIndex::index(), interval_list(), igl::geodesic::Edge::length(), igl::geodesic::GeodesicAlgorithmBase::m_propagation_distance_stopped, m_sources, igl::geodesic::Interval::signal(), igl::geodesic::SimpleVector< Data >::size(), igl::geodesic::Interval::source_index(), igl::geodesic::SortedSources::sources(), igl::geodesic::SurfacePoint::type(), igl::geodesic::UNDEFINED_POINT, igl::geodesic::Edge::v0(), and igl::geodesic::VERTEX.
Referenced by best_source(), and trace_back().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::IntervalList::find_closest_point(), and interval_list().
Referenced by trace_back().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlinevirtual |
Implements igl::geodesic::GeodesicAlgorithmBase.
References best_first_interval().
Here is the call graph for this function:
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_edges(), igl::geodesic::MeshElementBase::id(), interval_list(), igl::geodesic::Edge::length(), m_queue, igl::geodesic::GeodesicAlgorithmBase::m_stop_vertices, igl::min(), igl::geodesic::IntervalList::signal(), igl::geodesic::GeodesicAlgorithmBase::stop_distance(), and igl::geodesic::Edge::v0().
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::GEODESIC_INF, m_edge_interval_lists, m_memory_allocator, igl::geodesic::GeodesicAlgorithmBase::m_propagation_distance_stopped, and m_queue.
Referenced by initialize_propagation_data().
Here is the caller graph for this function:
|
inlineprivate |
References start.
Referenced by compute_propagated_parameters().
Here is the caller graph for this function:
|
inlineprivate |
References compute_positive_intersection(), cos(), igl::geodesic::GEODESIC_INF, L, sin(), sqrt(), and igl::geodesic::Interval::start().
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_faces(), igl::geodesic::Interval::direction(), igl::geodesic::Interval::edge(), igl::geodesic::Interval::FROM_FACE_0, igl::geodesic::Interval::FROM_FACE_1, igl::geodesic::MeshElementBase::id(), igl::geodesic::Edge::length(), igl::geodesic::length(), igl::geodesic::Interval::min(), igl::geodesic::Interval::next(), igl::geodesic::Interval::pseudo_x(), igl::geodesic::SMALLEST_INTERVAL_RATIO, igl::geodesic::Interval::source_index(), igl::geodesic::Interval::start(), start, and igl::geodesic::IntervalWithStop::stop().
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::GEODESIC_INF, m_queue, and igl::geodesic::Interval::min().
Referenced by update_list_and_queue().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineinherited |
References igl::geodesic::GEODESIC_INF, igl::geodesic::GeodesicAlgorithmBase::propagate(), and igl::geodesic::GeodesicAlgorithmBase::trace_back().
Here is the call graph for this function:
|
inlineinherited |
References igl::geodesic::GEODESIC_INF, igl::geodesic::GeodesicAlgorithmBase::propagate(), and igl::geodesic::GeodesicAlgorithmBase::trace_back().
Referenced by igl::geodesic::GeodesicAlgorithmBase::trace_back().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::SurfacePoint::base_element(), clear(), igl::geodesic::Interval::compute_min_distance(), igl::geodesic::Interval::direction(), igl::geodesic::Interval::FROM_SOURCE, igl::geodesic::Interval::initialize(), interval_list(), igl::geodesic::Edge::length(), list_edges_visible_from_source(), m_sources, igl::geodesic::IntervalWithStop::stop(), and update_list_and_queue().
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::Interval::d(), igl::geodesic::Interval::edge(), igl::geodesic::GEODESIC_INF, igl::geodesic::MeshElementBase::id(), igl::geodesic::Edge::length(), map, igl::geodesic::Interval::min(), NEW, OLD, igl::geodesic::Interval::pseudo_x(), igl::geodesic::Interval::pseudo_y(), igl::geodesic::Interval::signal(), igl::geodesic::SMALLEST_INTERVAL_RATIO, sqrt(), igl::geodesic::Interval::start(), start, igl::geodesic::Interval::stop(), and igl::geodesic::IntervalWithStop::stop().
Referenced by update_list_and_queue().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::MeshElementBase::id(), and m_edge_interval_lists.
Referenced by best_first_interval(), best_point_on_the_edge_set(), check_stop_conditions(), initialize_propagation_data(), propagate(), and visible_from_source().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_edges(), igl::geodesic::EDGE, igl::geodesic::FACE, igl::geodesic::SimpleVector< Data >::size(), igl::geodesic::MeshElementBase::type(), and igl::geodesic::UNDEFINED_POINT.
Referenced by initialize_propagation_data().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineinherited |
References igl::geodesic::GeodesicAlgorithmBase::m_mesh.
Referenced by GeodesicAlgorithmExact().
Here is the caller graph for this function:
|
inlinevirtualinherited |
References igl::geodesic::GeodesicAlgorithmBase::DIJKSTRA, igl::geodesic::GeodesicAlgorithmBase::EXACT, igl::geodesic::GeodesicAlgorithmBase::m_type, igl::geodesic::GeodesicAlgorithmBase::SUBDIVISION, and igl::geodesic::GeodesicAlgorithmBase::UNDEFINED_ALGORITHM.
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_edges(), igl::geodesic::MeshElementBase::adjacent_faces(), igl::geodesic::SurfacePoint::base_element(), igl::geodesic::EDGE, igl::geodesic::Face::next_edge(), igl::geodesic::Face::opposite_edge(), igl::geodesic::SimpleVector< Data >::size(), igl::geodesic::SurfacePoint::type(), igl::geodesic::Edge::v0(), igl::geodesic::Edge::v1(), and igl::geodesic::VERTEX.
Referenced by trace_back().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlinevirtual |
Reimplemented from igl::geodesic::GeodesicAlgorithmBase.
References m_edge_interval_lists, m_iterations, m_queue_max_size, and igl::geodesic::GeodesicAlgorithmBase::print_statistics().
Here is the call graph for this function:
|
inlinevirtual |
Implements igl::geodesic::GeodesicAlgorithmBase.
References igl::geodesic::MeshElementBase::adjacent_faces(), check_stop_conditions(), compute_propagated_parameters(), construct_propagated_intervals(), igl::geodesic::Interval::d(), igl::geodesic::Interval::direction(), igl::geodesic::Interval::edge(), igl::geodesic::Interval::FROM_FACE_0, igl::geodesic::Interval::FROM_FACE_1, igl::geodesic::GEODESIC_INF, igl::geodesic::MeshElementBase::id(), initialize_propagation_data(), interval_list(), igl::geodesic::Edge::is_boundary(), igl::geodesic::Edge::length(), igl::geodesic::length(), m_iterations, igl::geodesic::GeodesicAlgorithmBase::m_propagation_distance_stopped, m_queue, m_queue_max_size, igl::geodesic::GeodesicAlgorithmBase::m_time_consumed, igl::min(), igl::geodesic::Interval::next(), igl::geodesic::Face::next_edge(), igl::geodesic::Interval::pseudo_x(), igl::geodesic::Interval::pseudo_y(), igl::geodesic::Vertex::saddle_or_boundary(), set_sources(), igl::geodesic::GeodesicAlgorithmBase::set_stop_conditions(), igl::geodesic::Interval::start(), start, igl::geodesic::Interval::stop(), update_list_and_queue(), igl::geodesic::Edge::v0(), igl::geodesic::Edge::v1(), and igl::geodesic::Face::vertex_angle().
Referenced by igl::exact_geodesic().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::SortedSources::initialize(), and m_sources.
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprotectedinherited |
References igl::geodesic::Mesh::closest_vertices(), igl::geodesic::Point3D::distance(), igl::geodesic::GeodesicAlgorithmBase::m_max_propagation_distance, igl::geodesic::GeodesicAlgorithmBase::m_mesh, igl::geodesic::GeodesicAlgorithmBase::m_stop_vertices, and igl::geodesic::GeodesicAlgorithmBase::stop_distance().
Referenced by propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprotectedinherited |
References igl::geodesic::GeodesicAlgorithmBase::m_max_propagation_distance.
Referenced by check_stop_conditions(), and igl::geodesic::GeodesicAlgorithmBase::set_stop_conditions().
Here is the caller graph for this function:
|
inlinevirtual |
Implements igl::geodesic::GeodesicAlgorithmBase.
References best_first_interval(), best_point_on_the_edge_set(), igl::geodesic::Interval::edge(), igl::geodesic::GEODESIC_INF, igl::geodesic::Edge::length(), m_sources, possible_traceback_edges(), igl::geodesic::SMALLEST_INTERVAL_RATIO, igl::geodesic::Interval::source_index(), igl::geodesic::Edge::v0(), igl::geodesic::Edge::v1(), and visible_from_source().
Referenced by igl::exact_geodesic().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineinherited |
References igl::geodesic::GeodesicAlgorithmBase::m_type.
|
inlineprivate |
References igl::geodesic::Interval::compute_min_distance(), igl::geodesic::IntervalList::edge(), erase_from_queue(), igl::geodesic::IntervalList::first(), i_new, intersect_intervals(), igl::geodesic::Edge::length(), m_memory_allocator, m_queue, map, NEW, igl::geodesic::Interval::next(), OLD, igl::geodesic::SMALLEST_INTERVAL_RATIO, igl::geodesic::Interval::start(), start, igl::geodesic::Interval::stop(), and igl::geodesic::IntervalWithStop::stop().
Referenced by initialize_propagation_data(), and propagate().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineprivate |
References igl::geodesic::MeshElementBase::adjacent_edges(), igl::geodesic::SurfacePoint::base_element(), igl::geodesic::IntervalList::covering_interval(), igl::geodesic::Point3D::distance(), igl::geodesic::EDGE, igl::geodesic::FACE, igl::geodesic::MeshElementBase::id(), interval_list(), igl::geodesic::Edge::length(), igl::geodesic::SimpleVector< Data >::size(), igl::geodesic::Interval::source_index(), igl::geodesic::SurfacePoint::type(), igl::geodesic::UNDEFINED_POINT, igl::geodesic::Edge::v0(), igl::geodesic::VERTEX, and igl::geodesic::Interval::visible_from_source().
Referenced by trace_back().
Here is the call graph for this function:
Here is the caller graph for this function:
|
private |
Referenced by update_list_and_queue().
|
private |
Referenced by GeodesicAlgorithmExact(), clear(), interval_list(), and print_statistics().
|
private |
Referenced by print_statistics(), and propagate().
|
protectedinherited |
|
private |
Referenced by clear(), and update_list_and_queue().
|
protectedinherited |
|
protectedinherited |
Referenced by best_first_interval(), clear(), and propagate().
|
private |
Referenced by check_stop_conditions(), clear(), erase_from_queue(), propagate(), and update_list_and_queue().
|
private |
Referenced by print_statistics(), and propagate().
|
private |
Referenced by best_first_interval(), initialize_propagation_data(), set_sources(), and trace_back().
|
protectedinherited |
Referenced by check_stop_conditions(), and igl::geodesic::GeodesicAlgorithmBase::set_stop_conditions().
|
protectedinherited |
Referenced by igl::geodesic::GeodesicAlgorithmBase::print_statistics(), and propagate().
|
protectedinherited |
|
private |
Referenced by intersect_intervals(), and update_list_and_queue().
|
private |