OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::MultiNozzleUtils::StaticNozzleGroupResult Class Reference

Layer-less nozzle-grouping result for the device side (static nozzle mapping only). Reconstructed from a loaded gcode.3mf together with the filament/nozzle change sequences. More...

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

Inheritance diagram for Slic3r::MultiNozzleUtils::StaticNozzleGroupResult:
Collaboration diagram for Slic3r::MultiNozzleUtils::StaticNozzleGroupResult:

Public Member Functions

 StaticNozzleGroupResult (bool support_dynamic_map)
int get_extruder_count () const override
std::vector< NozzleInfo > get_used_nozzles_in_extruder (int extruder_id=-1) const override
std::vector< int > get_used_extruders () const override
std::vector< unsigned int > get_used_filaments () const override
std::optional< NozzleInfo > get_nozzle_from_id (int nozzle_id) const override
std::vector< NozzleInfo > get_nozzles_for_filament (int filament_id) const override
std::optional< NozzleInfo > get_first_nozzle_for_filament (int filament_id) const override
bool is_support_dynamic_nozzle_map () const

Static Public Member Functions

static std::optional< StaticNozzleGroupResult > create (const std::vector< FilamentInfo > &filaments_info, const std::vector< NozzleInfo > &nozzles_info, const std::vector< int > &filament_change_seq, const std::vector< int > &nozzle_change_seq, bool support_dynamic_map)

Protected Attributes

bool support_dynamic_nozzle_map {false}

Private Attributes

std::map< int, std::set< int > > _filament_to_nozzles
std::map< int, NozzleInfo > _nozzle_list_map
std::vector< int > _filament_change_seq
std::vector< int > _nozzle_change_seq

Detailed Description

Layer-less nozzle-grouping result for the device side (static nozzle mapping only). Reconstructed from a loaded gcode.3mf together with the filament/nozzle change sequences.

Constructor & Destructor Documentation

◆ StaticNozzleGroupResult()

Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::StaticNozzleGroupResult ( bool support_dynamic_map)
inline
205: NozzleGroupResultBase(support_dynamic_map) {}
NozzleGroupResultBase(bool support_dynamic_map=false)
Definition MultiNozzleUtils.hpp:103

References Slic3r::MultiNozzleUtils::NozzleGroupResultBase::NozzleGroupResultBase().

Referenced by create().

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

Member Function Documentation

◆ create()

std::optional< StaticNozzleGroupResult > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::create ( const std::vector< FilamentInfo > & filaments_info,
const std::vector< NozzleInfo > & nozzles_info,
const std::vector< int > & filament_change_seq,
const std::vector< int > & nozzle_change_seq,
bool support_dynamic_map )
static
741{
742 if (filaments_info.empty() || nozzles_info.empty()) return std::nullopt;
743
744 std::map<int, NozzleInfo> nozzle_list_map;
745 std::map<int, std::set<int>> filament_to_nozzles;
746
747 for (auto nozzle_info : nozzles_info)
748 nozzle_list_map[nozzle_info.group_id] = nozzle_info;
749
750 for (auto filament_info : filaments_info) {
751 auto fil_id = filament_info.id;
752 auto nozzles_id = filament_info.group_id;
753 std::set<int> nozzles_set(nozzles_id.begin(), nozzles_id.end());
754 // Backward compat with older (single-nozzle) gcode.3mf: filament has no group_id, avoid an empty map.
755 if (nozzles_set.empty()) {
756 for (const auto& nozzle_entry : nozzle_list_map)
757 nozzles_set.insert(nozzle_entry.first);
758 }
759 filament_to_nozzles[fil_id] = nozzles_set;
760 }
761
763 result._filament_to_nozzles = filament_to_nozzles;
764 result._nozzle_list_map = nozzle_list_map;
765 result._filament_change_seq = filament_change_seq;
766 result._nozzle_change_seq = nozzle_change_seq;
767
768 return result;
769}
bool support_dynamic_nozzle_map
Definition MultiNozzleUtils.hpp:100
StaticNozzleGroupResult(bool support_dynamic_map)
Definition MultiNozzleUtils.hpp:205

References StaticNozzleGroupResult(), _filament_change_seq, _filament_to_nozzles, _nozzle_change_seq, _nozzle_list_map, and Slic3r::MultiNozzleUtils::NozzleGroupResultBase::support_dynamic_nozzle_map.

Referenced by Slic3r::GUI::PartPlateList::load_from_3mf_structure().

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

◆ get_extruder_count()

int Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_extruder_count ( ) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

779{
780 std::set<int> extruder_ids;
781 for (const auto &elem : _nozzle_list_map) { extruder_ids.insert(elem.second.extruder_id); }
782 return static_cast<int>(extruder_ids.size());
783}
std::map< int, NozzleInfo > _nozzle_list_map
Definition MultiNozzleUtils.hpp:200

References _nozzle_list_map.

◆ get_first_nozzle_for_filament()

