Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
igl::geodesic::GeodesicAlgorithmBase Class Referenceabstract
+ Inheritance diagram for igl::geodesic::GeodesicAlgorithmBase:
+ Collaboration diagram for igl::geodesic::GeodesicAlgorithmBase:

Public Types

enum  AlgorithmType { EXACT , DIJKSTRA , SUBDIVISION , UNDEFINED_ALGORITHM }
 

Public Member Functions

 GeodesicAlgorithmBase (geodesic::Mesh *mesh)
 
virtual ~GeodesicAlgorithmBase ()
 
virtual void propagate (std::vector< SurfacePoint > &sources, double max_propagation_distance=GEODESIC_INF, std::vector< SurfacePoint > *stop_points=NULL)=0
 
virtual void trace_back (SurfacePoint &destination, std::vector< SurfacePoint > &path)=0
 
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)
 
virtual unsigned best_source (SurfacePoint &point, double &best_source_distance)=0
 
virtual void print_statistics ()
 
AlgorithmType type ()
 
virtual std::string name ()
 
geodesic::Meshmesh ()
 

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_typem_stop_vertices
 
double m_max_propagation_distance
 
geodesic::Meshm_mesh
 
double m_time_consumed
 
double m_propagation_distance_stopped
 

Detailed Description

Member Typedef Documentation

◆ stop_vertex_with_distace_type

Member Enumeration Documentation

◆ AlgorithmType

Enumerator
EXACT 
DIJKSTRA 
SUBDIVISION 
UNDEFINED_ALGORITHM 
1618 {
1619 EXACT,
1620 DIJKSTRA,
1623 };
@ EXACT
Definition exact_geodesic.cpp:1619
@ SUBDIVISION
Definition exact_geodesic.cpp:1621
@ UNDEFINED_ALGORITHM
Definition exact_geodesic.cpp:1622
@ DIJKSTRA
Definition exact_geodesic.cpp:1620

Constructor & Destructor Documentation

◆ GeodesicAlgorithmBase()

igl::geodesic::GeodesicAlgorithmBase::GeodesicAlgorithmBase ( geodesic::Mesh mesh)
inline
1625 :
1628 m_mesh(mesh)
1629 {};
double m_max_propagation_distance
Definition exact_geodesic.cpp:1674
AlgorithmType m_type
Definition exact_geodesic.cpp:1670
geodesic::Mesh * m_mesh
Definition exact_geodesic.cpp:1676
geodesic::Mesh * mesh()
Definition exact_geodesic.cpp:1660

◆ ~GeodesicAlgorithmBase()

virtual igl::geodesic::GeodesicAlgorithmBase::~GeodesicAlgorithmBase ( )
inlinevirtual
1631{};

Member Function Documentation

◆ best_source()

virtual unsigned igl::geodesic::GeodesicAlgorithmBase::best_source ( SurfacePoint point,
double &  best_source_distance 
)
pure virtual

◆ geodesic() [1/2]

void igl::geodesic::GeodesicAlgorithmBase::geodesic ( std::vector< SurfacePoint > &  sources,
std::vector< SurfacePoint > &  destinations,
std::vector< std::vector< SurfacePoint > > &  paths 
)
inline
1736{
1737 double const max_propagation_distance = GEODESIC_INF;
1738
1739 propagate(sources,
1740 max_propagation_distance,
1741 &destinations); //we use desinations as stop points
1742
1743 paths.resize(destinations.size());
1744
1745 for(unsigned i=0; i<paths.size(); ++i)
1746 {
1747 trace_back(destinations[i], paths[i]);
1748 }
1749}
virtual void propagate(std::vector< SurfacePoint > &sources, double max_propagation_distance=GEODESIC_INF, std::vector< SurfacePoint > *stop_points=NULL)=0
virtual void trace_back(SurfacePoint &destination, std::vector< SurfacePoint > &path)=0
double const GEODESIC_INF
Definition exact_geodesic.cpp:32

References igl::geodesic::GEODESIC_INF, propagate(), and trace_back().

+ Here is the call graph for this function:

◆ geodesic() [2/2]

void igl::geodesic::GeodesicAlgorithmBase::geodesic ( SurfacePoint source,
SurfacePoint destination,
std::vector< SurfacePoint > &  path 
)
inline
1721{
1722 std::vector<SurfacePoint> sources(1, source);
1723 std::vector<SurfacePoint> stop_points(1, destination);
1724 double const max_propagation_distance = GEODESIC_INF;
1725
1726 propagate(sources,
1727 max_propagation_distance,
1728 &stop_points);
1729
1730 trace_back(destination, path);
1731}

References igl::geodesic::GEODESIC_INF, propagate(), and trace_back().

Referenced by trace_back().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mesh()

geodesic::Mesh * igl::geodesic::GeodesicAlgorithmBase::mesh ( )
inline
1660{return m_mesh;};

References m_mesh.

Referenced by igl::geodesic::GeodesicAlgorithmExact::GeodesicAlgorithmExact().

+ Here is the caller graph for this function:

◆ name()

