OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
PrintConfig.cpp File Reference
#include "PrintConfig.hpp"
#include "CommonDefs.hpp"
#include "Point.hpp"
#include "Polygon.hpp"
#include "PrintConfigConstants.hpp"
#include "BeltTransform.hpp"
#include "ClipperUtils.hpp"
#include "Config.hpp"
#include "Geometry.hpp"
#include "FilamentMixer.hpp"
#include "MaterialType.hpp"
#include "I18N.hpp"
#include "LocalesUtils.hpp"
#include "format.hpp"
#include "GCode/Thumbnails.hpp"
#include <algorithm>
#include <cctype>
#include <cmath>
#include <iterator>
#include "enum_bitmask.hpp"
#include <numeric>
#include <cstddef>
#include <cassert>
#include <map>
#include <boost/algorithm/string/classification.hpp>
#include <cstdlib>
#include "libslic3r.h"
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/constants.hpp>
#include <limits>
#include <memory>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/tuple/to_seq.hpp>
#include <cstdint>
#include <set>
#include <optional>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/log/trivial.hpp>
#include <boost/thread.hpp>
#include <float.h>
#include <string>
#include <vector>
#include <utility>
#include <sstream>
#include <unordered_map>
#include <cereal/types/polymorphic.hpp>

Go to the source code of this file.

Namespaces

namespace  anonymous_namespace{PrintConfig.cpp}
namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::anonymous_namespace{PrintConfig.cpp}

Macros

#define L(s)
 macro used to mark string used at localization, return same string
#define _(s)
#define CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NAME)
#define PRINT_CONFIG_CACHE_ELEMENT_DEFINITION(r, data, CLASS_NAME)
#define PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION(r, data, CLASS_NAME)
#define PRINT_CONFIG_CACHE_INITIALIZE(CLASSES_SEQ)
#define PRINT_CONFIG_APPLY_TO_DEFINITION(r, data, CLASS_NAME)
#define new_def(OPT_KEY, TYPE, LABEL, TOOLTIP)

Functions

std::set< std::string > anonymous_namespace{PrintConfig.cpp}::SplitStringAndRemoveDuplicateElement (const std::string &str, const std::string &separator)
void anonymous_namespace{PrintConfig.cpp}::ReplaceString (std::string &resource_str, const std::string &old_str, const std::string &new_str)
bool Slic3r::is_filament_extruder_override_key (const std::string &opt_key)
size_t Slic3r::get_extruder_index (const GCodeConfig &config, unsigned int filament_id)
double Slic3r::nozzle_diameter_for_filament (const PrintConfig &config, int filament_id, bool is_bbl_printer)
std::vector< std::string > Slic3r::get_shaper_type_values_for_flavor (GCodeFlavor flavor)
static t_config_enum_names Slic3r::enum_names_from_keys_map (const t_config_enum_values &enum_keys_map)
 Slic3r::CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS (SLAMaterialSpeed)
std::string Slic3r::get_extruder_variant_string (ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type)
int Slic3r::find_variant_index (const std::string &variant, int variant_id_1based, const std::vector< std::string > &variant_list, const std::vector< int > &variant_ids_1based)
std::vector< int > Slic3r::map_variant_indices (const std::vector< std::string > &variants, const std::vector< int > &ids, const std::vector< std::string > &from_variants, const std::vector< int > &from_ids)
int Slic3r::get_config_index_base (NozzleVolumeType volume_type, ExtruderType extruder_type, int variant_id_1based, const std::vector< std::string > &variant_list, const std::vector< int > &variant_ids_1based)
std::set< NozzleVolumeType > Slic3r::get_extruder_supported_nozzle_volume_types (const DynamicPrintConfig &printer_config, int extruder_id)
std::string Slic3r::get_nozzle_volume_type_string (NozzleVolumeType nozzle_volume_type)
std::vector< std::map< int, int > > Slic3r::get_extruder_ams_count (const std::vector< std::string > &strs)
std::vector< std::string > Slic3r::save_extruder_ams_count_to_string (const std::vector< std::map< int, int > > &extruder_ams_count)
NozzleVolumeType Slic3r::convert_to_nvt_type (const std::string &variant_str)
std::vector< std::map< NozzleVolumeType, int > > Slic3r::get_extruder_nozzle_stats (const std::vector< std::string > &strs)
std::vector< std::string > Slic3r::save_extruder_nozzle_stats_to_string (const std::vector< std::map< NozzleVolumeType, int > > &extruder_nozzle_stats)
static void Slic3r::assign_printer_technology_to_unknown (t_optiondef_map &options, PrinterTechnology printer_technology)
double Slic3r::min_object_distance (const ConfigBase &cfg)
void Slic3r::handle_legacy_sla (DynamicPrintConfig &config)
static void Slic3r::extend_extruder_variant (DynamicPrintConfig &config, const unsigned int num_extruders)
void Slic3r::set_variant_override (ConfigOptionVectorBase &target, const ConfigOptionVectorBase &source, const std::vector< int > &variant_index, int stride)
void Slic3r::normalize_filament_values_to_variants (DynamicPrintConfig &config)
void Slic3r::set_filament_dev_options (DynamicPrintConfig &config, const std::vector< const DynamicPrintConfig * > &filament_configs)
void Slic3r::resize_mixed_filament_metadata (DynamicPrintConfig &config, size_t old_slot_count, size_t new_slot_count)
static void Slic3r::ensure_process_variant_columns (DynamicPrintConfig &config, const DynamicPrintConfig &printer_config)
template<typename OptType, typename ValueType>
static void Slic3r::gather_option_values (const char *caller, const std::string &key, OptType *opt, const std::vector< int > &slot_param_indices)
static void Slic3r::anonymous_namespace{PrintConfig.cpp}::normalize_stride2_floats (ConfigOptionFloats &opt, size_t expected_size)
static void Slic3r::anonymous_namespace{PrintConfig.cpp}::log_normalize_legacy_vector_size (const char *fn, const std::string &key, int stride, size_t src_size, size_t dest_size, size_t expected_size, size_t restore_n, int cur_variant_count, int target_variant_count, size_t cur_ids, size_t target_ids, const ConfigOption *opt_src, const ConfigOption *opt_target)
void Slic3r::compute_filament_override_value (const std::string &opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig &new_full_config, t_config_option_keys &diff_keys, DynamicPrintConfig &filament_overrides, std::vector< int > &f_map_indices)
void Slic3r::update_static_print_config_from_dynamic (ConfigBase &config, const DynamicPrintConfig &dest_config, std::vector< int > variant_index, std::set< std::string > &key_set1, int stride)
std::map< std::string, std::string > Slic3r::validate (const FullPrintConfig &cfg, bool under_cli)
 Slic3r::PRINT_CONFIG_CACHE_INITIALIZE ((PrintObjectConfig, PrintRegionConfig, MachineEnvelopeConfig, GCodeConfig, PrintConfig, FullPrintConfig, SLAMaterialConfig, SLAPrintConfig, SLAPrintObjectConfig, SLAPrinterConfig, SLAFullPrintConfig)) static int print_config_static_initialized
 Slic3r::BOOST_PP_SEQ_FOR_EACH (PRINT_CONFIG_APPLY_TO_DEFINITION, _,(PrintObjectConfig)(PrintRegionConfig)(MachineEnvelopeConfig)(GCodeConfig)(SLAMaterialConfig)(SLAPrintConfig)(SLAPrintObjectConfig)(SLAPrinterConfig)) CLIActionsConfigDef
const std::map< t_custom_gcode_key, t_config_option_keys > & Slic3r::custom_gcode_specific_placeholders ()
static Points Slic3r::to_points (const std::vector< Vec2d > &dpts)
Polygon Slic3r::get_shared_poly (const std::vector< Pointfs > &extruder_polys)
Points Slic3r::get_bed_shape (const DynamicPrintConfig &config, bool use_share)
Points Slic3r::get_bed_shape (const PrintConfig &cfg, bool use_share)
Points Slic3r::get_bed_shape (const SLAPrinterConfig &cfg)
static bool Slic3r::anonymous_namespace{PrintConfig.cpp}::looks_like_bed_exclusion_volume_syntax (const std::string &value)
static bool Slic3r::anonymous_namespace{PrintConfig.cpp}::parse_double_token (const std::string &text, double &out)
static bool Slic3r::anonymous_namespace{PrintConfig.cpp}::parse_z_range_token (const std::string &token_in, const double printable_height, double &z_min, double &z_max, bool &has_z)
static std::optional< Polygon > Slic3r::anonymous_namespace{PrintConfig.cpp}::parse_exclude_polygon_points (const std::string &points_str)
static void Slic3r::anonymous_namespace{PrintConfig.cpp}::append_legacy_bed_exclude_regions (std::vector< BedExcludeRegion > &out, const Pointfs &legacy_points, const double printable_height)
static void Slic3r::anonymous_namespace{PrintConfig.cpp}::append_bed_exclusion_volume_regions (std::vector< BedExcludeRegion > &out, const std::string &region_specs_raw, const double printable_height)
static bool Slic3r::anonymous_namespace{PrintConfig.cpp}::has_nonempty_string (const std::string &value)
static bool Slic3r::anonymous_namespace{PrintConfig.cpp}::collision_volumes_configured (const std::string &shared_specs, const BedExcludeVolumeMode mode, const std::vector< std::string > &per_extruder_specs)
static std::vector< BedExcludeRegion > Slic3r::anonymous_namespace{PrintConfig.cpp}::parse_master_bed_excluded_regions (const Pointfs &legacy_points, const std::string &shared_specs, const bool use_collision_volumes, const BedExcludeVolumeMode mode, const double printable_height)
static void Slic3r::anonymous_namespace{PrintConfig.cpp}::project_bed_material_keepouts (std::vector< BedExcludeRegion > &regions, const ConfigBase &cfg)
static std::vector< BedExcludeRegion > Slic3r::anonymous_namespace{PrintConfig.cpp}::resolve_bed_excluded_regions (const std::vector< BedExcludeRegion > &master_regions, const BedExcludeVolumeMode mode, const std::vector< std::string > &per_extruder_specs, const std::vector< Vec2d > &extruder_offsets, const size_t reference_extruder, const size_t extruder_id, const double printable_height)
static size_t Slic3r::anonymous_namespace{PrintConfig.cpp}::bed_exclusion_extruder_count (const size_t nozzle_count, const size_t offset_count, const size_t per_extruder_count)
static std::vector< BedExcludeRegion > Slic3r::anonymous_namespace{PrintConfig.cpp}::flatten_bed_excluded_regions (const BedExcludeVolumeMode mode, std::vector< std::vector< BedExcludeRegion > > regions_by_extruder)
int Slic3r::bed_exclusion_extruder_for_filament (const size_t filament_id, const std::vector< int > &configured_map, const FilamentMapMode map_mode, const bool is_bambu, const bool automatic_map_resolved, const size_t extruder_count)
std::vector< std::vector< BedExcludeRegion > > Slic3r::get_bed_excluded_regions_by_extruder (const DynamicPrintConfig &cfg)
std::vector< std::vector< BedExcludeRegion > > Slic3r::get_bed_excluded_regions_by_extruder (const PrintConfig &cfg)
std::vector< BedExcludeRegion > Slic3r::get_bed_excluded_regions (const DynamicPrintConfig &cfg, const size_t extruder_id)
std::vector< BedExcludeRegion > Slic3r::get_bed_excluded_regions (const PrintConfig &cfg, const size_t extruder_id)
std::vector< BedExcludeRegion > Slic3r::get_bed_excluded_regions (const DynamicPrintConfig &cfg)
std::vector< BedExcludeRegion > Slic3r::get_bed_excluded_regions (const PrintConfig &cfg)
bool Slic3r::is_bed_exclusion_volume_syntax (const std::string &value)
bool Slic3r::is_valid_bed_exclude_volumes_string (const std::string &value, const double printable_height)
void Slic3r::append_bed_exclude_volumes (DynamicPrintConfig &config, const std::string &definition)
bool Slic3r::has_bed_exclude_volumes (const DynamicPrintConfig &cfg)
bool Slic3r::has_bed_exclude_volumes (const PrintConfig &cfg)
BedExcludeVolumeMode Slic3r::active_bed_exclude_volume_mode (const DynamicPrintConfig &cfg)
BedExcludeVolumeMode Slic3r::active_bed_exclude_volume_mode (const PrintConfig &cfg)
Polygons Slic3r::get_bed_excluded_area (const PrintConfig &cfg)
Polygon Slic3r::get_bed_shape_with_excluded_area (const PrintConfig &cfg, bool use_share)
bool Slic3r::has_skirt (const DynamicPrintConfig &cfg)
float Slic3r::get_real_skirt_dist (const DynamicPrintConfig &cfg)
static bool Slic3r::is_XL_printer (const std::string &printer_notes)
bool Slic3r::is_XL_printer (const DynamicPrintConfig &cfg)
bool Slic3r::is_XL_printer (const PrintConfig &cfg)

Variables

const std::vector< std::string > Slic3r::filament_extruder_override_keys
static t_config_enum_values Slic3r::s_keys_map_PrinterTechnology
static t_config_enum_values Slic3r::s_keys_map_PrintHostType
static t_config_enum_values Slic3r::s_keys_map_AuthorizationType
static t_config_enum_values Slic3r::s_keys_map_GCodeFlavor
static t_config_enum_values Slic3r::s_keys_map_BedTempFormula
static t_config_enum_values Slic3r::s_keys_map_PowerLossRecoveryMode
static t_config_enum_values Slic3r::s_keys_map_ArcFittingMode
static t_config_enum_values Slic3r::s_keys_map_CenterOfSurfacePattern
static t_config_enum_values Slic3r::s_keys_map_FuzzySkinType
static t_config_enum_values Slic3r::s_keys_map_NoiseType
static t_config_enum_values Slic3r::s_keys_map_WipeTowerType
static t_config_enum_values Slic3r::s_keys_map_FuzzySkinMode
static t_config_enum_values Slic3r::s_keys_map_TopSurfaceExpansionDirection
static t_config_enum_values Slic3r::s_keys_map_InfillPattern
static t_config_enum_values Slic3r::s_keys_map_IroningType
static t_config_enum_values Slic3r::s_keys_map_WallInfillOrder
static t_config_enum_values Slic3r::s_keys_map_WallSequence
static t_config_enum_values Slic3r::s_keys_map_WallDirection
static t_config_enum_values Slic3r::s_keys_map_SurfaceFillOrder
static t_config_enum_values Slic3r::s_keys_map_AdaptiveInfillMode
static t_config_enum_values Slic3r::s_keys_map_AdaptiveInfillGradient
static t_config_enum_values Slic3r::s_keys_map_PrintSequence
static t_config_enum_values Slic3r::s_keys_map_PrintOrder
static t_config_enum_values Slic3r::s_keys_map_SlicingMode
static t_config_enum_values Slic3r::s_keys_map_BeltRotationAxis
static t_config_enum_values Slic3r::s_keys_map_RemapAxis
static t_config_enum_values Slic3r::s_keys_map_SupportMaterialPattern
static t_config_enum_values Slic3r::s_keys_map_SupportMaterialStyle
static t_config_enum_values Slic3r::s_keys_map_SupportMaterialInterfacePattern
static t_config_enum_values Slic3r::s_keys_map_SupportType
static t_config_enum_values Slic3r::s_keys_map_SeamPosition
static t_config_enum_values Slic3r::s_keys_map_SeamScarfType
static t_config_enum_values Slic3r::s_keys_map_EnsureVerticalShellThickness
static t_config_enum_values Slic3r::s_keys_map_InternalBridgeFilter
static t_config_enum_values Slic3r::s_keys_map_EnableExtraBridgeLayer
static t_config_enum_values Slic3r::s_keys_map_GapFillTarget
static const t_config_enum_values Slic3r::s_keys_map_SLADisplayOrientation
static const t_config_enum_values Slic3r::s_keys_map_SLAPillarConnectionMode
static const t_config_enum_values Slic3r::s_keys_map_SLAMaterialSpeed
static const t_config_enum_values Slic3r::s_keys_map_BrimType
static const t_config_enum_values Slic3r::s_keys_map_TimelapseType
static const t_config_enum_values Slic3r::s_keys_map_SkirtType
static const t_config_enum_values Slic3r::s_keys_map_DraftShield
static const t_config_enum_values Slic3r::s_keys_map_ForwardCompatibilitySubstitutionRule
static const t_config_enum_values Slic3r::s_keys_map_OverhangFanThreshold
static const t_config_enum_values Slic3r::s_keys_map_BedType
static const t_config_enum_values Slic3r::s_keys_map_LayerSeq
static t_config_enum_values Slic3r::s_keys_map_NozzleType
static t_config_enum_values Slic3r::s_keys_map_FanDirection
static t_config_enum_values Slic3r::s_keys_map_PrinterStructure
static t_config_enum_values Slic3r::s_keys_map_InputShaperType
static t_config_enum_values Slic3r::s_keys_map_PerimeterGeneratorType
static t_config_enum_values Slic3r::s_keys_map_ToolChangeOrderingType
static const t_config_enum_values Slic3r::s_keys_map_ZHopType
static const t_config_enum_values Slic3r::s_keys_map_RetractLiftEnforceType
static const t_config_enum_values Slic3r::s_keys_map_GCodeThumbnailsFormat
static const t_config_enum_values Slic3r::s_keys_map_CounterboreHoleBridgingOption
static const t_config_enum_values Slic3r::s_keys_map_WipeTowerWallType
static const t_config_enum_values Slic3r::s_keys_map_ExtruderType
static const t_config_enum_values Slic3r::s_keys_map_NozzleVolumeType
static const t_config_enum_values Slic3r::s_keys_map_FilamentMapMode
static const t_config_enum_values Slic3r::s_keys_map_BedExcludeVolumeMode
static const t_config_enum_values Slic3r::s_keys_map_ImexToolLayout
static const t_config_enum_values Slic3r::s_keys_map_ImexVizTheme
static const t_config_enum_values Slic3r::s_keys_map_PrimeVolumeMode
const PrintConfigDef Slic3r::print_config_def
std::set< std::string > Slic3r::print_options_with_variant
std::set< std::string > Slic3r::filament_options_with_variant
std::set< std::string > Slic3r::printer_extruder_options
std::set< std::string > Slic3r::printer_options_with_variant_1
std::set< std::string > Slic3r::printer_options_with_variant_2
std::set< std::string > Slic3r::empty_options
std::set< std::string > Slic3r::filament_dev_options
const CLIActionsConfigDef Slic3r::cli_actions_config_def
const CLITransformConfigDef Slic3r::cli_transform_config_def
const CLIMiscConfigDef Slic3r::cli_misc_config_def
static std::map< t_custom_gcode_key, t_config_option_keys > Slic3r::s_CustomGcodeSpecificPlaceholders
const CustomGcodeSpecificConfigDef Slic3r::custom_gcode_specific_config_def

Macro Definition Documentation

◆ _

#define _ ( s)
Value:
std::string translate(const std::string &s)
Definition I18N.hpp:18

◆ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS

#define CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( NAME)
Value:
static t_config_enum_names s_keys_names_##NAME = enum_names_from_keys_map(s_keys_map_##NAME); template<> const t_config_enum_values& ConfigOptionEnum<NAME>::get_enum_values() { return s_keys_map_##NAME; } template<> const t_config_enum_names& ConfigOptionEnum<NAME>::get_enum_names() { return s_keys_names_##NAME; }

◆ L

#define L ( s)
Value:
(s)

macro used to mark string used at localization, return same string

◆ new_def

#define new_def ( OPT_KEY,
TYPE,
LABEL,
TOOLTIP )

◆ PRINT_CONFIG_APPLY_TO_DEFINITION

#define PRINT_CONFIG_APPLY_TO_DEFINITION ( r,
data,
CLASS_NAME )
Value:
bool CLASS_NAME::apply_to(ConfigBase &target) const \
{ \
auto *dst = dynamic_cast<CLASS_NAME*>(&target); \
if (dst == nullptr) \
return false; \
visit_option_pairs(*dst, *this, [](const char*, ConfigOption &a, const ConfigOption &b) { a.set(&b); return true; }); \
return true; \
}
12726#define PRINT_CONFIG_APPLY_TO_DEFINITION(r, data, CLASS_NAME) \
12727 bool CLASS_NAME::apply_to(ConfigBase &target) const \
12728 { \
12729 auto *dst = dynamic_cast<CLASS_NAME*>(&target); \
12730 if (dst == nullptr) \
12731 return false; \
12732 visit_option_pairs(*dst, *this, [](const char*, ConfigOption &a, const ConfigOption &b) { a.set(&b); return true; }); \
12733 return true; \
12734 }

Referenced by Slic3r::BOOST_PP_SEQ_FOR_EACH().

◆ PRINT_CONFIG_CACHE_ELEMENT_DEFINITION

#define PRINT_CONFIG_CACHE_ELEMENT_DEFINITION ( r,
data,
CLASS_NAME )
Value:
StaticPrintConfig::StaticCache<class Slic3r::CLASS_NAME> BOOST_PP_CAT(CLASS_NAME::s_cache_, CLASS_NAME);

◆ PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION

#define PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION ( r,
data,
CLASS_NAME )
Value:
Slic3r::CLASS_NAME::initialize_cache();

◆ PRINT_CONFIG_CACHE_INITIALIZE

#define PRINT_CONFIG_CACHE_INITIALIZE ( CLASSES_SEQ)
Value:
BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CACHE_ELEMENT_DEFINITION, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_SEQ)) int print_config_static_initializer() { /* For some reason it's important this function doesn't get optimized out, so this should work. */ static volatile int ret = 1; BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_SEQ)) return ret; }
#define _(s)
Definition 3mf.cpp:306
#define PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION(r, data, CLASS_NAME)
Definition PrintConfig.cpp:12717
#define PRINT_CONFIG_CACHE_ELEMENT_DEFINITION(r, data, CLASS_NAME)
Definition PrintConfig.cpp:12716