mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-19 03:13:39 +00:00
Add the full source of BambuStudio
using version 1.0.10
This commit is contained in:
79
src/libslic3r/MinimumSpanningTree.hpp
Normal file
79
src/libslic3r/MinimumSpanningTree.hpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#ifndef MINIMUMSPANNINGTREE_H
|
||||
#define MINIMUMSPANNINGTREE_H
|
||||
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
#include "Point.hpp"
|
||||
|
||||
namespace Slic3r
|
||||
{
|
||||
|
||||
/*!
|
||||
* \brief Implements Prim's algorithm to compute Minimum Spanning Trees (MST).
|
||||
*
|
||||
* The minimum spanning tree is always computed from a clique of vertices.
|
||||
*/
|
||||
class MinimumSpanningTree
|
||||
{
|
||||
/*!
|
||||
* \brief Represents an edge of the tree.
|
||||
*
|
||||
* While edges are meant to be undirected, these do have a start and end
|
||||
* point.
|
||||
*/
|
||||
struct Edge {
|
||||
/**
|
||||
* The point at which this edge starts.
|
||||
*/
|
||||
const Point start;
|
||||
|
||||
/**
|
||||
* The point at which this edge ends.
|
||||
*/
|
||||
const Point end;
|
||||
};
|
||||
public:
|
||||
MinimumSpanningTree() = default;
|
||||
/*!
|
||||
* \brief Constructs a minimum spanning tree that spans all given vertices.
|
||||
*/
|
||||
MinimumSpanningTree(std::vector<Point> vertices);
|
||||
|
||||
/*!
|
||||
* \brief Gets the nodes that are adjacent to the specified node.
|
||||
* \return A list of nodes that are adjacent.
|
||||
*/
|
||||
std::vector<Point> adjacent_nodes(Point node) const;
|
||||
|
||||
/*!
|
||||
* \brief Gets the leaves of the tree.
|
||||
* \return A list of nodes that are all leaves of the tree.
|
||||
*/
|
||||
std::vector<Point> leaves() const;
|
||||
|
||||
/*!
|
||||
* \brief Gets all vertices of the tree.
|
||||
* \return A list of vertices of the tree.
|
||||
*/
|
||||
std::vector<Point> vertices() const;
|
||||
|
||||
private:
|
||||
using AdjacencyGraph_t = std::unordered_map<Point, std::vector<Edge>, PointHash>;
|
||||
AdjacencyGraph_t adjacency_graph;
|
||||
|
||||
/*!
|
||||
* \brief Computes the edges of a minimum spanning tree using Prim's
|
||||
* algorithm.
|
||||
*
|
||||
* \param vertices The vertices to span.
|
||||
* \return An adjacency graph with for each point one or more edges.
|
||||
*/
|
||||
AdjacencyGraph_t prim(std::vector<Point> vertices) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* MINIMUMSPANNINGTREE_H */
|
||||
|
||||
Reference in New Issue
Block a user