std::optional< NozzleInfo > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_first_nozzle_for_filament ( int filament_id) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

832{
833 if (filament_id < 0) return std::nullopt;
834
835 if (!_filament_change_seq.empty() && _filament_change_seq.size() == _nozzle_change_seq.size()) {
836 for (size_t idx = 0; idx < _filament_change_seq.size(); ++idx) {
837 if (_filament_change_seq[idx] == filament_id) {
838 int nozzle_id = _nozzle_change_seq[idx];
839 auto nozzle = get_nozzle_from_id(nozzle_id);
840 if (nozzle) return nozzle;
841 }
842 }
843 }
844
845 auto iter = _filament_to_nozzles.find(filament_id);
846 if (iter == _filament_to_nozzles.end()) return std::nullopt;
847
848 for (int nozzle_id : iter->second) {
849 auto nozzle = get_nozzle_from_id(nozzle_id);
850 if (nozzle) return nozzle;
851 }
852
853 return std::nullopt;
854}
std::vector< int > _filament_change_seq
Definition MultiNozzleUtils.hpp:201
std::map< int, std::set< int > > _filament_to_nozzles
Definition MultiNozzleUtils.hpp:199
std::optional< NozzleInfo > get_nozzle_from_id(int nozzle_id) const override
Definition MultiNozzleUtils.cpp:771
std::vector< int > _nozzle_change_seq
Definition MultiNozzleUtils.hpp:202

References _filament_change_seq, _filament_to_nozzles, _nozzle_change_seq, and get_nozzle_from_id().

Here is the call graph for this function:

◆ get_nozzle_from_id()

std::optional< NozzleInfo > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_nozzle_from_id ( int nozzle_id) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

772{
773 auto iter = _nozzle_list_map.find(nozzle_id);
774 if (iter == _nozzle_list_map.end()) { return std::nullopt; }
775 return iter->second;
776}

References _nozzle_list_map.

Referenced by get_first_nozzle_for_filament().

Here is the caller graph for this function:

◆ get_nozzles_for_filament()

std::vector< NozzleInfo > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_nozzles_for_filament ( int filament_id) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

817{
818 auto iter = _filament_to_nozzles.find(filament_id);
819 if (iter == _filament_to_nozzles.end()) { return std::vector<NozzleInfo>(); }
820
821 std::vector<NozzleInfo> result;
822 for (int nozzle_id : iter->second) {
823 auto nozzle_iter = _nozzle_list_map.find(nozzle_id);
824 if (nozzle_iter != _nozzle_list_map.end()) {
825 result.push_back(nozzle_iter->second);
826 }
827 }
828 return result;
829}

References _filament_to_nozzles, and _nozzle_list_map.

◆ get_used_extruders()

std::vector< int > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_used_extruders ( ) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

798{
799 std::set<int> used_extruders;
800 for (const auto &elem : _nozzle_list_map) { used_extruders.insert(elem.second.extruder_id); }
801 return std::vector<int>(used_extruders.begin(), used_extruders.end());
802}

References _nozzle_list_map.

◆ get_used_filaments()

std::vector< unsigned int > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_used_filaments ( ) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

805{
806 std::vector<unsigned int> used_filaments;
807 used_filaments.reserve(_filament_to_nozzles.size());
808 for (const auto &elem : _filament_to_nozzles) {
809 if (elem.first >= 0) {
810 used_filaments.push_back(static_cast<unsigned int>(elem.first));
811 }
812 }
813 return used_filaments;
814}

References _filament_to_nozzles.

◆ get_used_nozzles_in_extruder()

std::vector< NozzleInfo > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::get_used_nozzles_in_extruder ( int extruder_id = -1) const
overridevirtual

Implements Slic3r::MultiNozzleUtils::NozzleGroupResultBase.

786{
787 std::vector<NozzleInfo> result;
788 for (const auto &elem : _nozzle_list_map) {
789 const auto &nozzle = elem.second;
790 if (target_extruder_id == -1 || nozzle.extruder_id == target_extruder_id) {
791 result.push_back(nozzle);
792 }
793 }
794 return result;
795}

References _nozzle_list_map.

◆ is_support_dynamic_nozzle_map()

bool Slic3r::MultiNozzleUtils::NozzleGroupResultBase::is_support_dynamic_nozzle_map ( ) const
inlineinherited

References support_dynamic_nozzle_map.

Referenced by Slic3r::Print::update_to_config_by_nozzle_group_result().

Here is the caller graph for this function:

Member Data Documentation

◆ _filament_change_seq

std::vector<int> Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::_filament_change_seq
private

◆ _filament_to_nozzles

std::map<int, std::set<int> > Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::_filament_to_nozzles
private

◆ _nozzle_change_seq

std::vector<int> Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::_nozzle_change_seq
private

◆ _nozzle_list_map

std::map<int, NozzleInfo> Slic3r::MultiNozzleUtils::StaticNozzleGroupResult::_nozzle_list_map
private

◆ support_dynamic_nozzle_map


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