OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
libvgcode::ObjectHelper Class Reference
Collaboration diagram for libvgcode::ObjectHelper:

Public Member Functions

 ObjectHelper (const std::vector< Slic3r::CustomGCode::Item > &color_print_values, size_t tool_colors_count, size_t color_print_colors_count, size_t extruders_count)
uint8_t color_id (float print_z, size_t extruder_id) const

Private Member Functions

uint8_t color_print_color_id (double print_z, size_t extruder_id) const
int color_change_color_id (std::vector< Slic3r::CustomGCode::Item >::const_iterator it, size_t extruder_id) const
uint8_t tool_change_color_id (std::vector< Slic3r::CustomGCode::Item >::const_iterator it, size_t extruder_id) const
int m600_color_id (std::vector< Slic3r::CustomGCode::Item >::const_iterator it) const

Private Attributes

const std::vector< Slic3r::CustomGCode::Item > & m_color_print_values
size_t m_tool_colors_count { 0 }
size_t m_color_print_colors_count { 0 }
size_t m_extruders_count { 0 }

Detailed Description

Constructor & Destructor Documentation

◆ ObjectHelper()

libvgcode::ObjectHelper::ObjectHelper ( const std::vector< Slic3r::CustomGCode::Item > & color_print_values,
size_t tool_colors_count,
size_t color_print_colors_count,
size_t extruders_count )
inline
621 : m_color_print_values(color_print_values)
622 , m_tool_colors_count(tool_colors_count)
623 , m_color_print_colors_count(color_print_colors_count)
624 , m_extruders_count(extruders_count) {
625 }
size_t m_tool_colors_count
Definition LibVGCodeWrapper.cpp:640
const std::vector< Slic3r::CustomGCode::Item > & m_color_print_values
Definition LibVGCodeWrapper.cpp:639
size_t m_extruders_count
Definition LibVGCodeWrapper.cpp:642
size_t m_color_print_colors_count
Definition LibVGCodeWrapper.cpp:641

References m_color_print_colors_count, m_color_print_values, m_extruders_count, and m_tool_colors_count.

Member Function Documentation

◆ color_change_color_id()

int libvgcode::ObjectHelper::color_change_color_id ( std::vector< Slic3r::CustomGCode::Item >::const_iterator it,
size_t extruder_id ) const
inlineprivate
689 {
690 if (m_extruders_count == 1)
691 return m600_color_id(it);
692
693 auto it_n = it;
694 bool is_tool_change = false;
695 while (it_n != m_color_print_values.begin()) {
696 --it_n;
697 if (it_n->type == Slic3r::CustomGCode::ToolChange) {
698 is_tool_change = true;
699 if (it_n->extruder == it->extruder || (it_n->extruder == 0 && it->extruder == static_cast<int>(extruder_id + 1)))
700 return m600_color_id(it);
701 break;
702 }
703 }
704 if (!is_tool_change && it->extruder == static_cast<int>(extruder_id + 1))
705 return m600_color_id(it);
706
707 return -1;
708 }
int m600_color_id(std::vector< Slic3r::CustomGCode::Item >::const_iterator it) const
Definition LibVGCodeWrapper.cpp:725
@ ToolChange
Definition CustomGCode.hpp:21

References m600_color_id(), m_color_print_values, m_extruders_count, and Slic3r::CustomGCode::ToolChange.

Referenced by color_print_color_id().

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

◆ color_id()

uint8_t libvgcode::ObjectHelper::color_id ( float print_z,
size_t extruder_id ) const
inline
627 {
628 if (!m_color_print_values.empty())
629 return color_print_color_id(double(print_z), extruder_id);
630 else {
631 if (m_tool_colors_count > 0)
632 return std::min<uint8_t>(m_tool_colors_count - 1, static_cast<uint8_t>(extruder_id));
633 else
634 return 0;
635 }
636 }
uint8_t color_print_color_id(double print_z, size_t extruder_id) const
Definition LibVGCodeWrapper.cpp:644

References color_print_color_id(), m_color_print_values, and m_tool_colors_count.

Referenced by libvgcode::convert_object_to_vertices().

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

◆ color_print_color_id()

uint8_t libvgcode::ObjectHelper::color_print_color_id ( double print_z,
size_t extruder_id ) const
inlineprivate
644 {
645 auto it = std::find_if(m_color_print_values.begin(), m_color_print_values.end(),
646 [print_z](const Slic3r::CustomGCode::Item& code) {
647 return std::fabs(code.print_z - print_z) < EPSILON;
648 });
649 if (it != m_color_print_values.end()) {
650 Slic3r::CustomGCode::Type type = it->type;
651 // pause print or custom Gcode
653 return static_cast<uint8_t>(m_color_print_colors_count - 1); // last color item is a gray color for pause print or custom G-code
654 switch (it->type) {
655 // change color for current extruder
657 const int c = color_change_color_id(it, extruder_id);
658 if (c >= 0)
659 return static_cast<uint8_t>(c);
660 break;
661 }
662 // change tool (extruder)
663 case Slic3r::CustomGCode::ToolChange: { return tool_change_color_id(it, extruder_id); }
664 default: { break; }
665 }
666 }
667
668 const Slic3r::CustomGCode::Item value{ print_z + EPSILON, Slic3r::CustomGCode::Custom, 0, "" };
669 it = std::lower_bound(m_color_print_values.begin(), m_color_print_values.end(), value);
670 while (it != m_color_print_values.begin()) {
671 --it;
672 switch (it->type) {
673 // change color for current extruder
675 const int c = color_change_color_id(it, extruder_id);
676 if (c >= 0)
677 return static_cast<uint8_t>(c);
678 break;
679 }
680 // change tool (extruder)
681 case Slic3r::CustomGCode::ToolChange: { return tool_change_color_id(it, extruder_id); }
682 default: { break; }
683 }
684 }
685
686 return std::min<uint8_t>(m_extruders_count - 1, static_cast<uint8_t>(extruder_id));
687 }
#define EPSILON
Definition ColorUtils.cpp:64
int color_change_color_id(std::vector< Slic3r::CustomGCode::Item >::const_iterator it, size_t extruder_id) const
Definition LibVGCodeWrapper.cpp:689
uint8_t tool_change_color_id(std::vector< Slic3r::CustomGCode::Item >::const_iterator it, size_t extruder_id) const
Definition LibVGCodeWrapper.cpp:710
Type
Definition CustomGCode.hpp:18
@ PausePrint
Definition CustomGCode.hpp:20
@ Template
Definition CustomGCode.hpp:22
@ Custom
Definition CustomGCode.hpp:23
@ ColorChange
Definition CustomGCode.hpp:19

References color_change_color_id(), Slic3r::CustomGCode::ColorChange, Slic3r::CustomGCode::Custom, EPSILON, m_color_print_colors_count, m_color_print_values, m_extruders_count, Slic3r::CustomGCode::PausePrint, Slic3r::CustomGCode::Template, tool_change_color_id(), and Slic3r::CustomGCode::ToolChange.

Referenced by color_id().

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

◆ m600_color_id()

int libvgcode::ObjectHelper::m600_color_id ( std::vector< Slic3r::CustomGCode::Item >::const_iterator it) const
inlineprivate
725 {
726 int shift = 0;
727 while (it != m_color_print_values.begin()) {
728 --it;
729 if (it->type == Slic3r::CustomGCode::ColorChange)
730 ++shift;
731 }
732 return static_cast<int>(m_extruders_count) + shift;
733 }

References Slic3r::CustomGCode::ColorChange, m_color_print_values, and m_extruders_count.

Referenced by color_change_color_id(), and tool_change_color_id().

Here is the caller graph for this function:

◆ tool_change_color_id()

uint8_t libvgcode::ObjectHelper::tool_change_color_id ( std::vector< Slic3r::CustomGCode::Item >::const_iterator it,
size_t extruder_id ) const
inlineprivate
710 {
711 const int current_extruder = it->extruder == 0 ? static_cast<int>(extruder_id + 1) : it->extruder;
712 if (m_tool_colors_count == m_extruders_count + 1) // there is no one "M600"
713 return std::min<uint8_t>(m_extruders_count - 1, std::max<uint8_t>(current_extruder - 1, 0));
714
715 auto it_n = it;
716 while (it_n != m_color_print_values.begin()) {
717 --it_n;
718 if (it_n->type == Slic3r::CustomGCode::ColorChange && it_n->extruder == current_extruder)
719 return m600_color_id(it_n);
720 }
721
722 return std::min<uint8_t>(m_extruders_count - 1, std::max<uint8_t>(current_extruder - 1, 0));
723 }

References Slic3r::CustomGCode::ColorChange, m600_color_id(), m_color_print_values, m_extruders_count, and m_tool_colors_count.

Referenced by color_print_color_id().

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

Member Data Documentation

◆ m_color_print_colors_count

size_t libvgcode::ObjectHelper::m_color_print_colors_count { 0 }
private
641{ 0 };

Referenced by ObjectHelper(), and color_print_color_id().

◆ m_color_print_values

const std::vector<Slic3r::CustomGCode::Item>& libvgcode::ObjectHelper::m_color_print_values
private

◆ m_extruders_count

size_t libvgcode::ObjectHelper::m_extruders_count { 0 }
private

◆ m_tool_colors_count

size_t libvgcode::ObjectHelper::m_tool_colors_count { 0 }
private
640{ 0 };

Referenced by ObjectHelper(), color_id(), and tool_change_color_id().


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