OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GeneralMinCostSolver Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/GCode/ToolOrderUtils.hpp>

Collaboration diagram for Slic3r::GeneralMinCostSolver:

Public Member Functions

 GeneralMinCostSolver (const std::vector< std::vector< float > > &matrix_, const std::vector< int > &u_nodes, const std::vector< int > &v_nodes)
std::vector< int > solve ()
 ~GeneralMinCostSolver ()

Private Attributes

std::unique_ptr< MinCostMaxFlow > m_solver

Detailed Description

Constructor & Destructor Documentation

◆ GeneralMinCostSolver()

Slic3r::GeneralMinCostSolver::GeneralMinCostSolver ( const std::vector< std::vector< float > > & matrix_,
const std::vector< int > & u_nodes,
const std::vector< int > & v_nodes )
345 {
346 m_solver = std::make_unique<MinCostMaxFlow>();
347 m_solver->matrix = matrix_;;
348 m_solver->l_nodes = u_nodes;
349 m_solver->r_nodes = v_nodes;
350
351 m_solver->total_nodes = u_nodes.size() + v_nodes.size() + 2;
352
353 m_solver->source_id =m_solver->total_nodes - 2;
354 m_solver->sink_id = m_solver->total_nodes - 1;
355
356 m_solver->adj.resize(m_solver->total_nodes);
357
358
359 // add edge from source to left nodes,cost to 0
360 for (int i = 0; i < m_solver->l_nodes.size(); ++i)
361 m_solver->add_edge(m_solver->source_id, i, 1, 0);
362
363 // add edge from right nodes to sink,cost to 0
364 for (int i = 0; i < m_solver->r_nodes.size(); ++i)
365 m_solver->add_edge(m_solver->l_nodes.size() + i, m_solver->sink_id, 1, 0);
366
367 // add edge from left node to right nodes
368 for (int i = 0; i < m_solver->l_nodes.size(); ++i) {
369 int from_idx = i;
370 for (int j = 0; j < m_solver->r_nodes.size(); ++j) {
371 int to_idx = m_solver->l_nodes.size() + j;
372 m_solver->add_edge(from_idx, to_idx, 1, m_solver->get_distance(i, j));
373 }
374 }
375 }
std::unique_ptr< MinCostMaxFlow > m_solver
Definition ToolOrderUtils.hpp:72

References m_solver.

◆ ~GeneralMinCostSolver()

Slic3r::GeneralMinCostSolver::~GeneralMinCostSolver ( )
341 {
342 }

Member Function Documentation

◆ solve()

std::vector< int > Slic3r::GeneralMinCostSolver::solve ( )
377 {
378 return m_solver->solve();
379 }

References m_solver.

Member Data Documentation

◆ m_solver

std::unique_ptr<MinCostMaxFlow> Slic3r::GeneralMinCostSolver::m_solver
private

Referenced by GeneralMinCostSolver(), and solve().


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