std::string igl::geodesic::GeodesicAlgorithmBase::name ( )
inlinevirtual
1703{
1704 switch(m_type)
1705 {
1706 case EXACT:
1707 return "exact";
1708 case DIJKSTRA:
1709 return "dijkstra";
1710 case SUBDIVISION:
1711 return "subdivision";
1712 default:
1714 return "undefined";
1715 }
1716}

References DIJKSTRA, EXACT, m_type, SUBDIVISION, and UNDEFINED_ALGORITHM.

◆ print_statistics()

virtual void igl::geodesic::GeodesicAlgorithmBase::print_statistics ( )
inlinevirtual

Reimplemented in igl::geodesic::GeodesicAlgorithmExact.

1652 {
1653 std::cout << "propagation step took " << m_time_consumed << " seconds " << std::endl;
1654 };
double m_time_consumed
Definition exact_geodesic.cpp:1678

References m_time_consumed.

Referenced by igl::geodesic::GeodesicAlgorithmExact::print_statistics().

+ Here is the caller graph for this function:

◆ propagate()

virtual void igl::geodesic::GeodesicAlgorithmBase::propagate ( std::vector< SurfacePoint > &  sources,
double  max_propagation_distance = GEODESIC_INF,
std::vector< SurfacePoint > *  stop_points = NULL 
)
pure virtual

Implemented in igl::geodesic::GeodesicAlgorithmExact.

Referenced by geodesic(), and geodesic().

+ Here is the caller graph for this function:

◆ set_stop_conditions()

void igl::geodesic::GeodesicAlgorithmBase::set_stop_conditions ( std::vector< SurfacePoint > *  stop_points,
double  stop_distance 
)
inlineprotected
1753{
1755
1756 if(!stop_points)
1757 {
1758 m_stop_vertices.clear();
1759 return;
1760 }
1761
1762 m_stop_vertices.resize(stop_points->size());
1763
1764 std::vector<vertex_pointer> possible_vertices;
1765 for(unsigned i = 0; i < stop_points->size(); ++i)
1766 {
1767 SurfacePoint* point = &(*stop_points)[i];
1768
1769 possible_vertices.clear();
1770 m_mesh->closest_vertices(point, &possible_vertices);
1771
1772 vertex_pointer closest_vertex = NULL;
1773 double min_distance = 1e100;
1774 for(unsigned j = 0; j < possible_vertices.size(); ++j)
1775 {
1776 double distance = point->distance(possible_vertices[j]);
1777 if(distance < min_distance)
1778 {
1779 min_distance = distance;
1780 closest_vertex = possible_vertices[j];
1781 }
1782 }
1783 assert(closest_vertex);
1784
1785 m_stop_vertices[i].first = closest_vertex;
1786 m_stop_vertices[i].second = min_distance;
1787 }
1788}
std::vector< stop_vertex_with_distace_type > m_stop_vertices
Definition exact_geodesic.cpp:1673
double stop_distance()
Definition exact_geodesic.cpp:1665
unsigned closest_vertices(SurfacePoint *p, std::vector< vertex_pointer > *storage=NULL)
Definition exact_geodesic.cpp:729
Vertex * vertex_pointer
Definition exact_geodesic.cpp:280
double distance(const P &p1, const P &p2)
Definition geometry_traits.hpp:329

References igl::geodesic::Mesh::closest_vertices(), igl::geodesic::Point3D::distance(), m_max_propagation_distance, m_mesh, m_stop_vertices, and stop_distance().

Referenced by igl::geodesic::GeodesicAlgorithmExact::propagate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ stop_distance()

double igl::geodesic::GeodesicAlgorithmBase::stop_distance ( )
inlineprotected
1666 {
1668 }

References m_max_propagation_distance.

Referenced by igl::geodesic::GeodesicAlgorithmExact::check_stop_conditions(), and set_stop_conditions().

+ Here is the caller graph for this function:

◆ trace_back()

virtual void igl::geodesic::GeodesicAlgorithmBase::trace_back ( SurfacePoint destination,
std::vector< SurfacePoint > &  path 
)
pure virtual

Implemented in igl::geodesic::GeodesicAlgorithmExact.

References geodesic().

Referenced by geodesic(), and geodesic().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ type()

AlgorithmType igl::geodesic::GeodesicAlgorithmBase::type ( )
inline
1656{return m_type;};

References m_type.

Member Data Documentation

◆ m_max_propagation_distance

double igl::geodesic::GeodesicAlgorithmBase::m_max_propagation_distance
protected

◆ m_mesh

geodesic::Mesh* igl::geodesic::GeodesicAlgorithmBase::m_mesh
protected

Referenced by mesh(), and set_stop_conditions().

◆ m_propagation_distance_stopped

double igl::geodesic::GeodesicAlgorithmBase::m_propagation_distance_stopped
protected

◆ m_stop_vertices

std::vector<stop_vertex_with_distace_type> igl::geodesic::GeodesicAlgorithmBase::m_stop_vertices
protected

◆ m_time_consumed

double igl::geodesic::GeodesicAlgorithmBase::m_time_consumed
protected

◆ m_type

AlgorithmType igl::geodesic::GeodesicAlgorithmBase::m_type
protected

The documentation for this class was generated from the following file: