Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/libslic3r/PrintConfig.hpp')
-rw-r--r--src/libslic3r/PrintConfig.hpp973
1 files changed, 973 insertions, 0 deletions
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
new file mode 100644
index 000000000..bc3b0ef49
--- /dev/null
+++ b/src/libslic3r/PrintConfig.hpp
@@ -0,0 +1,973 @@
+// Configuration store of Slic3r.
+//
+// The configuration store is either static or dynamic.
+// DynamicPrintConfig is used mainly at the user interface. while the StaticPrintConfig is used
+// during the slicing and the g-code generation.
+//
+// The classes derived from StaticPrintConfig form a following hierarchy.
+//
+// FullPrintConfig
+// PrintObjectConfig
+// PrintRegionConfig
+// PrintConfig
+// GCodeConfig
+// HostConfig
+//
+
+#ifndef slic3r_PrintConfig_hpp_
+#define slic3r_PrintConfig_hpp_
+
+#include "libslic3r.h"
+#include "Config.hpp"
+
+namespace Slic3r {
+
+enum PrinterTechnology
+{
+ // Fused Filament Fabrication
+ ptFFF,
+ // Stereolitography
+ ptSLA,
+};
+
+enum GCodeFlavor {
+ gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit,
+ gcfSmoothie, gcfNoExtrusion,
+};
+
+enum PrintHostType {
+ htOctoPrint, htDuet,
+};
+
+enum InfillPattern {
+ ipRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
+ ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral,
+};
+
+enum SupportMaterialPattern {
+ smpRectilinear, smpRectilinearGrid, smpHoneycomb,
+};
+
+enum SeamPosition {
+ spRandom, spNearest, spAligned, spRear
+};
+
+enum FilamentType {
+ ftPLA, ftABS, ftPET, ftHIPS, ftFLEX, ftSCAFF, ftEDGE, ftNGEN, ftPVA
+};
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<PrinterTechnology>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["FFF"] = ptFFF;
+ keys_map["SLA"] = ptSLA;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<GCodeFlavor>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["reprap"] = gcfRepRap;
+ keys_map["repetier"] = gcfRepetier;
+ keys_map["teacup"] = gcfTeacup;
+ keys_map["makerware"] = gcfMakerWare;
+ keys_map["marlin"] = gcfMarlin;
+ keys_map["sailfish"] = gcfSailfish;
+ keys_map["smoothie"] = gcfSmoothie;
+ keys_map["mach3"] = gcfMach3;
+ keys_map["machinekit"] = gcfMachinekit;
+ keys_map["no-extrusion"] = gcfNoExtrusion;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<PrintHostType>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["octoprint"] = htOctoPrint;
+ keys_map["duet"] = htDuet;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["rectilinear"] = ipRectilinear;
+ keys_map["grid"] = ipGrid;
+ keys_map["triangles"] = ipTriangles;
+ keys_map["stars"] = ipStars;
+ keys_map["cubic"] = ipCubic;
+ keys_map["line"] = ipLine;
+ keys_map["concentric"] = ipConcentric;
+ keys_map["honeycomb"] = ipHoneycomb;
+ keys_map["3dhoneycomb"] = ip3DHoneycomb;
+ keys_map["gyroid"] = ipGyroid;
+ keys_map["hilbertcurve"] = ipHilbertCurve;
+ keys_map["archimedeanchords"] = ipArchimedeanChords;
+ keys_map["octagramspiral"] = ipOctagramSpiral;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<SupportMaterialPattern>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["rectilinear"] = smpRectilinear;
+ keys_map["rectilinear-grid"] = smpRectilinearGrid;
+ keys_map["honeycomb"] = smpHoneycomb;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<SeamPosition>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["random"] = spRandom;
+ keys_map["nearest"] = spNearest;
+ keys_map["aligned"] = spAligned;
+ keys_map["rear"] = spRear;
+ }
+ return keys_map;
+}
+
+template<> inline const t_config_enum_values& ConfigOptionEnum<FilamentType>::get_enum_values() {
+ static t_config_enum_values keys_map;
+ if (keys_map.empty()) {
+ keys_map["PLA"] = ftPLA;
+ keys_map["ABS"] = ftABS;
+ keys_map["PET"] = ftPET;
+ keys_map["HIPS"] = ftHIPS;
+ keys_map["FLEX"] = ftFLEX;
+ keys_map["SCAFF"] = ftSCAFF;
+ keys_map["EDGE"] = ftEDGE;
+ keys_map["NGEN"] = ftNGEN;
+ keys_map["PVA"] = ftPVA;
+ }
+ return keys_map;
+}
+
+// Defines each and every confiuration option of Slic3r, including the properties of the GUI dialogs.
+// Does not store the actual values, but defines default values.
+class PrintConfigDef : public ConfigDef
+{
+public:
+ PrintConfigDef();
+
+ static void handle_legacy(t_config_option_key &opt_key, std::string &value);
+
+private:
+ void init_common_params();
+ void init_fff_params();
+ void init_sla_params();
+};
+
+// The one and only global definition of SLic3r configuration options.
+// This definition is constant.
+extern PrintConfigDef print_config_def;
+
+// Slic3r dynamic configuration, used to override the configuration
+// per object, per modification volume or per printing material.
+// The dynamic configuration is also used to store user modifications of the print global parameters,
+// so the modified configuration values may be diffed against the active configuration
+// to invalidate the proper slicing resp. g-code generation processing steps.
+// This object is mapped to Perl as Slic3r::Config.
+class DynamicPrintConfig : public DynamicConfig
+{
+public:
+ DynamicPrintConfig() {}
+ DynamicPrintConfig(const DynamicPrintConfig &other) : DynamicConfig(other) {}
+
+ static DynamicPrintConfig* new_from_defaults();
+ static DynamicPrintConfig* new_from_defaults_keys(const std::vector<std::string> &keys);
+
+ // Overrides ConfigBase::def(). Static configuration definition. Any value stored into this ConfigBase shall have its definition here.
+ const ConfigDef* def() const override { return &print_config_def; }
+
+ void normalize();
+
+ // Validate the PrintConfig. Returns an empty string on success, otherwise an error message is returned.
+ std::string validate();
+
+ // Verify whether the opt_key has not been obsoleted or renamed.
+ // Both opt_key and value may be modified by handle_legacy().
+ // If the opt_key is no more valid in this version of Slic3r, opt_key is cleared by handle_legacy().
+ // handle_legacy() is called internally by set_deserialize().
+ void handle_legacy(t_config_option_key &opt_key, std::string &value) const override
+ { PrintConfigDef::handle_legacy(opt_key, value); }
+};
+
+template<typename CONFIG>
+void normalize_and_apply_config(CONFIG &dst, const DynamicPrintConfig &src)
+{
+ DynamicPrintConfig src_normalized(src);
+ src_normalized.normalize();
+ dst.apply(src_normalized, true);
+}
+
+class StaticPrintConfig : public StaticConfig
+{
+public:
+ StaticPrintConfig() {}
+
+ // Overrides ConfigBase::def(). Static configuration definition. Any value stored into this ConfigBase shall have its definition here.
+ const ConfigDef* def() const override { return &print_config_def; }
+
+protected:
+ // Verify whether the opt_key has not been obsoleted or renamed.
+ // Both opt_key and value may be modified by handle_legacy().
+ // If the opt_key is no more valid in this version of Slic3r, opt_key is cleared by handle_legacy().
+ // handle_legacy() is called internally by set_deserialize().
+ void handle_legacy(t_config_option_key &opt_key, std::string &value) const override
+ { PrintConfigDef::handle_legacy(opt_key, value); }
+
+ // Internal class for keeping a dynamic map to static options.
+ class StaticCacheBase
+ {
+ public:
+ // To be called during the StaticCache setup.
+ // Add one ConfigOption into m_map_name_to_offset.
+ template<typename T>
+ void opt_add(const std::string &name, const char *base_ptr, const T &opt)
+ {
+ assert(m_map_name_to_offset.find(name) == m_map_name_to_offset.end());
+ m_map_name_to_offset[name] = (const char*)&opt - base_ptr;
+ }
+
+ protected:
+ std::map<std::string, ptrdiff_t> m_map_name_to_offset;
+ };
+
+ // Parametrized by the type of the topmost class owning the options.
+ template<typename T>
+ class StaticCache : public StaticCacheBase
+ {
+ public:
+ // Calling the constructor of m_defaults with 0 forces m_defaults to not run the initialization.
+ StaticCache() : m_defaults(nullptr) {}
+ ~StaticCache() { delete m_defaults; m_defaults = nullptr; }
+
+ bool initialized() const { return ! m_keys.empty(); }
+
+ ConfigOption* optptr(const std::string &name, T *owner) const
+ {
+ const auto it = m_map_name_to_offset.find(name);
+ return (it == m_map_name_to_offset.end()) ? nullptr : reinterpret_cast<ConfigOption*>((char*)owner + it->second);
+ }
+
+ const ConfigOption* optptr(const std::string &name, const T *owner) const
+ {
+ const auto it = m_map_name_to_offset.find(name);
+ return (it == m_map_name_to_offset.end()) ? nullptr : reinterpret_cast<const ConfigOption*>((const char*)owner + it->second);
+ }
+
+ const std::vector<std::string>& keys() const { return m_keys; }
+ const T& defaults() const { return *m_defaults; }
+
+ // To be called during the StaticCache setup.
+ // Collect option keys from m_map_name_to_offset,
+ // assign default values to m_defaults.
+ void finalize(T *defaults, const ConfigDef *defs)
+ {
+ assert(defs != nullptr);
+ m_defaults = defaults;
+ m_keys.clear();
+ m_keys.reserve(m_map_name_to_offset.size());
+ for (const auto &kvp : defs->options) {
+ // Find the option given the option name kvp.first by an offset from (char*)m_defaults.
+ ConfigOption *opt = this->optptr(kvp.first, m_defaults);
+ if (opt == nullptr)
+ // This option is not defined by the ConfigBase of type T.
+ continue;
+ m_keys.emplace_back(kvp.first);
+ const ConfigOptionDef *def = defs->get(kvp.first);
+ assert(def != nullptr);
+ if (def->default_value != nullptr)
+ opt->set(def->default_value);
+ }
+ }
+
+ private:
+ T *m_defaults;
+ std::vector<std::string> m_keys;
+ };
+};
+
+#define STATIC_PRINT_CONFIG_CACHE_BASE(CLASS_NAME) \
+public: \
+ /* Overrides ConfigBase::optptr(). Find ando/or create a ConfigOption instance for a given name. */ \
+ ConfigOption* optptr(const t_config_option_key &opt_key, bool create = false) override \
+ { return s_cache_##CLASS_NAME.optptr(opt_key, this); } \
+ /* Overrides ConfigBase::keys(). Collect names of all configuration values maintained by this configuration store. */ \
+ t_config_option_keys keys() const override { return s_cache_##CLASS_NAME.keys(); } \
+ static const CLASS_NAME& defaults() { initialize_cache(); return s_cache_##CLASS_NAME.defaults(); } \
+private: \
+ static void initialize_cache() \
+ { \
+ if (! s_cache_##CLASS_NAME.initialized()) { \
+ CLASS_NAME *inst = new CLASS_NAME(1); \
+ inst->initialize(s_cache_##CLASS_NAME, (const char*)inst); \
+ s_cache_##CLASS_NAME.finalize(inst, inst->def()); \
+ } \
+ } \
+ /* Cache object holding a key/option map, a list of option keys and a copy of this static config initialized with the defaults. */ \
+ static StaticPrintConfig::StaticCache<CLASS_NAME> s_cache_##CLASS_NAME;
+
+#define STATIC_PRINT_CONFIG_CACHE(CLASS_NAME) \
+ STATIC_PRINT_CONFIG_CACHE_BASE(CLASS_NAME) \
+public: \
+ /* Public default constructor will initialize the key/option cache and the default object copy if needed. */ \
+ CLASS_NAME() { initialize_cache(); *this = s_cache_##CLASS_NAME.defaults(); } \
+protected: \
+ /* Protected constructor to be called when compounded. */ \
+ CLASS_NAME(int) {}
+
+#define STATIC_PRINT_CONFIG_CACHE_DERIVED(CLASS_NAME) \
+ STATIC_PRINT_CONFIG_CACHE_BASE(CLASS_NAME) \
+public: \
+ /* Overrides ConfigBase::def(). Static configuration definition. Any value stored into this ConfigBase shall have its definition here. */ \
+ const ConfigDef* def() const override { return &print_config_def; } \
+ /* Handle legacy and obsoleted config keys */ \
+ void handle_legacy(t_config_option_key &opt_key, std::string &value) const override \
+ { PrintConfigDef::handle_legacy(opt_key, value); }
+
+#define OPT_PTR(KEY) cache.opt_add(#KEY, base_ptr, this->KEY)
+
+// This object is mapped to Perl as Slic3r::Config::PrintObject.
+class PrintObjectConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(PrintObjectConfig)
+public:
+ ConfigOptionBool clip_multipart_objects;
+ ConfigOptionBool dont_support_bridges;
+ ConfigOptionFloat elefant_foot_compensation;
+ ConfigOptionFloatOrPercent extrusion_width;
+ ConfigOptionFloatOrPercent first_layer_height;
+ ConfigOptionBool infill_only_where_needed;
+ // Force the generation of solid shells between adjacent materials/volumes.
+ ConfigOptionBool interface_shells;
+ ConfigOptionFloat layer_height;
+ ConfigOptionInt raft_layers;
+ ConfigOptionEnum<SeamPosition> seam_position;
+// ConfigOptionFloat seam_preferred_direction;
+// ConfigOptionFloat seam_preferred_direction_jitter;
+ ConfigOptionBool support_material;
+ // Automatic supports (generated based on support_material_threshold).
+ ConfigOptionBool support_material_auto;
+ // Direction of the support pattern (in XY plane).
+ ConfigOptionFloat support_material_angle;
+ ConfigOptionBool support_material_buildplate_only;
+ ConfigOptionFloat support_material_contact_distance;
+ ConfigOptionInt support_material_enforce_layers;
+ ConfigOptionInt support_material_extruder;
+ ConfigOptionFloatOrPercent support_material_extrusion_width;
+ ConfigOptionBool support_material_interface_contact_loops;
+ ConfigOptionInt support_material_interface_extruder;
+ ConfigOptionInt support_material_interface_layers;
+ // Spacing between interface lines (the hatching distance). Set zero to get a solid interface.
+ ConfigOptionFloat support_material_interface_spacing;
+ ConfigOptionFloatOrPercent support_material_interface_speed;
+ ConfigOptionEnum<SupportMaterialPattern> support_material_pattern;
+ // Spacing between support material lines (the hatching distance).
+ ConfigOptionFloat support_material_spacing;
+ ConfigOptionFloat support_material_speed;
+ ConfigOptionBool support_material_synchronize_layers;
+ // Overhang angle threshold.
+ ConfigOptionInt support_material_threshold;
+ ConfigOptionBool support_material_with_sheath;
+ ConfigOptionFloatOrPercent support_material_xy_spacing;
+ ConfigOptionFloat xy_size_compensation;
+ ConfigOptionBool wipe_into_objects;
+
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(clip_multipart_objects);
+ OPT_PTR(dont_support_bridges);
+ OPT_PTR(elefant_foot_compensation);
+ OPT_PTR(extrusion_width);
+ OPT_PTR(first_layer_height);
+ OPT_PTR(infill_only_where_needed);
+ OPT_PTR(interface_shells);
+ OPT_PTR(layer_height);
+ OPT_PTR(raft_layers);
+ OPT_PTR(seam_position);
+// OPT_PTR(seam_preferred_direction);
+// OPT_PTR(seam_preferred_direction_jitter);
+ OPT_PTR(support_material);
+ OPT_PTR(support_material_auto);
+ OPT_PTR(support_material_angle);
+ OPT_PTR(support_material_buildplate_only);
+ OPT_PTR(support_material_contact_distance);
+ OPT_PTR(support_material_enforce_layers);
+ OPT_PTR(support_material_interface_contact_loops);
+ OPT_PTR(support_material_extruder);
+ OPT_PTR(support_material_extrusion_width);
+ OPT_PTR(support_material_interface_extruder);
+ OPT_PTR(support_material_interface_layers);
+ OPT_PTR(support_material_interface_spacing);
+ OPT_PTR(support_material_interface_speed);
+ OPT_PTR(support_material_pattern);
+ OPT_PTR(support_material_spacing);
+ OPT_PTR(support_material_speed);
+ OPT_PTR(support_material_synchronize_layers);
+ OPT_PTR(support_material_xy_spacing);
+ OPT_PTR(support_material_threshold);
+ OPT_PTR(support_material_with_sheath);
+ OPT_PTR(xy_size_compensation);
+ OPT_PTR(wipe_into_objects);
+ }
+};
+
+// This object is mapped to Perl as Slic3r::Config::PrintRegion.
+class PrintRegionConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(PrintRegionConfig)
+public:
+ ConfigOptionFloat bridge_angle;
+ ConfigOptionInt bottom_solid_layers;
+ ConfigOptionFloat bridge_flow_ratio;
+ ConfigOptionFloat bridge_speed;
+ ConfigOptionBool ensure_vertical_shell_thickness;
+ ConfigOptionEnum<InfillPattern> external_fill_pattern;
+ ConfigOptionFloatOrPercent external_perimeter_extrusion_width;
+ ConfigOptionFloatOrPercent external_perimeter_speed;
+ ConfigOptionBool external_perimeters_first;
+ ConfigOptionBool extra_perimeters;
+ ConfigOptionFloat fill_angle;
+ ConfigOptionPercent fill_density;
+ ConfigOptionEnum<InfillPattern> fill_pattern;
+ ConfigOptionFloat gap_fill_speed;
+ ConfigOptionInt infill_extruder;
+ ConfigOptionFloatOrPercent infill_extrusion_width;
+ ConfigOptionInt infill_every_layers;
+ ConfigOptionFloatOrPercent infill_overlap;
+ ConfigOptionFloat infill_speed;
+ // Detect bridging perimeters
+ ConfigOptionBool overhangs;
+ ConfigOptionInt perimeter_extruder;
+ ConfigOptionFloatOrPercent perimeter_extrusion_width;
+ ConfigOptionFloat perimeter_speed;
+ // Total number of perimeters.
+ ConfigOptionInt perimeters;
+ ConfigOptionFloatOrPercent small_perimeter_speed;
+ ConfigOptionFloat solid_infill_below_area;
+ ConfigOptionInt solid_infill_extruder;
+ ConfigOptionFloatOrPercent solid_infill_extrusion_width;
+ ConfigOptionInt solid_infill_every_layers;
+ ConfigOptionFloatOrPercent solid_infill_speed;
+ // Detect thin walls.
+ ConfigOptionBool thin_walls;
+ ConfigOptionFloatOrPercent top_infill_extrusion_width;
+ ConfigOptionInt top_solid_layers;
+ ConfigOptionFloatOrPercent top_solid_infill_speed;
+ ConfigOptionBool wipe_into_infill;
+
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(bridge_angle);
+ OPT_PTR(bottom_solid_layers);
+ OPT_PTR(bridge_flow_ratio);
+ OPT_PTR(bridge_speed);
+ OPT_PTR(ensure_vertical_shell_thickness);
+ OPT_PTR(external_fill_pattern);
+ OPT_PTR(external_perimeter_extrusion_width);
+ OPT_PTR(external_perimeter_speed);
+ OPT_PTR(external_perimeters_first);
+ OPT_PTR(extra_perimeters);
+ OPT_PTR(fill_angle);
+ OPT_PTR(fill_density);
+ OPT_PTR(fill_pattern);
+ OPT_PTR(gap_fill_speed);
+ OPT_PTR(infill_extruder);
+ OPT_PTR(infill_extrusion_width);
+ OPT_PTR(infill_every_layers);
+ OPT_PTR(infill_overlap);
+ OPT_PTR(infill_speed);
+ OPT_PTR(overhangs);
+ OPT_PTR(perimeter_extruder);
+ OPT_PTR(perimeter_extrusion_width);
+ OPT_PTR(perimeter_speed);
+ OPT_PTR(perimeters);
+ OPT_PTR(small_perimeter_speed);
+ OPT_PTR(solid_infill_below_area);
+ OPT_PTR(solid_infill_extruder);
+ OPT_PTR(solid_infill_extrusion_width);
+ OPT_PTR(solid_infill_every_layers);
+ OPT_PTR(solid_infill_speed);
+ OPT_PTR(thin_walls);
+ OPT_PTR(top_infill_extrusion_width);
+ OPT_PTR(top_solid_infill_speed);
+ OPT_PTR(top_solid_layers);
+ OPT_PTR(wipe_into_infill);
+ }
+};
+
+class MachineEnvelopeConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(MachineEnvelopeConfig)
+public:
+ // M201 X... Y... Z... E... [mm/sec^2]
+ ConfigOptionFloats machine_max_acceleration_x;
+ ConfigOptionFloats machine_max_acceleration_y;
+ ConfigOptionFloats machine_max_acceleration_z;
+ ConfigOptionFloats machine_max_acceleration_e;
+ // M203 X... Y... Z... E... [mm/sec]
+ ConfigOptionFloats machine_max_feedrate_x;
+ ConfigOptionFloats machine_max_feedrate_y;
+ ConfigOptionFloats machine_max_feedrate_z;
+ ConfigOptionFloats machine_max_feedrate_e;
+ // M204 S... [mm/sec^2]
+ ConfigOptionFloats machine_max_acceleration_extruding;
+ // M204 T... [mm/sec^2]
+ ConfigOptionFloats machine_max_acceleration_retracting;
+ // M205 X... Y... Z... E... [mm/sec]
+ ConfigOptionFloats machine_max_jerk_x;
+ ConfigOptionFloats machine_max_jerk_y;
+ ConfigOptionFloats machine_max_jerk_z;
+ ConfigOptionFloats machine_max_jerk_e;
+ // M205 T... [mm/sec]
+ ConfigOptionFloats machine_min_travel_rate;
+ // M205 S... [mm/sec]
+ ConfigOptionFloats machine_min_extruding_rate;
+
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(machine_max_acceleration_x);
+ OPT_PTR(machine_max_acceleration_y);
+ OPT_PTR(machine_max_acceleration_z);
+ OPT_PTR(machine_max_acceleration_e);
+ OPT_PTR(machine_max_feedrate_x);
+ OPT_PTR(machine_max_feedrate_y);
+ OPT_PTR(machine_max_feedrate_z);
+ OPT_PTR(machine_max_feedrate_e);
+ OPT_PTR(machine_max_acceleration_extruding);
+ OPT_PTR(machine_max_acceleration_retracting);
+ OPT_PTR(machine_max_jerk_x);
+ OPT_PTR(machine_max_jerk_y);
+ OPT_PTR(machine_max_jerk_z);
+ OPT_PTR(machine_max_jerk_e);
+ OPT_PTR(machine_min_travel_rate);
+ OPT_PTR(machine_min_extruding_rate);
+ }
+};
+
+// This object is mapped to Perl as Slic3r::Config::GCode.
+class GCodeConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(GCodeConfig)
+public:
+ ConfigOptionString before_layer_gcode;
+ ConfigOptionString between_objects_gcode;
+ ConfigOptionFloats deretract_speed;
+ ConfigOptionString end_gcode;
+ ConfigOptionStrings end_filament_gcode;
+ ConfigOptionString extrusion_axis;
+ ConfigOptionFloats extrusion_multiplier;
+ ConfigOptionFloats filament_diameter;
+ ConfigOptionFloats filament_density;
+ ConfigOptionStrings filament_type;
+ ConfigOptionBools filament_soluble;
+ ConfigOptionFloats filament_cost;
+ ConfigOptionFloats filament_max_volumetric_speed;
+ ConfigOptionFloats filament_loading_speed;
+ ConfigOptionFloats filament_loading_speed_start;
+ ConfigOptionFloats filament_load_time;
+ ConfigOptionFloats filament_unloading_speed;
+ ConfigOptionFloats filament_unloading_speed_start;
+ ConfigOptionFloats filament_toolchange_delay;
+ ConfigOptionFloats filament_unload_time;
+ ConfigOptionInts filament_cooling_moves;
+ ConfigOptionFloats filament_cooling_initial_speed;
+ ConfigOptionFloats filament_minimal_purge_on_wipe_tower;
+ ConfigOptionFloats filament_cooling_final_speed;
+ ConfigOptionStrings filament_ramming_parameters;
+ ConfigOptionBool gcode_comments;
+ ConfigOptionEnum<GCodeFlavor> gcode_flavor;
+ ConfigOptionString layer_gcode;
+ ConfigOptionFloat max_print_speed;
+ ConfigOptionFloat max_volumetric_speed;
+ ConfigOptionFloat max_volumetric_extrusion_rate_slope_positive;
+ ConfigOptionFloat max_volumetric_extrusion_rate_slope_negative;
+ ConfigOptionPercents retract_before_wipe;
+ ConfigOptionFloats retract_length;
+ ConfigOptionFloats retract_length_toolchange;
+ ConfigOptionFloats retract_lift;
+ ConfigOptionFloats retract_lift_above;
+ ConfigOptionFloats retract_lift_below;
+ ConfigOptionFloats retract_restart_extra;
+ ConfigOptionFloats retract_restart_extra_toolchange;
+ ConfigOptionFloats retract_speed;
+ ConfigOptionString start_gcode;
+ ConfigOptionStrings start_filament_gcode;
+ ConfigOptionBool single_extruder_multi_material;
+ ConfigOptionBool single_extruder_multi_material_priming;
+ ConfigOptionString toolchange_gcode;
+ ConfigOptionFloat travel_speed;
+ ConfigOptionBool use_firmware_retraction;
+ ConfigOptionBool use_relative_e_distances;
+ ConfigOptionBool use_volumetric_e;
+ ConfigOptionBool variable_layer_height;
+ ConfigOptionFloat cooling_tube_retraction;
+ ConfigOptionFloat cooling_tube_length;
+ ConfigOptionFloat parking_pos_retraction;
+ ConfigOptionBool remaining_times;
+ ConfigOptionBool silent_mode;
+ ConfigOptionFloat extra_loading_move;
+
+ std::string get_extrusion_axis() const
+ {
+ return
+ ((this->gcode_flavor.value == gcfMach3) || (this->gcode_flavor.value == gcfMachinekit)) ? "A" :
+ (this->gcode_flavor.value == gcfNoExtrusion) ? "" : this->extrusion_axis.value;
+ }
+
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(before_layer_gcode);
+ OPT_PTR(between_objects_gcode);
+ OPT_PTR(deretract_speed);
+ OPT_PTR(end_gcode);
+ OPT_PTR(end_filament_gcode);
+ OPT_PTR(extrusion_axis);
+ OPT_PTR(extrusion_multiplier);
+ OPT_PTR(filament_diameter);
+ OPT_PTR(filament_density);
+ OPT_PTR(filament_type);
+ OPT_PTR(filament_soluble);
+ OPT_PTR(filament_cost);
+ OPT_PTR(filament_max_volumetric_speed);
+ OPT_PTR(filament_loading_speed);
+ OPT_PTR(filament_loading_speed_start);
+ OPT_PTR(filament_load_time);
+ OPT_PTR(filament_unloading_speed);
+ OPT_PTR(filament_unloading_speed_start);
+ OPT_PTR(filament_unload_time);
+ OPT_PTR(filament_toolchange_delay);
+ OPT_PTR(filament_cooling_moves);
+ OPT_PTR(filament_cooling_initial_speed);
+ OPT_PTR(filament_minimal_purge_on_wipe_tower);
+ OPT_PTR(filament_cooling_final_speed);
+ OPT_PTR(filament_ramming_parameters);
+ OPT_PTR(gcode_comments);
+ OPT_PTR(gcode_flavor);
+ OPT_PTR(layer_gcode);
+ OPT_PTR(max_print_speed);
+ OPT_PTR(max_volumetric_speed);
+ OPT_PTR(max_volumetric_extrusion_rate_slope_positive);
+ OPT_PTR(max_volumetric_extrusion_rate_slope_negative);
+ OPT_PTR(retract_before_wipe);
+ OPT_PTR(retract_length);
+ OPT_PTR(retract_length_toolchange);
+ OPT_PTR(retract_lift);
+ OPT_PTR(retract_lift_above);
+ OPT_PTR(retract_lift_below);
+ OPT_PTR(retract_restart_extra);
+ OPT_PTR(retract_restart_extra_toolchange);
+ OPT_PTR(retract_speed);
+ OPT_PTR(single_extruder_multi_material);
+ OPT_PTR(single_extruder_multi_material_priming);
+ OPT_PTR(start_gcode);
+ OPT_PTR(start_filament_gcode);
+ OPT_PTR(toolchange_gcode);
+ OPT_PTR(travel_speed);
+ OPT_PTR(use_firmware_retraction);
+ OPT_PTR(use_relative_e_distances);
+ OPT_PTR(use_volumetric_e);
+ OPT_PTR(variable_layer_height);
+ OPT_PTR(cooling_tube_retraction);
+ OPT_PTR(cooling_tube_length);
+ OPT_PTR(parking_pos_retraction);
+ OPT_PTR(remaining_times);
+ OPT_PTR(silent_mode);
+ OPT_PTR(extra_loading_move);
+ }
+};
+
+// This object is mapped to Perl as Slic3r::Config::Print.
+class PrintConfig : public MachineEnvelopeConfig, public GCodeConfig
+{
+ STATIC_PRINT_CONFIG_CACHE_DERIVED(PrintConfig)
+ PrintConfig() : GCodeConfig(0) { initialize_cache(); *this = s_cache_PrintConfig.defaults(); }
+public:
+ double min_object_distance() const;
+ static double min_object_distance(const ConfigBase *config);
+
+ ConfigOptionBool avoid_crossing_perimeters;
+ ConfigOptionPoints bed_shape;
+ ConfigOptionInts bed_temperature;
+ ConfigOptionFloat bridge_acceleration;
+ ConfigOptionInts bridge_fan_speed;
+ ConfigOptionFloat brim_width;
+ ConfigOptionBool complete_objects;
+ ConfigOptionBools cooling;
+ ConfigOptionFloat default_acceleration;
+ ConfigOptionInts disable_fan_first_layers;
+ ConfigOptionFloat duplicate_distance;
+ ConfigOptionFloat extruder_clearance_height;
+ ConfigOptionFloat extruder_clearance_radius;
+ ConfigOptionStrings extruder_colour;
+ ConfigOptionPoints extruder_offset;
+ ConfigOptionBools fan_always_on;
+ ConfigOptionInts fan_below_layer_time;
+ ConfigOptionStrings filament_colour;
+ ConfigOptionStrings filament_notes;
+ ConfigOptionFloat first_layer_acceleration;
+ ConfigOptionInts first_layer_bed_temperature;
+ ConfigOptionFloatOrPercent first_layer_extrusion_width;
+ ConfigOptionFloatOrPercent first_layer_speed;
+ ConfigOptionInts first_layer_temperature;
+ ConfigOptionFloat infill_acceleration;
+ ConfigOptionBool infill_first;
+ ConfigOptionInts max_fan_speed;
+ ConfigOptionFloats max_layer_height;
+ ConfigOptionInts min_fan_speed;
+ ConfigOptionFloats min_layer_height;
+ ConfigOptionFloat max_print_height;
+ ConfigOptionFloats min_print_speed;
+ ConfigOptionFloat min_skirt_length;
+ ConfigOptionString notes;
+ ConfigOptionFloats nozzle_diameter;
+ ConfigOptionBool only_retract_when_crossing_perimeters;
+ ConfigOptionBool ooze_prevention;
+ ConfigOptionString output_filename_format;
+ ConfigOptionFloat perimeter_acceleration;
+ ConfigOptionStrings post_process;
+ ConfigOptionString printer_model;
+ ConfigOptionString printer_notes;
+ ConfigOptionFloat resolution;
+ ConfigOptionFloats retract_before_travel;
+ ConfigOptionBools retract_layer_change;
+ ConfigOptionFloat skirt_distance;
+ ConfigOptionInt skirt_height;
+ ConfigOptionInt skirts;
+ ConfigOptionInts slowdown_below_layer_time;
+ ConfigOptionBool spiral_vase;
+ ConfigOptionInt standby_temperature_delta;
+ ConfigOptionInts temperature;
+ ConfigOptionInt threads;
+ ConfigOptionBools wipe;
+ ConfigOptionBool wipe_tower;
+ ConfigOptionFloat wipe_tower_x;
+ ConfigOptionFloat wipe_tower_y;
+ ConfigOptionFloat wipe_tower_width;
+ ConfigOptionFloat wipe_tower_per_color_wipe;
+ ConfigOptionFloat wipe_tower_rotation_angle;
+ ConfigOptionFloat wipe_tower_bridging;
+ ConfigOptionFloats wiping_volumes_matrix;
+ ConfigOptionFloats wiping_volumes_extruders;
+ ConfigOptionFloat z_offset;
+ ConfigOptionFloat bed_size_x;
+ ConfigOptionFloat bed_size_y;
+ ConfigOptionInt pixel_width;
+ ConfigOptionInt pixel_height;
+ ConfigOptionFloat exp_time;
+ ConfigOptionFloat exp_time_first;
+
+protected:
+ PrintConfig(int) : GCodeConfig(1) {}
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ this->MachineEnvelopeConfig::initialize(cache, base_ptr);
+ this->GCodeConfig::initialize(cache, base_ptr);
+ OPT_PTR(avoid_crossing_perimeters);
+ OPT_PTR(bed_shape);
+ OPT_PTR(bed_temperature);
+ OPT_PTR(bridge_acceleration);
+ OPT_PTR(bridge_fan_speed);
+ OPT_PTR(brim_width);
+ OPT_PTR(complete_objects);
+ OPT_PTR(cooling);
+ OPT_PTR(default_acceleration);
+ OPT_PTR(disable_fan_first_layers);
+ OPT_PTR(duplicate_distance);
+ OPT_PTR(extruder_clearance_height);
+ OPT_PTR(extruder_clearance_radius);
+ OPT_PTR(extruder_colour);
+ OPT_PTR(extruder_offset);
+ OPT_PTR(fan_always_on);
+ OPT_PTR(fan_below_layer_time);
+ OPT_PTR(filament_colour);
+ OPT_PTR(filament_notes);
+ OPT_PTR(first_layer_acceleration);
+ OPT_PTR(first_layer_bed_temperature);
+ OPT_PTR(first_layer_extrusion_width);
+ OPT_PTR(first_layer_speed);
+ OPT_PTR(first_layer_temperature);
+ OPT_PTR(infill_acceleration);
+ OPT_PTR(infill_first);
+ OPT_PTR(max_fan_speed);
+ OPT_PTR(max_layer_height);
+ OPT_PTR(min_fan_speed);
+ OPT_PTR(min_layer_height);
+ OPT_PTR(max_print_height);
+ OPT_PTR(min_print_speed);
+ OPT_PTR(min_skirt_length);
+ OPT_PTR(notes);
+ OPT_PTR(nozzle_diameter);
+ OPT_PTR(only_retract_when_crossing_perimeters);
+ OPT_PTR(ooze_prevention);
+ OPT_PTR(output_filename_format);
+ OPT_PTR(perimeter_acceleration);
+ OPT_PTR(post_process);
+ OPT_PTR(printer_model);
+ OPT_PTR(printer_notes);
+ OPT_PTR(resolution);
+ OPT_PTR(retract_before_travel);
+ OPT_PTR(retract_layer_change);
+ OPT_PTR(skirt_distance);
+ OPT_PTR(skirt_height);
+ OPT_PTR(skirts);
+ OPT_PTR(slowdown_below_layer_time);
+ OPT_PTR(spiral_vase);
+ OPT_PTR(standby_temperature_delta);
+ OPT_PTR(temperature);
+ OPT_PTR(threads);
+ OPT_PTR(wipe);
+ OPT_PTR(wipe_tower);
+ OPT_PTR(wipe_tower_x);
+ OPT_PTR(wipe_tower_y);
+ OPT_PTR(wipe_tower_width);
+ OPT_PTR(wipe_tower_per_color_wipe);
+ OPT_PTR(wipe_tower_rotation_angle);
+ OPT_PTR(wipe_tower_bridging);
+ OPT_PTR(wiping_volumes_matrix);
+ OPT_PTR(wiping_volumes_extruders);
+ OPT_PTR(z_offset);
+ OPT_PTR(bed_size_x);
+ OPT_PTR(bed_size_y);
+ OPT_PTR(pixel_width);
+ OPT_PTR(pixel_height);
+ OPT_PTR(exp_time);
+ OPT_PTR(exp_time_first);
+ }
+};
+
+class HostConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(HostConfig)
+public:
+ ConfigOptionEnum<PrintHostType> host_type;
+ ConfigOptionString print_host;
+ ConfigOptionString printhost_apikey;
+ ConfigOptionString printhost_cafile;
+ ConfigOptionString serial_port;
+ ConfigOptionInt serial_speed;
+
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(host_type);
+ OPT_PTR(print_host);
+ OPT_PTR(printhost_apikey);
+ OPT_PTR(printhost_cafile);
+ OPT_PTR(serial_port);
+ OPT_PTR(serial_speed);
+ }
+};
+
+// This object is mapped to Perl as Slic3r::Config::Full.
+class FullPrintConfig :
+ public PrintObjectConfig,
+ public PrintRegionConfig,
+ public PrintConfig,
+ public HostConfig
+{
+ STATIC_PRINT_CONFIG_CACHE_DERIVED(FullPrintConfig)
+ FullPrintConfig() : PrintObjectConfig(0), PrintRegionConfig(0), PrintConfig(0), HostConfig(0) { initialize_cache(); *this = s_cache_FullPrintConfig.defaults(); }
+
+public:
+ // Validate the FullPrintConfig. Returns an empty string on success, otherwise an error message is returned.
+ std::string validate();
+
+protected:
+ // Protected constructor to be called to initialize ConfigCache::m_default.
+ FullPrintConfig(int) : PrintObjectConfig(0), PrintRegionConfig(0), PrintConfig(0), HostConfig(0) {}
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ this->PrintObjectConfig::initialize(cache, base_ptr);
+ this->PrintRegionConfig::initialize(cache, base_ptr);
+ this->PrintConfig ::initialize(cache, base_ptr);
+ this->HostConfig ::initialize(cache, base_ptr);
+ }
+};
+
+class SLAMaterialConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(SLAMaterialConfig)
+public:
+ ConfigOptionFloat layer_height;
+ ConfigOptionFloat initial_layer_height;
+ ConfigOptionFloat exposure_time;
+ ConfigOptionFloat initial_exposure_time;
+ ConfigOptionFloats material_correction_printing;
+ ConfigOptionFloats material_correction_curing;
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(layer_height);
+ OPT_PTR(initial_layer_height);
+ OPT_PTR(exposure_time);
+ OPT_PTR(initial_exposure_time);
+ OPT_PTR(material_correction_printing);
+ OPT_PTR(material_correction_curing);
+ }
+};
+
+class SLAPrinterConfig : public StaticPrintConfig
+{
+ STATIC_PRINT_CONFIG_CACHE(SLAPrinterConfig)
+public:
+ ConfigOptionEnum<PrinterTechnology> printer_technology;
+ ConfigOptionPoints bed_shape;
+ ConfigOptionFloat max_print_height;
+ ConfigOptionFloat display_width;
+ ConfigOptionFloat display_height;
+ ConfigOptionInt display_pixels_x;
+ ConfigOptionInt display_pixels_y;
+ ConfigOptionFloats printer_correction;
+protected:
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ OPT_PTR(printer_technology);
+ OPT_PTR(bed_shape);
+ OPT_PTR(max_print_height);
+ OPT_PTR(display_width);
+ OPT_PTR(display_height);
+ OPT_PTR(display_pixels_x);
+ OPT_PTR(display_pixels_y);
+ OPT_PTR(printer_correction);
+ }
+};
+
+class SLAFullPrintConfig : public SLAPrinterConfig, public SLAMaterialConfig
+{
+ STATIC_PRINT_CONFIG_CACHE_DERIVED(SLAFullPrintConfig)
+ SLAFullPrintConfig() : SLAPrinterConfig(0), SLAMaterialConfig(0) { initialize_cache(); *this = s_cache_SLAFullPrintConfig.defaults(); }
+
+public:
+ // Validate the SLAFullPrintConfig. Returns an empty string on success, otherwise an error message is returned.
+// std::string validate();
+
+protected:
+ // Protected constructor to be called to initialize ConfigCache::m_default.
+ SLAFullPrintConfig(int) : SLAPrinterConfig(0), SLAMaterialConfig(0) {}
+ void initialize(StaticCacheBase &cache, const char *base_ptr)
+ {
+ this->SLAPrinterConfig ::initialize(cache, base_ptr);
+ this->SLAMaterialConfig::initialize(cache, base_ptr);
+ }
+};
+
+#undef STATIC_PRINT_CONFIG_CACHE
+#undef STATIC_PRINT_CONFIG_CACHE_BASE
+#undef STATIC_PRINT_CONFIG_CACHE_DERIVED
+#undef OPT_PTR
+
+}
+
+#endif