2024-12-20 06:44:50 +00:00
# include "PrintConfig.hpp"
# include "ClipperUtils.hpp"
# include "Config.hpp"
# include "I18N.hpp"
# include <set>
# include <boost/algorithm/string/replace.hpp>
# include <boost/algorithm/string/case_conv.hpp>
# include <boost/format.hpp>
# include <boost/lexical_cast.hpp>
# include <boost/log/trivial.hpp>
# include <boost/thread.hpp>
# include <float.h>
namespace {
std : : set < std : : string > SplitStringAndRemoveDuplicateElement ( const std : : string & str , const std : : string & separator )
{
std : : set < std : : string > result ;
if ( str . empty ( ) ) return result ;
std : : string strs = str + separator ;
size_t pos ;
size_t size = strs . size ( ) ;
for ( int i = 0 ; i < size ; + + i ) {
pos = strs . find ( separator , i ) ;
if ( pos < size ) {
std : : string sub_str = strs . substr ( i , pos - i ) ;
result . insert ( sub_str ) ;
i = pos + separator . size ( ) - 1 ;
}
}
return result ;
}
void ReplaceString ( std : : string & resource_str , const std : : string & old_str , const std : : string & new_str )
{
std : : string : : size_type pos = 0 ;
while ( ( pos = resource_str . find ( old_str ) ) ! = std : : string : : npos ) { resource_str . replace ( pos , old_str . length ( ) , new_str ) ; }
}
}
namespace Slic3r {
//! macro used to mark string used at localization,
//! return same string
# define L(s) (s)
# define _(s) Slic3r::I18N::translate(s)
static t_config_enum_names enum_names_from_keys_map ( const t_config_enum_values & enum_keys_map )
{
t_config_enum_names names ;
int cnt = 0 ;
for ( const auto & kvp : enum_keys_map )
cnt = std : : max ( cnt , kvp . second ) ;
cnt + = 1 ;
names . assign ( cnt , " " ) ;
for ( const auto & kvp : enum_keys_map )
names [ kvp . second ] = kvp . first ;
return names ;
}
# define CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NAME) \
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 ; }
static t_config_enum_values s_keys_map_PrinterTechnology {
{ " FFF " , ptFFF } ,
{ " SLA " , ptSLA }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( PrinterTechnology )
static t_config_enum_values s_keys_map_PrintHostType {
{ " prusalink " , htPrusaLink } ,
{ " octoprint " , htOctoPrint } ,
{ " duet " , htDuet } ,
{ " flashair " , htFlashAir } ,
{ " astrobox " , htAstroBox } ,
{ " repetier " , htRepetier } ,
{ " mks " , htMKS }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( PrintHostType )
static t_config_enum_values s_keys_map_AuthorizationType {
{ " key " , atKeyPassword } ,
{ " user " , atUserPassword }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( AuthorizationType )
static t_config_enum_values s_keys_map_GCodeFlavor {
{ " marlin " , gcfMarlinLegacy } ,
{ " klipper " , gcfKlipper } ,
{ " reprap " , gcfRepRapSprinter } ,
{ " reprapfirmware " , gcfRepRapFirmware } ,
{ " repetier " , gcfRepetier } ,
{ " teacup " , gcfTeacup } ,
{ " makerware " , gcfMakerWare } ,
{ " marlin2 " , gcfMarlinFirmware } ,
{ " sailfish " , gcfSailfish } ,
{ " smoothie " , gcfSmoothie } ,
{ " mach3 " , gcfMach3 } ,
{ " machinekit " , gcfMachinekit } ,
{ " no-extrusion " , gcfNoExtrusion }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( GCodeFlavor )
static t_config_enum_values s_keys_map_FuzzySkinType {
{ " none " , int ( FuzzySkinType : : None ) } ,
{ " external " , int ( FuzzySkinType : : External ) } ,
{ " all " , int ( FuzzySkinType : : All ) } ,
{ " allwalls " , int ( FuzzySkinType : : AllWalls ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( FuzzySkinType )
static t_config_enum_values s_keys_map_InfillPattern {
{ " concentric " , ipConcentric } ,
{ " zig-zag " , ipRectilinear } ,
{ " grid " , ipGrid } ,
{ " line " , ipLine } ,
{ " cubic " , ipCubic } ,
{ " triangles " , ipTriangles } ,
{ " tri-hexagon " , ipStars } ,
{ " gyroid " , ipGyroid } ,
{ " honeycomb " , ipHoneycomb } ,
{ " adaptivecubic " , ipAdaptiveCubic } ,
{ " monotonic " , ipMonotonic } ,
{ " monotonicline " , ipMonotonicLine } ,
{ " alignedrectilinear " , ipAlignedRectilinear } ,
{ " 3dhoneycomb " , ip3DHoneycomb } ,
{ " hilbertcurve " , ipHilbertCurve } ,
{ " archimedeanchords " , ipArchimedeanChords } ,
{ " octagramspiral " , ipOctagramSpiral } ,
{ " supportcubic " , ipSupportCubic } ,
{ " lightning " , ipLightning } ,
2024-12-25 08:26:49 +00:00
{ " crosshatch " , ipCrossHatch } ,
//xiamian+
{ " fiberspiral " , ipFiberSpiral }
2024-12-20 06:44:50 +00:00
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( InfillPattern )
static t_config_enum_values s_keys_map_IroningType {
{ " no ironing " , int ( IroningType : : NoIroning ) } ,
{ " top " , int ( IroningType : : TopSurfaces ) } ,
{ " topmost " , int ( IroningType : : TopmostOnly ) } ,
{ " solid " , int ( IroningType : : AllSolid ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( IroningType )
//BBS:
static t_config_enum_values s_keys_map_TopOneWallType {
{ " not apply " , int ( TopOneWallType : : None ) } ,
{ " all top " , int ( TopOneWallType : : Alltop ) } ,
{ " topmost " , int ( TopOneWallType : : Topmost ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( TopOneWallType )
//BBS
static t_config_enum_values s_keys_map_WallInfillOrder {
{ " inner wall/outer wall/infill " , int ( WallInfillOrder : : InnerOuterInfill ) } ,
{ " outer wall/inner wall/infill " , int ( WallInfillOrder : : OuterInnerInfill ) } ,
{ " infill/inner wall/outer wall " , int ( WallInfillOrder : : InfillInnerOuter ) } ,
{ " infill/outer wall/inner wall " , int ( WallInfillOrder : : InfillOuterInner ) } ,
{ " inner-outer-inner wall/infill " , int ( WallInfillOrder : : InnerOuterInnerInfill ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( WallInfillOrder )
//BBS
static t_config_enum_values s_keys_map_WallSequence {
{ " inner wall/outer wall " , int ( WallSequence : : InnerOuter ) } ,
{ " outer wall/inner wall " , int ( WallSequence : : OuterInner ) } ,
{ " inner-outer-inner wall " , int ( WallSequence : : InnerOuterInner ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( WallSequence )
//BBS
static t_config_enum_values s_keys_map_PrintSequence {
{ " by layer " , int ( PrintSequence : : ByLayer ) } ,
{ " by object " , int ( PrintSequence : : ByObject ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( PrintSequence )
static t_config_enum_values s_keys_map_SlicingMode {
{ " regular " , int ( SlicingMode : : Regular ) } ,
{ " even_odd " , int ( SlicingMode : : EvenOdd ) } ,
{ " close_holes " , int ( SlicingMode : : CloseHoles ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SlicingMode )
static t_config_enum_values s_keys_map_SupportMaterialPattern {
{ " rectilinear " , smpRectilinear } ,
{ " rectilinear-grid " , smpRectilinearGrid } ,
{ " honeycomb " , smpHoneycomb } ,
{ " lightning " , smpLightning } ,
{ " default " , smpDefault } ,
{ " hollow " , smpNone } ,
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SupportMaterialPattern )
static t_config_enum_values s_keys_map_SupportMaterialStyle {
{ " default " , smsDefault } ,
{ " grid " , smsGrid } ,
{ " snug " , smsSnug } ,
{ " tree_slim " , smsTreeSlim } ,
{ " tree_strong " , smsTreeStrong } ,
{ " tree_hybrid " , smsTreeHybrid } ,
{ " tree_organic " , smsTreeOrganic }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SupportMaterialStyle )
static t_config_enum_values s_keys_map_SupportMaterialInterfacePattern {
{ " auto " , smipAuto } ,
{ " rectilinear " , smipRectilinear } ,
{ " concentric " , smipConcentric } ,
{ " rectilinear_interlaced " , smipRectilinearInterlaced } ,
{ " grid " , smipGrid }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SupportMaterialInterfacePattern )
static t_config_enum_values s_keys_map_SupportType {
{ " normal(auto) " , stNormalAuto } ,
{ " tree(auto) " , stTreeAuto } ,
{ " normal(manual) " , stNormal } ,
{ " tree(manual) " , stTree }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SupportType )
static t_config_enum_values s_keys_map_SeamPosition {
{ " nearest " , spNearest } ,
{ " aligned " , spAligned } ,
{ " back " , spRear } ,
{ " random " , spRandom } ,
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SeamPosition )
// Orca
static t_config_enum_values s_keys_map_SeamScarfType {
{ " none " , int ( SeamScarfType : : None ) } ,
{ " external " , int ( SeamScarfType : : External ) } ,
{ " all " , int ( SeamScarfType : : All ) } ,
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SeamScarfType )
static const t_config_enum_values s_keys_map_SLADisplayOrientation = {
{ " landscape " , sladoLandscape } ,
{ " portrait " , sladoPortrait }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SLADisplayOrientation )
static const t_config_enum_values s_keys_map_SLAPillarConnectionMode = {
{ " zigzag " , slapcmZigZag } ,
{ " cross " , slapcmCross } ,
{ " dynamic " , slapcmDynamic }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SLAPillarConnectionMode )
static const t_config_enum_values s_keys_map_SLAMaterialSpeed = {
{ " slow " , slamsSlow } ,
{ " fast " , slamsFast }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( SLAMaterialSpeed ) ;
static const t_config_enum_values s_keys_map_BrimType = {
{ " no_brim " , btNoBrim } ,
{ " outer_only " , btOuterOnly } ,
{ " inner_only " , btInnerOnly } ,
{ " outer_and_inner " , btOuterAndInner } ,
{ " auto_brim " , btAutoBrim } // BBS
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( BrimType )
// using 0,1 to compatible with old files
static const t_config_enum_values s_keys_map_TimelapseType = {
{ " 0 " , tlTraditional } ,
{ " 1 " , tlSmooth }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( TimelapseType )
static const t_config_enum_values s_keys_map_DraftShield = {
{ " disabled " , dsDisabled } ,
{ " limited " , dsLimited } ,
{ " enabled " , dsEnabled }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( DraftShield )
static const t_config_enum_values s_keys_map_ForwardCompatibilitySubstitutionRule = {
{ " disable " , ForwardCompatibilitySubstitutionRule : : Disable } ,
{ " enable " , ForwardCompatibilitySubstitutionRule : : Enable } ,
{ " enable_silent " , ForwardCompatibilitySubstitutionRule : : EnableSilent }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( ForwardCompatibilitySubstitutionRule )
static const t_config_enum_values s_keys_map_OverhangFanThreshold = {
{ " 0% " , Overhang_threshold_none } ,
{ " 10% " , Overhang_threshold_1_4 } ,
{ " 25% " , Overhang_threshold_2_4 } ,
{ " 50% " , Overhang_threshold_3_4 } ,
{ " 75% " , Overhang_threshold_4_4 } ,
{ " 95% " , Overhang_threshold_bridge }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( OverhangFanThreshold )
// BBS
static const t_config_enum_values s_keys_map_BedType = {
{ " Default Plate " , btDefault } ,
{ " Cool Plate " , btPC } ,
{ " Engineering Plate " , btEP } ,
{ " High Temp Plate " , btPEI } ,
{ " Textured PEI Plate " , btPTE }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( BedType )
// BBS
static const t_config_enum_values s_keys_map_LayerSeq = {
{ " Auto " , flsAuto } ,
{ " Customize " , flsCutomize } ,
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( LayerSeq )
static t_config_enum_values s_keys_map_NozzleType {
{ " undefine " , int ( NozzleType : : ntUndefine ) } ,
{ " hardened_steel " , int ( NozzleType : : ntHardenedSteel ) } ,
{ " stainless_steel " , int ( NozzleType : : ntStainlessSteel ) } ,
{ " brass " , int ( NozzleType : : ntBrass ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( NozzleType )
static t_config_enum_values s_keys_map_PrinterStructure {
{ " undefine " , int ( PrinterStructure : : psUndefine ) } ,
{ " corexy " , int ( PrinterStructure : : psCoreXY ) } ,
{ " i3 " , int ( PrinterStructure : : psI3 ) } ,
{ " hbot " , int ( PrinterStructure : : psHbot ) } ,
{ " delta " , int ( PrinterStructure : : psDelta ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( PrinterStructure )
static t_config_enum_values s_keys_map_PerimeterGeneratorType {
{ " classic " , int ( PerimeterGeneratorType : : Classic ) } ,
{ " arachne " , int ( PerimeterGeneratorType : : Arachne ) }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( PerimeterGeneratorType )
static const t_config_enum_values s_keys_map_ZHopType = {
{ " Auto Lift " , zhtAuto } ,
{ " Normal Lift " , zhtNormal } ,
{ " Slope Lift " , zhtSlope } ,
{ " Spiral Lift " , zhtSpiral }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( ZHopType )
static const t_config_enum_values s_keys_map_ExtruderType = {
{ " DirectDrive " , etDirectDrive } ,
{ " Bowden " , etBowden }
} ;
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS ( ExtruderType )
static void assign_printer_technology_to_unknown ( t_optiondef_map & options , PrinterTechnology printer_technology )
{
for ( std : : pair < const t_config_option_key , ConfigOptionDef > & kvp : options )
if ( kvp . second . printer_technology = = ptUnknown )
kvp . second . printer_technology = printer_technology ;
}
PrintConfigDef : : PrintConfigDef ( )
{
this - > init_common_params ( ) ;
assign_printer_technology_to_unknown ( this - > options , ptAny ) ;
this - > init_fff_params ( ) ;
this - > init_extruder_option_keys ( ) ;
assign_printer_technology_to_unknown ( this - > options , ptFFF ) ;
this - > init_sla_params ( ) ;
assign_printer_technology_to_unknown ( this - > options , ptSLA ) ;
}
void PrintConfigDef : : init_common_params ( )
{
ConfigOptionDef * def ;
def = this - > add ( " printer_technology " , coEnum ) ;
//def->label = L("Printer technology");
def - > label = " Printer technology " ;
//def->tooltip = L("Printer technology");
def - > enum_keys_map = & ConfigOptionEnum < PrinterTechnology > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " FFF " ) ;
def - > enum_values . push_back ( " SLA " ) ;
def - > set_default_value ( new ConfigOptionEnum < PrinterTechnology > ( ptFFF ) ) ;
def = this - > add ( " printable_area " , coPoints ) ;
def - > label = L ( " Printable area " ) ;
//BBS
def - > mode = comAdvanced ;
def - > gui_type = ConfigOptionDef : : GUIType : : one_string ;
def - > set_default_value ( new ConfigOptionPoints { Vec2d ( 0 , 0 ) , Vec2d ( 200 , 0 ) , Vec2d ( 200 , 200 ) , Vec2d ( 0 , 200 ) } ) ;
//BBS: add "bed_exclude_area"
def = this - > add ( " bed_exclude_area " , coPoints ) ;
def - > label = L ( " Bed exclude area " ) ;
def - > tooltip = L ( " Unprintable area in XY plane. For example, X1 Series printers use the front left corner to cut filament during filament change. "
" The area is expressed as polygon by points in following format: \" XxY, XxY, ... \" " ) ;
def - > mode = comAdvanced ;
def - > gui_type = ConfigOptionDef : : GUIType : : one_string ;
def - > set_default_value ( new ConfigOptionPoints { Vec2d ( 0 , 0 ) } ) ;
def = this - > add ( " bed_custom_texture " , coString ) ;
def - > label = L ( " Bed custom texture " ) ;
def - > mode = comAdvanced ;
def - > gui_type = ConfigOptionDef : : GUIType : : one_string ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " bed_custom_model " , coString ) ;
def - > label = L ( " Bed custom model " ) ;
def - > mode = comAdvanced ;
def - > gui_type = ConfigOptionDef : : GUIType : : one_string ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " elefant_foot_compensation " , coFloat ) ;
def - > label = L ( " Elephant foot compensation " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Shrink the initial layer on build plate to compensate for elephant foot effect " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " layer_height " , coFloat ) ;
def - > label = L ( " Layer height " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Slicing height for each layer. Smaller layer height means more accurate and more printing time " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
def = this - > add ( " printable_height " , coFloat ) ;
def - > label = L ( " Printable height " ) ;
def - > tooltip = L ( " Maximum printable height which is limited by mechanism of printer " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 1000 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 100.0 ) ) ;
// Options used by physical printers
def = this - > add ( " preset_names " , coStrings ) ;
def - > label = L ( " Printer preset names " ) ;
//def->tooltip = L("Names of presets related to the physical printer");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " print_host " , coString ) ;
def - > label = L ( " Hostname, IP or URL " ) ;
def - > tooltip = L ( " Slic3r can upload G-code files to a printer host. This field should contain "
" the hostname, IP address or URL of the printer host instance. "
" Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL "
" in the following format: https://username:password@your-octopi-address/ " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " print_host_webui " , coString ) ;
def - > label = L ( " Device UI " ) ;
def - > tooltip = L ( " Specify the URL of your device user interface if it's not same as print_host " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " printhost_apikey " , coString ) ;
def - > label = L ( " API Key / Password " ) ;
def - > tooltip = L ( " Slic3r can upload G-code files to a printer host. This field should contain "
" the API Key or the password required for authentication. " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " printhost_port " , coString ) ;
def - > label = L ( " Printer " ) ;
def - > tooltip = L ( " Name of the printer " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : select_open ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " printhost_cafile " , coString ) ;
def - > label = L ( " HTTPS CA File " ) ;
def - > tooltip = L ( " Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. "
" If left blank, the default OS CA certificate repository is used. " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
// Options used by physical printers
def = this - > add ( " printhost_user " , coString ) ;
def - > label = L ( " User " ) ;
// def->tooltip = "";
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " printhost_password " , coString ) ;
def - > label = L ( " Password " ) ;
// def->tooltip = "";
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
// Only available on Windows.
def = this - > add ( " printhost_ssl_ignore_revoke " , coBool ) ;
def - > label = L ( " Ignore HTTPS certificate revocation checks " ) ;
def - > tooltip = L ( " Ignore HTTPS certificate revocation checks in case of missing or offline distribution points. "
" One may want to enable this option for self signed certificates if connection fails. " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " preset_names " , coStrings ) ;
def - > label = L ( " Printer preset names " ) ;
def - > tooltip = L ( " Names of presets related to the physical printer " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " printhost_authorization_type " , coEnum ) ;
def - > label = L ( " Authorization Type " ) ;
// def->tooltip = "";
def - > enum_keys_map = & ConfigOptionEnum < AuthorizationType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " key " ) ;
def - > enum_values . push_back ( " user " ) ;
def - > enum_labels . push_back ( L ( " API key " ) ) ;
def - > enum_labels . push_back ( L ( " HTTP digest " ) ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionEnum < AuthorizationType > ( atKeyPassword ) ) ;
// temporary workaround for compatibility with older Slicer
{
def = this - > add ( " preset_name " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
}
}
void PrintConfigDef : : init_fff_params ( )
{
ConfigOptionDef * def ;
// Maximum extruder temperature, bumped to 1500 to support printing of glass.
const int max_temp = 1500 ;
def = this - > add ( " reduce_crossing_wall " , coBool ) ;
def - > label = L ( " Avoid crossing wall " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Detour and avoid traveling across wall which may cause blob on surface " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " max_travel_detour_distance " , coFloatOrPercent ) ;
def - > label = L ( " Avoid crossing wall - Max detour length " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Maximum detour distance for avoiding crossing wall. "
" Don't detour if the detour distance is larger than this value. "
" Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable " ) ;
def - > sidetext = L ( " mm or % " ) ;
def - > min = 0 ;
def - > max_literal = 1000 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 0. , false ) ) ;
// BBS
def = this - > add ( " cool_plate_temp " , coInts ) ;
def - > label = L ( " Other layers " ) ;
def - > tooltip = L ( " Bed temperature for layers except the initial one. "
" Value 0 means the filament does not support to print on the Cool Plate " ) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Bed temperature " ) ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 35 } ) ;
def = this - > add ( " eng_plate_temp " , coInts ) ;
def - > label = L ( " Other layers " ) ;
def - > tooltip = L ( " Bed temperature for layers except the initial one. "
" Value 0 means the filament does not support to print on the Engineering Plate " ) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Bed temperature " ) ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " hot_plate_temp " , coInts ) ;
def - > label = L ( " Other layers " ) ;
def - > tooltip = L ( " Bed temperature for layers except the initial one. "
" Value 0 means the filament does not support to print on the High Temp Plate " ) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Bed temperature " ) ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " textured_plate_temp " , coInts ) ;
def - > label = L ( " Other layers " ) ;
def - > tooltip = L ( " Bed temperature for layers except the initial one. "
" Value 0 means the filament does not support to print on the Textured PEI Plate " ) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Bed temperature " ) ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " cool_plate_temp_initial_layer " , coInts ) ;
def - > label = L ( " Initial layer " ) ;
def - > full_label = L ( " Initial layer bed temperature " ) ;
def - > tooltip = L ( " Bed temperature of the initial layer. "
" Value 0 means the filament does not support to print on the Cool Plate " ) ;
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 35 } ) ;
def = this - > add ( " eng_plate_temp_initial_layer " , coInts ) ;
def - > label = L ( " Initial layer " ) ;
def - > full_label = L ( " Initial layer bed temperature " ) ;
def - > tooltip = L ( " Bed temperature of the initial layer. "
" Value 0 means the filament does not support to print on the Engineering Plate " ) ;
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " hot_plate_temp_initial_layer " , coInts ) ;
def - > label = L ( " Initial layer " ) ;
def - > full_label = L ( " Initial layer bed temperature " ) ;
def - > tooltip = L ( " Bed temperature of the initial layer. "
" Value 0 means the filament does not support to print on the High Temp Plate " ) ;
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " textured_plate_temp_initial_layer " , coInts ) ;
def - > label = L ( " Initial layer " ) ;
def - > full_label = L ( " Initial layer bed temperature " ) ;
def - > tooltip = L ( " Bed temperature of the initial layer. "
" Value 0 means the filament does not support to print on the Textured PEI Plate " ) ;
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = 120 ;
def - > set_default_value ( new ConfigOptionInts { 45 } ) ;
def = this - > add ( " curr_bed_type " , coEnum ) ;
def - > label = L ( " Bed type " ) ;
def - > tooltip = L ( " Bed types supported by the printer " ) ;
def - > mode = comSimple ;
def - > enum_keys_map = & s_keys_map_BedType ;
def - > enum_values . emplace_back ( " Cool Plate " ) ;
def - > enum_values . emplace_back ( " Engineering Plate " ) ;
def - > enum_values . emplace_back ( " High Temp Plate " ) ;
def - > enum_values . emplace_back ( " Textured PEI Plate " ) ;
def - > enum_labels . emplace_back ( L ( " Cool Plate / PLA Plate " ) ) ;
def - > enum_labels . emplace_back ( L ( " Engineering Plate " ) ) ;
def - > enum_labels . emplace_back ( L ( " Smooth PEI Plate / High Temp Plate " ) ) ;
def - > enum_labels . emplace_back ( L ( " Textured PEI Plate " ) ) ;
def - > set_default_value ( new ConfigOptionEnum < BedType > ( btPC ) ) ;
// BBS
def = this - > add ( " first_layer_print_sequence " , coInts ) ;
def - > label = L ( " First layer print sequence " ) ;
def - > min = 0 ;
def - > max = 16 ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " other_layers_print_sequence " , coInts ) ;
def - > label = L ( " Other layers print sequence " ) ;
def - > min = 0 ;
def - > max = 16 ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " other_layers_print_sequence_nums " , coInt ) ;
def - > label = L ( " The number of other layers print sequence " ) ;
def - > set_default_value ( new ConfigOptionInt { 0 } ) ;
def = this - > add ( " first_layer_sequence_choice " , coEnum ) ;
def - > category = L ( " Quality " ) ;
def - > label = L ( " First layer filament sequence " ) ;
def - > enum_keys_map = & ConfigOptionEnum < LayerSeq > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " Auto " ) ;
def - > enum_values . push_back ( " Customize " ) ;
def - > enum_labels . push_back ( L ( " Auto " ) ) ;
def - > enum_labels . push_back ( L ( " Customize " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < LayerSeq > ( flsAuto ) ) ;
def = this - > add ( " other_layers_sequence_choice " , coEnum ) ;
def - > category = L ( " Quality " ) ;
def - > label = L ( " Other layers filament sequence " ) ;
def - > enum_keys_map = & ConfigOptionEnum < LayerSeq > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " Auto " ) ;
def - > enum_values . push_back ( " Customize " ) ;
def - > enum_labels . push_back ( L ( " Auto " ) ) ;
def - > enum_labels . push_back ( L ( " Customize " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < LayerSeq > ( flsAuto ) ) ;
def = this - > add ( " before_layer_change_gcode " , coString ) ;
def - > label = L ( " Before layer change G-code " ) ;
def - > tooltip = L ( " This G-code is inserted at every layer change before lifting z " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 5 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " bottom_shell_layers " , coInt ) ;
def - > label = L ( " Bottom shell layers " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " This is the number of solid layers of bottom shell, including the bottom "
" surface layer. When the thickness calculated by this value is thinner "
" than bottom shell thickness, the bottom shell layers will be increased " ) ;
def - > full_label = L ( " Bottom shell layers " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionInt ( 3 ) ) ;
def = this - > add ( " bottom_shell_thickness " , coFloat ) ;
def - > label = L ( " Bottom shell thickness " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " The number of bottom solid layers is increased when slicing if the thickness calculated by bottom shells layers is "
" thinner than this value. This can avoid having too thin shell when layer height is small. 0 means that "
" this setting is disabled and thickness of bottom shell is absolutely determained by bottom shell layers " ) ;
def - > full_label = L ( " Bottom shell thickness " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " enable_overhang_bridge_fan " , coBools ) ;
def - > label = L ( " Force cooling for overhang and bridge " ) ;
def - > tooltip = L ( " Enable this option to optimize part cooling fan speed for overhang and bridge to get better cooling " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBools { true } ) ;
def = this - > add ( " overhang_fan_speed " , coInts ) ;
def - > label = L ( " Fan speed for overhang " ) ;
def - > tooltip = L ( " Force part cooling fan to be at this speed when printing bridge or overhang wall which has large overhang degree. "
" Forcing cooling for overhang and bridge can get better quality for these part " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInts { 100 } ) ;
def = this - > add ( " overhang_fan_threshold " , coEnums ) ;
def - > label = L ( " Cooling overhang threshold " ) ;
def - > tooltip = L ( " Force cooling fan to be specific speed when overhang degree of printed part exceeds this value. "
" Expressed as percentage which indicides how much width of the line without support from lower layer. "
" 0% means forcing cooling for all outer wall no matter how much overhang degree " ) ;
def - > sidetext = " " ;
def - > enum_keys_map = & ConfigOptionEnum < OverhangFanThreshold > : : get_enum_values ( ) ;
def - > mode = comAdvanced ;
def - > enum_values . emplace_back ( " 0% " ) ;
def - > enum_values . emplace_back ( " 10% " ) ;
def - > enum_values . emplace_back ( " 25% " ) ;
def - > enum_values . emplace_back ( " 50% " ) ;
def - > enum_values . emplace_back ( " 75% " ) ;
def - > enum_values . emplace_back ( " 95% " ) ;
def - > enum_labels . emplace_back ( " 0% " ) ;
def - > enum_labels . emplace_back ( " 10% " ) ;
def - > enum_labels . emplace_back ( " 25% " ) ;
def - > enum_labels . emplace_back ( " 50% " ) ;
def - > enum_labels . emplace_back ( " 75% " ) ;
def - > enum_labels . emplace_back ( " 95% " ) ;
def - > set_default_value ( new ConfigOptionEnumsGeneric { ( int ) Overhang_threshold_bridge } ) ;
def = this - > add ( " bridge_angle " , coFloat ) ;
def - > label = L ( " Bridge direction " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Bridging angle override. If left to zero, the bridging angle will be calculated "
" automatically. Otherwise the provided angle will be used for external bridges. "
" Use 180°for zero angle. " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " bridge_flow " , coFloat ) ;
def - > label = L ( " Bridge flow " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Decrease this value slightly(for example 0.9) to reduce the amount of material for bridge, "
" to improve sag " ) ;
def - > min = 0 ;
def - > max = 2.0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " top_solid_infill_flow_ratio " , coFloat ) ;
def - > label = L ( " Top surface flow ratio " ) ;
def - > tooltip = L ( " This factor affects the amount of material for top solid infill. "
" You can decrease it slightly to have smooth surface finish " ) ;
def - > min = 0 ;
def - > max = 2 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " initial_layer_flow_ratio " , coFloat ) ;
def - > label = L ( " Initial layer flow ratio " ) ;
def - > tooltip = L ( " This factor affects the amount of material for the initial layer " ) ;
def - > min = 0 ;
def - > max = 2 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " top_one_wall_type " , coEnum ) ;
def - > label = L ( " Only one wall on top surfaces " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Use only one wall on flat top surface, to give more space to the top infill pattern. Could be applied on topmost surface or all top surface. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < TopOneWallType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " not apply " ) ;
def - > enum_values . push_back ( " all top " ) ;
def - > enum_values . push_back ( " topmost " ) ;
def - > enum_labels . push_back ( L ( " Not apply " ) ) ;
def - > enum_labels . push_back ( L ( " Top surfaces " ) ) ;
def - > enum_labels . push_back ( L ( " Topmost surface " ) ) ;
def - > set_default_value ( new ConfigOptionEnum < TopOneWallType > ( TopOneWallType : : Alltop ) ) ;
def = this - > add ( " top_area_threshold " , coPercent ) ;
def - > label = L ( " Top area threshold " ) ;
def - > tooltip = L ( " This factor affects the acreage of top area. The small the number the big the top area. " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 500 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionPercent ( 100 ) ) ;
def = this - > add ( " only_one_wall_first_layer " , coBool ) ;
def - > label = L ( " Only one wall on first layer " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Use only one wall on the first layer of model " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " enable_overhang_speed " , coBool ) ;
def - > label = L ( " Slow down for overhang " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Enable this option to slow printing down for different overhang degree " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool { true } ) ;
def = this - > add ( " overhang_1_4_speed " , coFloat ) ;
def - > label = " (10%, 25%) " ;
def - > category = L ( " Speed " ) ;
def - > full_label = " (10%, 25%) " ;
//def->tooltip = L("Speed for line of wall which has degree of overhang between 10% and 25% line width. "
// "0 means using original wall speed");
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " overhang_2_4_speed " , coFloat ) ;
def - > label = " [25%, 50%) " ;
def - > category = L ( " Speed " ) ;
def - > full_label = " [25%, 50%) " ;
//def->tooltip = L("Speed for line of wall which has degree of overhang between 25% and 50% line width. "
// "0 means using original wall speed");
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " overhang_3_4_speed " , coFloat ) ;
def - > label = " [50%, 75%) " ;
def - > category = L ( " Speed " ) ;
def - > full_label = " [50%, 75%) " ;
//def->tooltip = L("Speed for line of wall which has degree of overhang between 50% and 75% line width. 0 means using original wall speed");
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " overhang_4_4_speed " , coFloat ) ;
def - > label = " [75%, 100%) " ;
def - > category = L ( " Speed " ) ;
def - > full_label = " [75%, 100%) " ;
// def->tooltip = L("Speed for line of wall which has degree of overhang between 75% and 100% line width. 0 means using original wall speed");
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " overhang_totally_speed " , coFloat ) ;
def - > label = L ( " over 100% wall (not bridge) " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed for line of wall which has degree of overhang over 100% line width, but the wall is not a bridge wall. " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat { 24 } ) ;
def = this - > add ( " bridge_speed " , coFloat ) ;
def - > label = L ( " Bridge print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of bridge and completely overhang wall " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 25 ) ) ;
def = this - > add ( " brim_width " , coFloat ) ;
def - > label = L ( " Brim width " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Distance from model to the outermost brim line " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " brim_type " , coEnum ) ;
def - > label = L ( " Brim type " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " This controls the generation of the brim at outer and/or inner side of models. "
" Auto means the brim width is analysed and calculated automatically. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < BrimType > : : get_enum_values ( ) ;
def - > enum_values . emplace_back ( " auto_brim " ) ;
def - > enum_values . emplace_back ( " outer_only " ) ;
# if 1 //!BBL_RELEASE_TO_PUBLIC
// BBS: The following two types are disabled
def - > enum_values . emplace_back ( " inner_only " ) ;
def - > enum_values . emplace_back ( " outer_and_inner " ) ;
# endif
def - > enum_values . emplace_back ( " no_brim " ) ;
def - > enum_labels . emplace_back ( L ( " Auto " ) ) ;
def - > enum_labels . emplace_back ( L ( " Outer brim only " ) ) ;
# if 1 //!BBL_RELEASE_TO_PUBLIC
// BBS: The following two types are disabled
def - > enum_labels . emplace_back ( L ( " Inner brim only " ) ) ;
def - > enum_labels . emplace_back ( L ( " Outer and inner brim " ) ) ;
# endif
def - > enum_labels . emplace_back ( L ( " No-brim " ) ) ;
def - > mode = comSimple ;
2025-02-14 08:27:40 +00:00
def - > set_default_value ( new ConfigOptionEnum < BrimType > ( btOuterOnly ) ) ;
2024-12-20 06:44:50 +00:00
def = this - > add ( " brim_object_gap " , coFloat ) ;
def - > label = L ( " Brim-object gap " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " A gap between innermost brim line and object can make brim be removed more easily " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 2 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " compatible_printers " , coStrings ) ;
def - > label = L ( " Compatible machine " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
//BBS.
def = this - > add ( " upward_compatible_machine " , coStrings ) ;
def - > label = L ( " upward compatible machine " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " compatible_printers_condition " , coString ) ;
def - > label = L ( " Compatible machine condition " ) ;
//def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
// "If this expression evaluates to true, this profile is considered compatible "
// "with the active printer profile.");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " compatible_prints " , coStrings ) ;
def - > label = L ( " Compatible process profiles " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " compatible_prints_condition " , coString ) ;
def - > label = L ( " Compatible process profiles condition " ) ;
//def->tooltip = L("A boolean expression using the configuration values of an active print profile. "
// "If this expression evaluates to true, this profile is considered compatible "
// "with the active print profile.");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
// The following value is to be stored into the project file (AMF, 3MF, Config ...)
// and it contains a sum of "compatible_printers_condition" values over the print and filament profiles.
def = this - > add ( " compatible_machine_expression_group " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " compatible_process_expression_group " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
//BBS: add logic for checking between different system presets
def = this - > add ( " different_settings_to_system " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " print_compatible_printers " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " print_sequence " , coEnum ) ;
def - > label = L ( " Print sequence " ) ;
def - > tooltip = L ( " Print sequence, layer by layer or object by object " ) ;
def - > enum_keys_map = & ConfigOptionEnum < PrintSequence > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " by layer " ) ;
def - > enum_values . push_back ( " by object " ) ;
def - > enum_labels . push_back ( L ( " By layer " ) ) ;
def - > enum_labels . push_back ( L ( " By object " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < PrintSequence > ( PrintSequence : : ByLayer ) ) ;
def = this - > add ( " slow_down_for_layer_cooling " , coBools ) ;
def - > label = L ( " Slow printing down for better layer cooling " ) ;
def - > tooltip = L ( " Enable this option to slow printing speed down to make the final layer time not shorter than "
" the layer time threshold in \" Max fan speed threshold \" , so that layer can be cooled for a longer time. "
" This can improve the cooling quality for needle and small details " ) ;
def - > set_default_value ( new ConfigOptionBools { true } ) ;
def = this - > add ( " default_acceleration " , coFloat ) ;
def - > label = L ( " Normal printing acceleration " ) ;
def - > tooltip = L ( " The default acceleration of both normal printing and travel except initial layer " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 500.0 ) ) ;
def = this - > add ( " default_filament_profile " , coStrings ) ;
def - > label = L ( " Default filament profile " ) ;
def - > tooltip = L ( " Default filament profile when switch to this machine profile " ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " default_print_profile " , coString ) ;
def - > label = L ( " Default process profile " ) ;
def - > tooltip = L ( " Default process profile when switch to this machine profile " ) ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " activate_air_filtration " , coBools ) ;
def - > label = L ( " Activate air filtration " ) ;
def - > tooltip = L ( " Activate for better air filtration " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " during_print_exhaust_fan_speed " , coInts ) ;
def - > label = L ( " Fan speed " ) ;
def - > tooltip = L ( " Speed of exhaust fan during printing.This speed will overwrite the speed in filament custom gcode " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 60 } ) ;
def = this - > add ( " complete_print_exhaust_fan_speed " , coInts ) ;
def - > label = L ( " Fan speed " ) ;
def - > sidetext = " % " ;
def - > tooltip = L ( " Speed of exhuast fan after printing completes " ) ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 80 } ) ;
def = this - > add ( " close_fan_the_first_x_layers " , coInts ) ;
def - > label = L ( " No cooling for the first " ) ;
def - > tooltip = L ( " Close all cooling fan for the first certain layers. Cooling fan of the first layer used to be closed "
" to get better build plate adhesion " ) ;
def - > sidetext = L ( " layers " ) ;
def - > min = 0 ;
def - > max = 1000 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 1 } ) ;
def = this - > add ( " bridge_no_support " , coBool ) ;
def - > label = L ( " Don't support bridges " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Don't support the whole bridge area which makes support very large. "
" Bridge usually can be printing directly without support if not very long " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " thick_bridges " , coBool ) ;
def - > label = L ( " Thick bridges " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " If enabled, bridges are more reliable, can bridge longer distances, but may look worse. "
" If disabled, bridges look better but are reliable just for shorter bridged distances. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " max_bridge_length " , coFloat ) ;
def - > label = L ( " Max bridge length " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Max length of bridges that don't need support. Set it to 0 if you want all bridges to be supported, and set it to a very large value if you don't want any bridges to be supported. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 10 ) ) ;
def = this - > add ( " machine_end_gcode " , coString ) ;
def - > label = L ( " End G-code " ) ;
def - > tooltip = L ( " End G-code when finish the whole printing " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " M104 S0 ; turn off temperature \n G28 X0 ; home X axis \n M84 ; disable motors \n " ) ) ;
def = this - > add ( " printing_by_object_gcode " , coString ) ;
def - > label = L ( " Between Object Gcode " ) ;
def - > tooltip = L ( " Insert Gcode between objects. This parameter will only come into effect when you print your models object by object " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " filament_end_gcode " , coStrings ) ;
def - > label = L ( " End G-code " ) ;
def - > tooltip = L ( " End G-code when finish the printing of this filament " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 120 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings { " " } ) ;
def = this - > add ( " ensure_vertical_shell_thickness " , coBool ) ;
def - > label = L ( " Ensure vertical shell thickness " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Add solid infill near sloping surfaces to guarantee the vertical shell thickness "
" (top+bottom solid layers) " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " internal_bridge_support_thickness " , coFloat ) ;
def - > label = L ( " Internal bridge support thickness " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " When sparse infill density is low, the internal solid infill or internal bridge may have no archor at the end of line. "
" This causes falling and bad quality when printing internal solid infill. "
" When enable this feature, loop paths will be added to the sparse fill of the lower layers for specific thickness, so that better archor can be provided for internal bridge. "
" 0 means disable this feature " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 2 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
auto def_top_fill_pattern = def = this - > add ( " top_surface_pattern " , coEnum ) ;
def - > label = L ( " Top surface pattern " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Line pattern of top surface infill " ) ;
def - > enum_keys_map = & ConfigOptionEnum < InfillPattern > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " concentric " ) ;
def - > enum_values . push_back ( " zig-zag " ) ;
def - > enum_values . push_back ( " monotonic " ) ;
def - > enum_values . push_back ( " monotonicline " ) ;
def - > enum_values . push_back ( " alignedrectilinear " ) ;
//xiamian-
//def->enum_values.push_back("hilbertcurve");
//def->enum_values.push_back("archimedeanchords");
//def->enum_values.push_back("octagramspiral");
//xiamian+
def - > enum_values . push_back ( " fiberspiral " ) ;
def - > enum_labels . push_back ( L ( " Concentric " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear " ) ) ;
def - > enum_labels . push_back ( L ( " Monotonic " ) ) ;
def - > enum_labels . push_back ( L ( " Monotonic line " ) ) ;
def - > enum_labels . push_back ( L ( " Aligned Rectilinear " ) ) ;
//xiamian-
//def->enum_labels.push_back(L("Hilbert Curve"));
//def->enum_labels.push_back(L("Archimedean Chords"));
//def->enum_labels.push_back(L("Octagram Spiral"));
//xiamian+
def - > enum_labels . push_back ( L ( " Fiber Spiral " ) ) ;
def - > set_default_value ( new ConfigOptionEnum < InfillPattern > ( ipRectilinear ) ) ;
def = this - > add ( " bottom_surface_pattern " , coEnum ) ;
def - > label = L ( " Bottom surface pattern " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Line pattern of bottom surface infill, not bridge infill " ) ;
def - > enum_keys_map = & ConfigOptionEnum < InfillPattern > : : get_enum_values ( ) ;
def - > enum_values = def_top_fill_pattern - > enum_values ;
def - > enum_labels = def_top_fill_pattern - > enum_labels ;
def - > set_default_value ( new ConfigOptionEnum < InfillPattern > ( ipRectilinear ) ) ;
def = this - > add ( " internal_solid_infill_pattern " , coEnum ) ;
def - > label = L ( " Internal solid infill pattern " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Line pattern of internal solid infill. if the detect narrow internal solid infill be enabled, the concentric pattern will be used for the small area. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < InfillPattern > : : get_enum_values ( ) ;
def - > enum_values = def_top_fill_pattern - > enum_values ;
def - > enum_labels = def_top_fill_pattern - > enum_labels ;
def - > set_default_value ( new ConfigOptionEnum < InfillPattern > ( ipRectilinear ) ) ;
def = this - > add ( " outer_wall_line_width " , coFloat ) ;
def - > label = L ( " Outer wall step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of outer wall " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " outer_wall_speed " , coFloat ) ;
def - > label = L ( " Outer wall print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of outer wall which is outermost and visible. "
" It's used to be slower than inner wall speed to get better quality. " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 60 ) ) ;
def = this - > add ( " small_perimeter_speed " , coFloatOrPercent ) ;
def - > label = L ( " Small perimeters " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " This setting will affect the speed of perimeters having radius <= small perimeter threshold "
" (usually holes). If expressed as percentage (for example: 80%) it will be calculated on "
" the outer wall speed setting above. Set to zero for auto. " ) ;
def - > sidetext = L ( " mm/s or % " ) ;
def - > ratio_over = " outer_wall_speed " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 50 , true ) ) ;
def = this - > add ( " small_perimeter_threshold " , coFloat ) ;
def - > label = L ( " Small perimter threshold " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " This sets the threshold for small perimeter length. Default threshold is 0mm " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " wall_sequence " , coEnum ) ;
def - > label = L ( " Order of walls " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Print sequence of inner wall and outer wall. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < WallSequence > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " inner wall/outer wall " ) ;
def - > enum_values . push_back ( " outer wall/inner wall " ) ;
def - > enum_values . push_back ( " inner-outer-inner wall " ) ;
def - > enum_labels . push_back ( L ( " inner/outer " ) ) ;
def - > enum_labels . push_back ( L ( " outer/inner " ) ) ;
def - > enum_labels . push_back ( L ( " inner wall/outer wall/inner wall " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < WallSequence > ( WallSequence : : InnerOuter ) ) ;
def = this - > add ( " is_infill_first " , coBool ) ;
def - > label = L ( " Print infill first " ) ;
def - > tooltip = L ( " Order of wall/infill. false means print wall first. " ) ;
def - > category = L ( " Quality " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool { false } ) ;
def = this - > add ( " extruder " , coInt ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : i_enum_open ;
def - > label = L ( " Extruder " ) ;
def - > category = L ( " Extruders " ) ;
//def->tooltip = L("The extruder to use (unless more specific extruder settings are specified). "
// "This value overrides perimeter and infill extruders, but not the support extruders.");
def - > min = 0 ; // 0 = inherit defaults
def - > enum_labels . push_back ( L ( " default " ) ) ; // override label for item 0
def - > enum_labels . push_back ( " 1 " ) ;
def - > enum_labels . push_back ( " 2 " ) ;
def - > enum_labels . push_back ( " 3 " ) ;
def - > enum_labels . push_back ( " 4 " ) ;
def - > enum_labels . push_back ( " 5 " ) ;
def - > mode = comDevelop ;
def = this - > add ( " extruder_clearance_height_to_rod " , coFloat ) ;
def - > label = L ( " Height to rod " ) ;
def - > tooltip = L ( " Distance of the nozzle tip to the lower rod. "
" Used for collision avoidance in by-object printing. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 40 ) ) ;
// BBS
def = this - > add ( " extruder_clearance_height_to_lid " , coFloat ) ;
def - > label = L ( " Height to lid " ) ;
def - > tooltip = L ( " Distance of the nozzle tip to the lid. "
" Used for collision avoidance in by-object printing. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 120 ) ) ;
def = this - > add ( " extruder_clearance_radius " , coFloat ) ;
def - > label = L ( " Radius " ) ;
def - > tooltip = L ( " Clearance radius around extruder. Used for collision avoidance in by-object printing. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 40 ) ) ;
def = this - > add ( " nozzle_height " , coFloat ) ;
def - > label = L ( " Nozzle height " ) ;
def - > tooltip = L ( " The height of nozzle tip. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 4 ) ) ;
def = this - > add ( " extruder_clearance_max_radius " , coFloat ) ;
def - > label = L ( " Max Radius " ) ;
def - > tooltip = L ( " Max clearance radius around extruder. Used for collision avoidance in by-object printing. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 68 ) ) ;
def = this - > add ( " extruder_colour " , coStrings ) ;
def - > label = L ( " Extruder Color " ) ;
def - > tooltip = L ( " Only used as a visual help on UI " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : color ;
// Empty string means no color assigned yet.
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings { " " } ) ;
def = this - > add ( " extruder_offset " , coPoints ) ;
def - > label = L ( " Extruder offset " ) ;
//def->tooltip = L("If your firmware doesn't handle the extruder displacement you need the G-code "
// "to take it into account. This option lets you specify the displacement of each extruder "
// "with respect to the first one. It expects positive coordinates (they will be subtracted "
// "from the XY coordinate).");
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPoints { Vec2d ( 0 , 0 ) } ) ;
def = this - > add ( " filament_flow_ratio " , coFloats ) ;
def - > label = L ( " Flow ratio " ) ;
def - > tooltip = L ( " The material may have volumetric change after switching between molten state and crystalline state. "
" This setting changes all extrusion flow of this filament in gcode proportionally. "
" Recommended value range is between 0.95 and 1.05. "
" Maybe you can tune this value to get nice flat surface when there has slight overflow or underflow " ) ;
def - > max = 2 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 1. } ) ;
def = this - > add ( " print_flow_ratio " , coFloat ) ;
def - > label = L ( " Object flow ratio " ) ;
def - > tooltip = L ( " The flow ratio set by object, the meaning is the same as flow ratio. " ) ;
def - > mode = comDevelop ;
def - > max = 2 ;
def - > min = 0.01 ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " enable_pressure_advance " , coBools ) ;
def - > label = L ( " Enable pressure advance " ) ;
def - > tooltip = L ( " Enable pressure advance, auto calibration result will be overwriten once enabled. Useless for Bambu Printer " ) ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " pressure_advance " , coFloats ) ;
def - > label = L ( " Pressure advance " ) ;
def - > tooltip = L ( " Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for Bambu Printer " ) ;
def - > max = 2 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0.02 } ) ;
def = this - > add ( " filament_notes " , coString ) ;
def - > label = L ( " Filament notes " ) ;
def - > tooltip = L ( " You can put your notes regarding the filament here. " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 13 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " process_notes " , coString ) ;
def - > label = L ( " Process notes " ) ;
def - > tooltip = L ( " You can put your notes regarding the process here. " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 13 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " printer_notes " , coString ) ;
def - > label = L ( " Printer notes " ) ;
def - > tooltip = L ( " You can put your notes regarding the printer here. " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 13 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " line_width " , coFloat ) ;
def - > label = L ( " Default " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Default line width if some line width is set to be zero " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " reduce_fan_stop_start_freq " , coBools ) ;
def - > label = L ( " Keep fan always on " ) ;
def - > tooltip = L ( " If enable this setting, part cooling fan will never be stopped and will run at least "
" at minimum speed to reduce the frequency of starting and stopping " ) ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " fan_cooling_layer_time " , coInts ) ;
def - > label = L ( " Layer time " ) ;
def - > tooltip = L ( " Part cooling fan will be enabled for layers of which estimated time is shorter than this value. "
" Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time " ) ;
def - > sidetext = L ( " s " ) ;
def - > min = 0 ;
def - > max = 1000 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 60 } ) ;
def = this - > add ( " default_filament_colour " , coStrings ) ;
def - > label = L ( " Default color " ) ;
def - > tooltip = L ( " Default filament color " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : color ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings { " " } ) ;
def = this - > add ( " filament_colour " , coStrings ) ;
def - > label = L ( " Color " ) ;
def - > tooltip = L ( " Only used as a visual help on UI " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : color ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionStrings { " #00AE42 " } ) ;
//bbs
def = this - > add ( " required_nozzle_HRC " , coInts ) ;
def - > label = L ( " Required nozzle HRC " ) ;
def - > tooltip = L ( " Minimum HRC of nozzle required to print the filament. Zero means no checking of nozzle's HRC. " ) ;
def - > min = 0 ;
def - > max = 500 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " filament_max_volumetric_speed " , coFloats ) ;
def - > label = L ( " Max volumetric speed " ) ;
def - > tooltip = L ( " This setting stands for how much volume of filament can be melted and extruded per second. "
" Printing speed is limited by max volumetric speed, in case of too high and unreasonable speed setting. "
" Can't be zero " ) ;
def - > sidetext = L ( " mm³/s " ) ;
def - > min = 0 ;
def - > max = 70 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 2. } ) ;
def = this - > add ( " filament_minimal_purge_on_wipe_tower " , coFloats ) ;
def - > label = L ( " Minimal purge on wipe tower " ) ;
//def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside "
// "the nozzle may not be known, and the filament pressure is likely not yet stable. "
// "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime "
// "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably.");
def - > sidetext = L ( " mm³ " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 15. } ) ;
def = this - > add ( " machine_load_filament_time " , coFloat ) ;
def - > label = L ( " Filament load time " ) ;
def - > tooltip = L ( " Time to load new filament when switch filament. For statistics only " ) ;
def - > sidetext = L ( " s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.0 ) ) ;
def = this - > add ( " machine_unload_filament_time " , coFloat ) ;
def - > label = L ( " Filament unload time " ) ;
def - > tooltip = L ( " Time to unload old filament when switch filament. For statistics only " ) ;
def - > sidetext = L ( " s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.0 ) ) ;
def = this - > add ( " filament_diameter " , coFloats ) ;
def - > label = L ( " Diameter " ) ;
def - > tooltip = L ( " Filament diameter is used to calculate extrusion in gcode, so it's important and should be accurate " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloats { 1.75 } ) ;
def = this - > add ( " filament_density " , coFloats ) ;
def - > label = L ( " Density " ) ;
def - > tooltip = L ( " Filament density. For statistics only " ) ;
def - > sidetext = L ( " g/cm³ " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " filament_type " , coStrings ) ;
def - > label = L ( " Type " ) ;
def - > tooltip = L ( " The material type of filament " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : f_enum_open ;
def - > gui_flags = " show_value " ;
def - > enum_values . push_back ( " PLA " ) ;
def - > enum_values . push_back ( " ABS " ) ;
def - > enum_values . push_back ( " ASA " ) ;
def - > enum_values . push_back ( " PETG " ) ;
def - > enum_values . push_back ( " PCTG " ) ;
def - > enum_values . push_back ( " TPU " ) ;
def - > enum_values . push_back ( " PC " ) ;
def - > enum_values . push_back ( " PA " ) ;
def - > enum_values . push_back ( " PA-CF " ) ;
def - > enum_values . push_back ( " PA-GF " ) ;
def - > enum_values . push_back ( " PA6-CF " ) ;
def - > enum_values . push_back ( " PLA-CF " ) ;
def - > enum_values . push_back ( " PET-CF " ) ;
def - > enum_values . push_back ( " PETG-CF " ) ;
def - > enum_values . push_back ( " PVA " ) ;
def - > enum_values . push_back ( " HIPS " ) ;
def - > enum_values . push_back ( " PLA-AERO " ) ;
def - > enum_values . push_back ( " PPS " ) ;
def - > enum_values . push_back ( " PPS-CF " ) ;
def - > enum_values . push_back ( " PPA-CF " ) ;
def - > enum_values . push_back ( " PPA-GF " ) ;
def - > enum_values . push_back ( " ABS-GF " ) ;
def - > enum_values . push_back ( " ASA-Aero " ) ;
def - > enum_values . push_back ( " PE " ) ;
def - > enum_values . push_back ( " PP " ) ;
def - > enum_values . push_back ( " EVA " ) ;
def - > enum_values . push_back ( " PHA " ) ;
def - > enum_values . push_back ( " BVOH " ) ;
def - > enum_values . push_back ( " PE-CF " ) ;
def - > enum_values . push_back ( " PP-CF " ) ;
def - > enum_values . push_back ( " PP-GF " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionStrings { " PLA " } ) ;
def = this - > add ( " filament_soluble " , coBools ) ;
def - > label = L ( " Soluble material " ) ;
def - > tooltip = L ( " Soluble material is commonly used to print support and support interface " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " filament_is_support " , coBools ) ;
def - > label = L ( " Support material " ) ;
def - > tooltip = L ( " Support material is commonly used to print support and support interface " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
// BBS
def = this - > add ( " temperature_vitrification " , coInts ) ;
def - > label = L ( " Softening temperature " ) ;
def - > tooltip = L ( " The material softens at this temperature, so when the bed temperature is equal to or greater than it, it's highly recommended to open the front door and/or remove the upper glass to avoid cloggings. " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 100 } ) ;
def = this - > add ( " filament_cost " , coFloats ) ;
def - > label = L ( " Price " ) ;
def - > tooltip = L ( " Filament price. For statistics only " ) ;
def - > sidetext = L ( " money/kg " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " filament_settings_id " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings { " " } ) ;
//BBS: open this option to command line
//def->cli = ConfigOptionDef::nocli;
def = this - > add ( " filament_ids " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " filament_vendor " , coStrings ) ;
def - > label = L ( " Vendor " ) ;
def - > tooltip = L ( " Vendor of filament. For show only " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings { L ( " (Undefined) " ) } ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " infill_direction " , coFloat ) ;
def - > label = L ( " Infill direction " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Angle for sparse infill pattern, which controls the start or main direction of line " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > max = 360 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 45 ) ) ;
def = this - > add ( " sparse_infill_density " , coPercent ) ;
def - > label = L ( " Sparse infill density " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Density of internal sparse infill, 100% means solid throughout " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > set_default_value ( new ConfigOptionPercent ( 20 ) ) ;
def = this - > add ( " sparse_infill_pattern " , coEnum ) ;
def - > label = L ( " Sparse infill pattern " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Line pattern for internal sparse infill " ) ;
def - > enum_keys_map = & ConfigOptionEnum < InfillPattern > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " concentric " ) ;
def - > enum_values . push_back ( " zig-zag " ) ;
def - > enum_values . push_back ( " grid " ) ;
def - > enum_values . push_back ( " line " ) ;
def - > enum_values . push_back ( " cubic " ) ;
def - > enum_values . push_back ( " triangles " ) ;
def - > enum_values . push_back ( " tri-hexagon " ) ;
def - > enum_values . push_back ( " gyroid " ) ;
def - > enum_values . push_back ( " honeycomb " ) ;
def - > enum_values . push_back ( " adaptivecubic " ) ;
def - > enum_values . push_back ( " alignedrectilinear " ) ;
def - > enum_values . push_back ( " 3dhoneycomb " ) ;
//xiamian-
//def->enum_values.push_back("hilbertcurve");
//def->enum_values.push_back("archimedeanchords");
//def->enum_values.push_back("octagramspiral");
def - > enum_values . push_back ( " supportcubic " ) ;
def - > enum_values . push_back ( " lightning " ) ;
def - > enum_values . push_back ( " crosshatch " ) ;
//xiamian+
def - > enum_values . push_back ( " fiberspiral " ) ;
def - > enum_labels . push_back ( L ( " Concentric " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear " ) ) ;
def - > enum_labels . push_back ( L ( " Grid " ) ) ;
def - > enum_labels . push_back ( L ( " Line " ) ) ;
def - > enum_labels . push_back ( L ( " Cubic " ) ) ;
def - > enum_labels . push_back ( L ( " Triangles " ) ) ;
def - > enum_labels . push_back ( L ( " Tri-hexagon " ) ) ;
def - > enum_labels . push_back ( L ( " Gyroid " ) ) ;
def - > enum_labels . push_back ( L ( " Honeycomb " ) ) ;
def - > enum_labels . push_back ( L ( " Adaptive Cubic " ) ) ;
def - > enum_labels . push_back ( L ( " Aligned Rectilinear " ) ) ;
def - > enum_labels . push_back ( L ( " 3D Honeycomb " ) ) ;
//xiamian-
//def->enum_labels.push_back(L("Hilbert Curve"));
//def->enum_labels.push_back(L("Archimedean Chords"));
//def->enum_labels.push_back(L("Octagram Spiral"));
def - > enum_labels . push_back ( L ( " Support Cubic " ) ) ;
def - > enum_labels . push_back ( L ( " Lightning " ) ) ;
def - > enum_labels . push_back ( L ( " Cross Hatch " ) ) ;
//xiamian+
def - > enum_labels . push_back ( L ( " Fiber Spiral " ) ) ;
def - > set_default_value ( new ConfigOptionEnum < InfillPattern > ( ipCubic ) ) ;
def = this - > add ( " top_surface_acceleration " , coFloat ) ;
def - > label = L ( " Top surface " ) ;
def - > tooltip = L ( " Acceleration of top surface infill. Using a lower value may improve top surface quality " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 500 ) ) ;
def = this - > add ( " outer_wall_acceleration " , coFloat ) ;
def - > label = L ( " Outer wall " ) ;
def - > tooltip = L ( " Acceleration of outer wall. Using a lower value can improve quality " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 500 ) ) ;
def = this - > add ( " inner_wall_acceleration " , coFloat ) ;
def - > label = L ( " Inner wall " ) ;
def - > tooltip = L ( " Acceleration of inner walls. 0 means using normal printing acceleration " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " sparse_infill_acceleration " , coFloatOrPercent ) ;
def - > label = L ( " Sparse infill " ) ;
def - > tooltip = L ( " Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration. " ) ;
def - > sidetext = L ( " mm/s² or % " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > ratio_over = " default_acceleration " ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 100 , true ) ) ;
def = this - > add ( " initial_layer_acceleration " , coFloat ) ;
def - > label = L ( " Initial layer " ) ;
def - > tooltip = L ( " Acceleration of initial layer. Using a lower value can improve build plate adhensive " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 300 ) ) ;
def = this - > add ( " accel_to_decel_enable " , coBool ) ;
def - > label = L ( " Enable accel_to_decel " ) ;
def - > tooltip = L ( " Klipper's max_accel_to_decel will be adjusted automatically " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " accel_to_decel_factor " , coPercent ) ;
def - > label = L ( " accel_to_decel " ) ;
def - > tooltip = L ( " Klipper's max_accel_to_decel will be adjusted to this percent of acceleration " ) ;
def - > sidetext = " % " ;
def - > min = 1 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercent ( 50 ) ) ;
def = this - > add ( " default_jerk " , coFloat ) ;
def - > label = L ( " Default " ) ;
def - > tooltip = L ( " Default jerk " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " outer_wall_jerk " , coFloat ) ;
def - > label = L ( " Outer wall " ) ;
def - > tooltip = L ( " Jerk of outer walls " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " inner_wall_jerk " , coFloat ) ;
def - > label = L ( " Inner wall " ) ;
def - > tooltip = L ( " Jerk of inner walls " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " infill_jerk " , coFloat ) ;
def - > label = L ( " Infill " ) ;
def - > tooltip = L ( " Jerk of infill " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " top_surface_jerk " , coFloat ) ;
def - > label = L ( " Top surface " ) ;
def - > tooltip = L ( " Jerk of top surface " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " initial_layer_jerk " , coFloat ) ;
def - > label = L ( " First layer " ) ;
def - > tooltip = L ( " Jerk of first layer " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " travel_jerk " , coFloat ) ;
def - > label = L ( " Travel " ) ;
def - > tooltip = L ( " Jerk of travel " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 9 ) ) ;
def = this - > add ( " initial_layer_line_width " , coFloat ) ;
def - > label = L ( " Initial layer step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of initial layer " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " initial_layer_print_height " , coFloat ) ;
def - > label = L ( " Initial layer height " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Height of initial layer. Making initial layer height thick slightly can improve build plate adhension " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
//def = this->add("adaptive_layer_height", coBool);
//def->label = L("Adaptive layer height");
//def->category = L("Quality");
//def->tooltip = L("Enabling this option means the height of every layer except the first will be automatically calculated "
// "during slicing according to the slope of the model’ s surface.\n"
// "Note that this option only takes effect if no prime tower is generated in current plate.");
//def->set_default_value(new ConfigOptionBool(0));
2025-01-21 06:26:10 +00:00
def = this - > add ( " default_print_speed " , coFloat ) ;
2024-12-20 06:44:50 +00:00
def - > label = L ( " Default print speed " ) ;
2025-02-14 08:27:40 +00:00
//def->tooltip = L("Speed of initial layer except the solid infill part");
2024-12-20 06:44:50 +00:00
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
2025-01-21 06:26:10 +00:00
def - > set_default_value ( new ConfigOptionFloat ( 30 ) ) ;
2024-12-20 06:44:50 +00:00
def = this - > add ( " initial_layer_speed " , coFloat ) ;
def - > label = L ( " Initial layer " ) ;
def - > tooltip = L ( " Speed of initial layer except the solid infill part " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 30 ) ) ;
def = this - > add ( " initial_layer_infill_speed " , coFloat ) ;
def - > label = L ( " Initial layer infill " ) ;
def - > tooltip = L ( " Speed of solid infill part of initial layer " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 60.0 ) ) ;
def = this - > add ( " nozzle_temperature_initial_layer " , coInts ) ;
def - > label = L ( " Initial layer " ) ;
def - > full_label = L ( " Initial layer nozzle temperature " ) ;
def - > tooltip = L ( " Nozzle temperature to print initial layer when using this filament " ) ;
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = max_temp ;
def - > set_default_value ( new ConfigOptionInts { 200 } ) ;
def = this - > add ( " full_fan_speed_layer " , coInts ) ;
def - > label = L ( " Full fan speed at layer " ) ;
//def->tooltip = L("Fan speed will be ramped up linearly from zero at layer \"close_fan_the_first_x_layers\" "
// "to maximum at layer \"full_fan_speed_layer\". "
// "\"full_fan_speed_layer\" will be ignored if lower than \"close_fan_the_first_x_layers\", in which case "
// "the fan will be running at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1.");
def - > min = 0 ;
def - > max = 1000 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " fuzzy_skin " , coEnum ) ;
def - > label = L ( " Fuzzy Skin " ) ;
def - > category = L ( " Others " ) ;
def - > tooltip = L ( " Randomly jitter while printing the wall, so that the surface has a rough look. This setting controls "
" the fuzzy position " ) ;
def - > enum_keys_map = & ConfigOptionEnum < FuzzySkinType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " none " ) ;
def - > enum_values . push_back ( " external " ) ;
def - > enum_values . push_back ( " all " ) ;
def - > enum_values . push_back ( " allwalls " ) ;
def - > enum_labels . push_back ( L ( " None " ) ) ;
def - > enum_labels . push_back ( L ( " Contour " ) ) ;
def - > enum_labels . push_back ( L ( " Contour and hole " ) ) ;
def - > enum_labels . push_back ( L ( " All walls " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < FuzzySkinType > ( FuzzySkinType : : None ) ) ;
def = this - > add ( " fuzzy_skin_thickness " , coFloat ) ;
def - > label = L ( " Fuzzy skin thickness " ) ;
def - > category = L ( " Others " ) ;
def - > tooltip = L ( " The width within which to jitter. It's adversed to be below outer wall line width " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 0.3 ) ) ;
2025-02-14 08:27:40 +00:00
def = this - > add ( " fibre_feed_rate " , coFloat ) ;
def - > label = L ( " Fibre feed rate " ) ;
def - > category = L ( " Others " ) ;
//def->tooltip = L("The width within which to jitter. It's adversed to be below outer wall line width");
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 0.3 ) ) ;
2024-12-20 06:44:50 +00:00
def = this - > add ( " fuzzy_skin_point_distance " , coFloat ) ;
def - > label = L ( " Fuzzy skin point distance " ) ;
def - > category = L ( " Others " ) ;
def - > tooltip = L ( " The average distance between the random points introduced on each line segment " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 5 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 0.8 ) ) ;
def = this - > add ( " filter_out_gap_fill " , coFloat ) ;
def - > label = L ( " Filter out tiny gaps " ) ;
def - > tooltip = L ( " Filter out gaps smaller than the threshold specified. This setting won't affact top/bottom layers " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " gap_infill_speed " , coFloat ) ;
def - > label = L ( " Gap infill print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of gap infill. Gap usually has irregular line width and should be printed more slowly " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 30 ) ) ;
// BBS
def = this - > add ( " precise_z_height " , coBool ) ;
def - > label = L ( " Precise Z height " ) ;
def - > tooltip = L ( " Enable this to get precise z height of object after slicing. "
" It will get the precise object height by fine-tuning the layer heights of the last few layers. "
" Note that this is an experimental parameter. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( 0 ) ) ;
// BBS
def = this - > add ( " enable_arc_fitting " , coBool ) ;
def - > label = L ( " Arc fitting " ) ;
def - > tooltip = L ( " Enable this to get a G-code file which has G2 and G3 moves. "
" And the fitting tolerance is the same as resolution " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( 0 ) ) ;
// BBS
def = this - > add ( " gcode_add_line_number " , coBool ) ;
def - > label = L ( " Add line number " ) ;
def - > tooltip = L ( " Enable this to add line number(Nx) at the beginning of each G-Code line " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( 0 ) ) ;
// BBS
def = this - > add ( " scan_first_layer " , coBool ) ;
def - > label = L ( " Scan first layer " ) ;
def - > tooltip = L ( " Enable this to enable the camera on printer to check the quality of first layer " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
// BBS
def = this - > add ( " thumbnail_size " , coPoints ) ;
def - > label = L ( " Thumbnail size " ) ;
def - > tooltip = L ( " Decides the size of thumbnail stored in gcode files " ) ;
def - > mode = comDevelop ;
def - > gui_type = ConfigOptionDef : : GUIType : : one_string ;
def - > set_default_value ( new ConfigOptionPoints { Vec2d ( 50 , 50 ) } ) ;
//BBS
// def = this->add("spaghetti_detector", coBool);
// def->label = L("Enable spaghetti detector");
// def->tooltip = L("Enable the camera on printer to check spaghetti");
// def->mode = comSimple;
// def->set_default_value(new ConfigOptionBool(false));
def = this - > add ( " nozzle_type " , coEnum ) ;
def - > label = L ( " Nozzle type " ) ;
def - > tooltip = L ( " The metallic material of nozzle. This determines the abrasive resistance of nozzle, and "
" what kind of filament can be printed " ) ;
def - > enum_keys_map = & ConfigOptionEnum < NozzleType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " undefine " ) ;
def - > enum_values . push_back ( " hardened_steel " ) ;
def - > enum_values . push_back ( " stainless_steel " ) ;
def - > enum_values . push_back ( " brass " ) ;
def - > enum_labels . push_back ( L ( " Undefine " ) ) ;
def - > enum_labels . push_back ( L ( " Hardened steel " ) ) ;
def - > enum_labels . push_back ( L ( " Stainless steel " ) ) ;
def - > enum_labels . push_back ( L ( " Brass " ) ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionEnum < NozzleType > ( ntUndefine ) ) ;
def = this - > add ( " printer_structure " , coEnum ) ;
def - > label = L ( " Printer structure " ) ;
def - > tooltip = L ( " The physical arrangement and components of a printing device " ) ;
def - > enum_keys_map = & ConfigOptionEnum < PrinterStructure > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " undefine " ) ;
def - > enum_values . push_back ( " corexy " ) ;
def - > enum_values . push_back ( " i3 " ) ;
def - > enum_values . push_back ( " hbot " ) ;
def - > enum_values . push_back ( " delta " ) ;
def - > enum_labels . push_back ( L ( " Undefine " ) ) ;
def - > enum_labels . push_back ( " CoreXY " ) ;
def - > enum_labels . push_back ( " I3 " ) ;
def - > enum_labels . push_back ( " Hbot " ) ;
def - > enum_labels . push_back ( " Delta " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionEnum < PrinterStructure > ( psUndefine ) ) ;
def = this - > add ( " best_object_pos " , coPoint ) ;
def - > label = L ( " Best object position " ) ;
def - > tooltip = L ( " Best auto arranging position in range [0,1] w.r.t. bed shape. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPoint ( Vec2d ( 0.5 , 0.5 ) ) ) ;
def = this - > add ( " auxiliary_fan " , coBool ) ;
def - > label = L ( " Auxiliary part cooling fan " ) ;
def - > tooltip = L ( " Enable this option if machine has auxiliary part cooling fan " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " support_chamber_temp_control " , coBool ) ;
def - > label = L ( " Support control chamber temperature " ) ;
def - > tooltip = L ( " This option is enabled if machine support controlling chamber temperature " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def - > readonly = false ;
def = this - > add ( " support_air_filtration " , coBool ) ;
def - > label = L ( " Air filtration enhancement " ) ;
def - > tooltip = L ( " Enable this if printer support air filtration enhancement. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " gcode_flavor " , coEnum ) ;
def - > label = L ( " G-code flavor " ) ;
def - > tooltip = L ( " What kind of gcode the printer is compatible with " ) ;
def - > enum_keys_map = & ConfigOptionEnum < GCodeFlavor > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " marlin " ) ;
def - > enum_values . push_back ( " klipper " ) ;
//def->enum_values.push_back("reprap");
//def->enum_values.push_back("reprapfirmware");
//def->enum_values.push_back("repetier");
//def->enum_values.push_back("teacup");
//def->enum_values.push_back("makerware");
//def->enum_values.push_back("marlin2");
//def->enum_values.push_back("sailfish");
//def->enum_values.push_back("mach3");
//def->enum_values.push_back("machinekit");
//def->enum_values.push_back("smoothie");
//def->enum_values.push_back("no-extrusion");
def - > enum_labels . push_back ( " Marlin(legacy) " ) ;
def - > enum_labels . push_back ( " Klipper " ) ;
//def->enum_labels.push_back("RepRap/Sprinter");
//def->enum_labels.push_back("RepRapFirmware");
//def->enum_labels.push_back("Repetier");
//def->enum_labels.push_back("Teacup");
//def->enum_labels.push_back("MakerWare (MakerBot)");
//def->enum_labels.push_back("Marlin 2");
//def->enum_labels.push_back("Sailfish (MakerBot)");
//def->enum_labels.push_back("Mach3/LinuxCNC");
//def->enum_labels.push_back("Machinekit");
//def->enum_labels.push_back("Smoothie");
//def->enum_labels.push_back(L("No extrusion"));
def - > mode = comAdvanced ;
def - > readonly = false ;
def - > set_default_value ( new ConfigOptionEnum < GCodeFlavor > ( gcfMarlinLegacy ) ) ;
//OrcaSlicer
def = this - > add ( " exclude_object " , coBool ) ;
def - > label = L ( " Exclude objects " ) ;
def - > tooltip = L ( " Enable this option to add EXCLUDE OBJECT command in g-code for klipper firmware printer " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( 1 ) ) ;
//BBS
def = this - > add ( " infill_combination " , coBool ) ;
def - > label = L ( " Infill combination " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Automatically Combine sparse infill of several layers to print together to reduce time. Wall is still printed "
" with original layer height. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
auto def_infill_anchor_min = def = this - > add ( " sparse_infill_anchor " , coFloatOrPercent ) ;
def - > label = L ( " Length of sparse infill anchor " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Connect a sparse infill line to an internal perimeter with a short segment of an additional perimeter. "
" If expressed as percentage (example: 15%) it is calculated over sparse infill line width. "
" Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
" shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
" and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. "
" Set this parameter to zero to disable anchoring perimeters connected to a single infill line. " ) ;
def - > sidetext = L ( " mm or % " ) ;
def - > ratio_over = " sparse_infill_line_width " ;
def - > max_literal = 1000 ;
def - > gui_type = ConfigOptionDef : : GUIType : : f_enum_open ;
def - > enum_values . push_back ( " 0 " ) ;
def - > enum_values . push_back ( " 1 " ) ;
def - > enum_values . push_back ( " 2 " ) ;
def - > enum_values . push_back ( " 5 " ) ;
def - > enum_values . push_back ( " 10 " ) ;
def - > enum_values . push_back ( " 1000 " ) ;
def - > enum_labels . push_back ( L ( " 0 (no open anchors) " ) ) ;
def - > enum_labels . push_back ( " 1 mm " ) ;
def - > enum_labels . push_back ( " 2 mm " ) ;
def - > enum_labels . push_back ( " 5 mm " ) ;
def - > enum_labels . push_back ( " 10 mm " ) ;
def - > enum_labels . push_back ( L ( " 1000 (unlimited) " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 400 , true ) ) ;
def = this - > add ( " sparse_infill_anchor_max " , coFloatOrPercent ) ;
def - > label = L ( " Maximum length of sparse infill anchor " ) ;
def - > category = def_infill_anchor_min - > category ;
def - > tooltip = L ( " Connect a sparse infill line to an internal perimeter with a short segment of an additional perimeter. "
" If expressed as percentage (example: 15%) it is calculated over sparse infill line width. "
" Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
" shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
" and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. "
" Set this parameter to zero to disable anchoring. " ) ;
def - > sidetext = def_infill_anchor_min - > sidetext ;
def - > ratio_over = def_infill_anchor_min - > ratio_over ;
def - > max_literal = def_infill_anchor_min - > max_literal ;
def - > gui_type = def_infill_anchor_min - > gui_type ;
def - > enum_values . push_back ( " 0 " ) ;
def - > enum_values . push_back ( " 1 " ) ;
def - > enum_values . push_back ( " 2 " ) ;
def - > enum_values . push_back ( " 5 " ) ;
def - > enum_values . push_back ( " 10 " ) ;
def - > enum_values . push_back ( " 1000 " ) ;
def - > enum_labels . push_back ( L ( " 0 (not anchored) " ) ) ;
def - > enum_labels . push_back ( " 1 mm " ) ;
def - > enum_labels . push_back ( " 2 mm " ) ;
def - > enum_labels . push_back ( " 5 mm " ) ;
def - > enum_labels . push_back ( " 10 mm " ) ;
def - > enum_labels . push_back ( L ( " 1000 (unlimited) " ) ) ;
def - > mode = def_infill_anchor_min - > mode ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 20 , false ) ) ;
def = this - > add ( " sparse_infill_filament " , coInt ) ;
def - > label = L ( " Infill " ) ;
def - > category = L ( " Extruders " ) ;
def - > tooltip = L ( " Filament to print internal sparse infill. " ) ;
def - > min = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " sparse_infill_line_width " , coFloat ) ;
def - > label = L ( " Sparse infill step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of internal sparse infill " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " infill_wall_overlap " , coPercent ) ;
def - > label = L ( " Infill/Wall overlap " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill " ) ;
def - > sidetext = " % " ;
def - > ratio_over = " inner_wall_line_width " ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercent ( 15 ) ) ;
def = this - > add ( " sparse_infill_speed " , coFloat ) ;
def - > label = L ( " Sparse infill print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of internal sparse infill " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 100 ) ) ;
def = this - > add ( " inherits " , coString ) ;
//def->label = L("Inherits profile");
def - > label = " Inherits profile " ;
//def->tooltip = L("Name of parent profile");
def - > tooltip = " Name of parent profile " ;
def - > full_width = true ;
def - > height = 5 ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
// The following value is to be stored into the project file (AMF, 3MF, Config ...)
// and it contains a sum of "inherits" values over the print and filament profiles.
def = this - > add ( " inherits_group " , coStrings ) ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " interface_shells " , coBool ) ;
//def->label = L("Interface shells");
def - > label = L ( " Interface shells " ) ;
def - > tooltip = L ( " Force the generation of solid shells between adjacent materials/volumes. "
" Useful for multi-extruder prints with translucent materials or manual soluble "
" support material " ) ;
def - > category = L ( " Quality " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " mmu_segmented_region_max_width " , coFloat ) ;
def - > label = L ( " Maximum width of a segmented region " ) ;
def - > tooltip = L ( " Maximum width of a segmented region. Zero disables this feature. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > category = L ( " Advanced " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " mmu_segmented_region_interlocking_depth " , coFloat ) ;
def - > label = L ( " Interlocking depth of a segmented region " ) ;
//def->tooltip = L("Interlocking depth of a segmented region. It will be ignored if "
// "\"mmu_segmented_region_max_width\" is zero or if \"mmu_segmented_region_interlocking_depth\""
// "is bigger then \"mmu_segmented_region_max_width\". Zero disables this feature.");
def - > tooltip = L ( " Interlocking depth of a segmented region. Zero disables this feature. " ) ;
def - > sidetext = L ( " mm " ) ; //(zero to disable)
def - > min = 0 ;
def - > category = L ( " Advanced " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " ironing_type " , coEnum ) ;
def - > label = L ( " Ironing Type " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Ironing is using small flow to print on same height of surface again to make flat surface more smooth. "
" This setting controls which layer being ironed " ) ;
def - > enum_keys_map = & ConfigOptionEnum < IroningType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " no ironing " ) ;
def - > enum_values . push_back ( " top " ) ;
def - > enum_values . push_back ( " topmost " ) ;
def - > enum_values . push_back ( " solid " ) ;
def - > enum_labels . push_back ( L ( " No ironing " ) ) ;
def - > enum_labels . push_back ( L ( " Top surfaces " ) ) ;
def - > enum_labels . push_back ( L ( " Topmost surface " ) ) ;
def - > enum_labels . push_back ( L ( " All solid layer " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < IroningType > ( IroningType : : NoIroning ) ) ;
def = this - > add ( " ironing_pattern " , coEnum ) ;
def - > label = L ( " Ironing Pattern " ) ;
def - > category = L ( " Quality " ) ;
def - > enum_keys_map = & ConfigOptionEnum < InfillPattern > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " concentric " ) ;
def - > enum_values . push_back ( " zig-zag " ) ;
def - > enum_labels . push_back ( L ( " Concentric " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < InfillPattern > ( ipRectilinear ) ) ;
def = this - > add ( " ironing_flow " , coPercent ) ;
def - > label = L ( " Ironing flow " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " The amount of material to extrude during ironing. Relative to flow of normal layer height. "
" Too high value results in overextrusion on the surface " ) ;
def - > sidetext = " % " ;
def - > ratio_over = " layer_height " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercent ( 10 ) ) ;
def = this - > add ( " ironing_spacing " , coFloat ) ;
def - > label = L ( " Ironing line spacing " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " The distance between the lines of ironing " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.1 ) ) ;
def = this - > add ( " ironing_speed " , coFloat ) ;
def - > label = L ( " Ironing speed " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Print speed of ironing lines " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 20 ) ) ;
def = this - > add ( " ironing_direction " , coFloat ) ;
def - > label = L ( " ironing direction " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Angle for ironing, which controls the relative angle between the top surface and ironing " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > max = 360 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 45 ) ) ;
def = this - > add ( " layer_change_gcode " , coString ) ;
def - > label = L ( " Layer change G-code " ) ;
def - > tooltip = L ( " This gcode part is inserted at every layer change after lift z " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 5 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " time_lapse_gcode " , coString ) ;
def - > label = L ( " Time lapse G-code " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 5 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " silent_mode " , coBool ) ;
def - > label = L ( " Supports silent mode " ) ;
def - > tooltip = L ( " Whether the machine supports silent mode in which machine use lower acceleration to print " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " machine_pause_gcode " , coString ) ;
def - > label = L ( " Pause G-code " ) ;
def - > tooltip = L ( " This G-code will be used as a code for the pause print. User can insert pause G-code in gcode viewer " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " template_custom_gcode " , coString ) ;
def - > label = L ( " Custom G-code " ) ;
def - > tooltip = L ( " This G-code will be used as a custom code " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " has_scarf_joint_seam " , coBool ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
{
struct AxisDefault {
std : : string name ;
std : : vector < double > max_feedrate ;
std : : vector < double > max_acceleration ;
std : : vector < double > max_jerk ;
} ;
std : : vector < AxisDefault > axes {
// name, max_feedrate, max_acceleration, max_jerk
{ " x " , { 500. , 200. } , { 1000. , 1000. } , { 10. , 10. } } ,
{ " y " , { 500. , 200. } , { 1000. , 1000. } , { 10. , 10. } } ,
{ " z " , { 12. , 12. } , { 500. , 200. } , { 0.2 , 0.4 } } ,
{ " e " , { 120. , 120. } , { 5000. , 5000. } , { 2.5 , 2.5 } }
} ;
for ( const AxisDefault & axis : axes ) {
std : : string axis_upper = boost : : to_upper_copy < std : : string > ( axis . name ) ;
// Add the machine feedrate limits for XYZE axes. (M203)
def = this - > add ( " machine_max_speed_ " + axis . name , coFloats ) ;
def - > full_label = ( boost : : format ( " Maximum speed %1% " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum speed X " ) ;
( void ) L ( " Maximum speed Y " ) ;
( void ) L ( " Maximum speed Z " ) ;
( void ) L ( " Maximum speed E " ) ;
def - > category = L ( " Machine limits " ) ;
def - > readonly = false ;
def - > tooltip = ( boost : : format ( " Maximum speed of %1% axis " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum X speed " ) ;
( void ) L ( " Maximum Y speed " ) ;
( void ) L ( " Maximum Z speed " ) ;
( void ) L ( " Maximum E speed " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats ( axis . max_feedrate ) ) ;
// Add the machine acceleration limits for XYZE axes (M201)
def = this - > add ( " machine_max_acceleration_ " + axis . name , coFloats ) ;
def - > full_label = ( boost : : format ( " Maximum acceleration %1% " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum acceleration X " ) ;
( void ) L ( " Maximum acceleration Y " ) ;
( void ) L ( " Maximum acceleration Z " ) ;
( void ) L ( " Maximum acceleration E " ) ;
def - > category = L ( " Machine limits " ) ;
def - > readonly = false ;
def - > tooltip = ( boost : : format ( " Maximum acceleration of the %1% axis " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum acceleration of the X axis " ) ;
( void ) L ( " Maximum acceleration of the Y axis " ) ;
( void ) L ( " Maximum acceleration of the Z axis " ) ;
( void ) L ( " Maximum acceleration of the E axis " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats ( axis . max_acceleration ) ) ;
// Add the machine jerk limits for XYZE axes (M205)
def = this - > add ( " machine_max_jerk_ " + axis . name , coFloats ) ;
def - > full_label = ( boost : : format ( " Maximum jerk %1% " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum jerk X " ) ;
( void ) L ( " Maximum jerk Y " ) ;
( void ) L ( " Maximum jerk Z " ) ;
( void ) L ( " Maximum jerk E " ) ;
def - > category = L ( " Machine limits " ) ;
def - > readonly = false ;
def - > tooltip = ( boost : : format ( " Maximum jerk of the %1% axis " ) % axis_upper ) . str ( ) ;
( void ) L ( " Maximum jerk of the X axis " ) ;
( void ) L ( " Maximum jerk of the Y axis " ) ;
( void ) L ( " Maximum jerk of the Z axis " ) ;
( void ) L ( " Maximum jerk of the E axis " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats ( axis . max_jerk ) ) ;
}
}
// M205 S... [mm/sec]
def = this - > add ( " machine_min_extruding_rate " , coFloats ) ;
def - > full_label = L ( " Minimum speed for extruding " ) ;
def - > category = L ( " Machine limits " ) ;
def - > tooltip = L ( " Minimum speed for extruding (M205 S) " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 0. , 0. } ) ;
// M205 T... [mm/sec]
def = this - > add ( " machine_min_travel_rate " , coFloats ) ;
def - > full_label = L ( " Minimum travel speed " ) ;
def - > category = L ( " Machine limits " ) ;
def - > tooltip = L ( " Minimum travel speed (M205 T) " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 0. , 0. } ) ;
// M204 P... [mm/sec^2]
def = this - > add ( " machine_max_acceleration_extruding " , coFloats ) ;
def - > full_label = L ( " Maximum acceleration for extruding " ) ;
def - > category = L ( " Machine limits " ) ;
def - > tooltip = L ( " Maximum acceleration for extruding (M204 P) " ) ;
// "Marlin (legacy) firmware flavor will use this also "
// "as travel acceleration (M204 T).");
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > readonly = false ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats { 1500. , 1250. } ) ;
// M204 R... [mm/sec^2]
def = this - > add ( " machine_max_acceleration_retracting " , coFloats ) ;
def - > full_label = L ( " Maximum acceleration for retracting " ) ;
def - > category = L ( " Machine limits " ) ;
def - > tooltip = L ( " Maximum acceleration for retracting (M204 R) " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > readonly = false ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats { 1500. , 1250. } ) ;
// M204 T... [mm/sec^2]
def = this - > add ( " machine_max_acceleration_travel " , coFloats ) ;
def - > full_label = L ( " Maximum acceleration for travel " ) ;
def - > category = L ( " Machine limits " ) ;
def - > tooltip = L ( " Maximum acceleration for travel (M204 T) " ) ;
def - > sidetext = " mm/s² " ;
def - > min = 0 ;
def - > readonly = true ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 1500. , 1250. } ) ;
def = this - > add ( " fan_max_speed " , coInts ) ;
def - > label = L ( " Fan speed " ) ;
def - > tooltip = L ( " Part cooling fan speed may be increased when auto cooling is enabled. "
" This is the maximum speed limitation of part cooling fan " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 100 } ) ;
def = this - > add ( " max_layer_height " , coFloats ) ;
def - > label = L ( " Max " ) ;
def - > tooltip = L ( " The largest printable layer height for extruder. Used to limit "
" the maximum layer height when enable adaptive layer height " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
# ifdef HAS_PRESSURE_EQUALIZER
//def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat);
//def->label = L("Max volumetric slope positive");
//def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
// "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
// "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
// "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
//def->sidetext = L("mm³/s²");
//def->min = 0;
//def->mode = comAdvanced;
//def->set_default_value(new ConfigOptionFloat(0));
//def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat);
//def->label = L("Max volumetric slope negative");
//def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
// "A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
// "of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
// "to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
//def->sidetext = L("mm³/s²");
//def->min = 0;
//def->mode = comAdvanced;
//def->set_default_value(new ConfigOptionFloat(0));
# endif /* HAS_PRESSURE_EQUALIZER */
def = this - > add ( " fan_min_speed " , coInts ) ;
def - > label = L ( " Fan speed " ) ;
def - > tooltip = L ( " Minimum speed for part cooling fan " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 20 } ) ;
def = this - > add ( " additional_cooling_fan_speed " , coInts ) ;
def - > label = L ( " Fan speed " ) ;
def - > tooltip = L ( " Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers "
" which are defined by no cooling layers " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " min_layer_height " , coFloats ) ;
def - > label = L ( " Min " ) ;
def - > tooltip = L ( " The lowest printable layer height for extruder. Used to limit "
" the minimum layer height when enable adaptive layer height " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0.07 } ) ;
def = this - > add ( " slow_down_min_speed " , coFloats ) ;
def - > label = L ( " Min print speed " ) ;
def - > tooltip = L ( " The minimum printing speed when slow down for cooling " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 10. } ) ;
def = this - > add ( " nozzle_diameter " , coFloats ) ;
def - > label = L ( " Nozzle diameter " ) ;
def - > tooltip = L ( " Diameter of nozzle " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > max = 1.0 ;
def - > set_default_value ( new ConfigOptionFloats { 0.4 } ) ;
def = this - > add ( " host_type " , coEnum ) ;
def - > label = L ( " Host Type " ) ;
def - > tooltip = L ( " Slic3r can upload G-code files to a printer host. This field must contain "
" the kind of the host. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < PrintHostType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " prusalink " ) ;
def - > enum_values . push_back ( " octoprint " ) ;
def - > enum_values . push_back ( " duet " ) ;
def - > enum_values . push_back ( " flashair " ) ;
def - > enum_values . push_back ( " astrobox " ) ;
def - > enum_values . push_back ( " repetier " ) ;
def - > enum_values . push_back ( " mks " ) ;
def - > enum_labels . push_back ( " PrusaLink " ) ;
def - > enum_labels . push_back ( " OctoPrint " ) ;
def - > enum_labels . push_back ( " Duet " ) ;
def - > enum_labels . push_back ( " FlashAir " ) ;
def - > enum_labels . push_back ( " AstroBox " ) ;
def - > enum_labels . push_back ( " Repetier " ) ;
def - > enum_labels . push_back ( " MKS " ) ;
def - > mode = comAdvanced ;
def - > cli = ConfigOptionDef : : nocli ;
def - > set_default_value ( new ConfigOptionEnum < PrintHostType > ( htOctoPrint ) ) ;
def = this - > add ( " nozzle_volume " , coFloat ) ;
def - > label = L ( " Nozzle volume " ) ;
def - > tooltip = L ( " Volume of nozzle between the cutter and the end of nozzle " ) ;
def - > sidetext = L ( " mm³ " ) ;
def - > mode = comAdvanced ;
def - > readonly = true ;
def - > set_default_value ( new ConfigOptionFloat { 0.0 } ) ;
def = this - > add ( " start_end_points " , coPoints ) ;
def - > label = L ( " Start end points " ) ;
def - > tooltip = L ( " The start and end points which are from cutter area to garbage can. " ) ;
def - > mode = comDevelop ;
def - > readonly = true ;
// start and end point is from the change_filament_gcode
def - > set_default_value ( new ConfigOptionPoints { Vec2d ( 30 , - 3 ) , Vec2d ( 54 , 245 ) } ) ;
def = this - > add ( " reduce_infill_retraction " , coBool ) ;
def - > label = L ( " Reduce infill retraction " ) ;
def - > tooltip = L ( " Don't retract when the travel is in infill area absolutely. That means the oozing can't been seen. "
" This can reduce times of retraction for complex model and save printing time, but make slicing and "
" G-code generating slower " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " ooze_prevention " , coBool ) ;
def - > label = L ( " Enable " ) ;
//def->tooltip = L("This option will drop the temperature of the inactive extruders to prevent oozing. "
// "It will enable a tall skirt automatically and move extruders outside such "
// "skirt when changing temperatures.");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " filename_format " , coString ) ;
def - > label = L ( " Filename format " ) ;
def - > tooltip = L ( " User can self-define the project file name when export " ) ;
def - > full_width = true ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionString ( " [input_filename_base].gcode " ) ) ;
def = this - > add ( " detect_overhang_wall " , coBool ) ;
def - > label = L ( " Detect overhang wall " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Detect the overhang percentage relative to line width and use different speed to print. "
" For 100 percent overhang, bridge speed is used. " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " smooth_speed_discontinuity_area " , coBool ) ;
def - > label = L ( " Smooth speed discontinuity area " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Add the speed transition between discontinuity area. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " smooth_coefficient " , coFloat ) ;
def - > label = L ( " Smooth coefficient " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " The smaller the number, the longer the speed transition path. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 80 ) ) ;
def = this - > add ( " wall_filament " , coInt ) ;
//def->label = L("Walls");
//def->category = L("Extruders");
//def->tooltip = L("Filament to print walls");
def - > label = " Walls " ;
def - > category = " Extruders " ;
def - > tooltip = " Filament to print walls " ;
def - > min = 1 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " inner_wall_line_width " , coFloat ) ;
def - > label = L ( " Inner wall step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of inner wall " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " inner_wall_speed " , coFloat ) ;
def - > label = L ( " Inner wall print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of inner wall " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > aliases = { " perimeter_feed_rate " } ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 60 ) ) ;
def = this - > add ( " wall_loops " , coInt ) ;
def - > label = L ( " Wall loops " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Number of walls of every layer " ) ;
def - > min = 0 ;
def - > max = 1000 ;
def - > set_default_value ( new ConfigOptionInt ( 2 ) ) ;
def = this - > add ( " post_process " , coStrings ) ;
def - > label = L ( " Post-processing Scripts " ) ;
def - > tooltip = L ( " If you want to process the output G-code through custom scripts, "
" just list their absolute paths here. Separate multiple scripts with a semicolon. "
" Scripts will be passed the absolute path to the G-code file as the first argument, "
" and variables of settings also can be read " ) ;
def - > gui_flags = " serialized " ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 6 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " printer_model " , coString ) ;
//def->label = L("Printer type");
//def->tooltip = L("Type of the printer");
def - > label = " Printer type " ;
def - > tooltip = " Type of the printer " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " printer_variant " , coString ) ;
//def->label = L("Printer variant");
def - > label = " Printer variant " ;
//def->tooltip = L("Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter.");
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " print_settings_id " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
//BBS: open this option to command line
//def->cli = ConfigOptionDef::nocli;
def = this - > add ( " printer_settings_id " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
//BBS: open this option to command line
//def->cli = ConfigOptionDef::nocli;
def = this - > add ( " raft_contact_distance " , coFloat ) ;
def - > label = L ( " Raft contact Z distance " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Z gap between object and raft. Ignored for soluble interface " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.1 ) ) ;
def = this - > add ( " raft_expansion " , coFloat ) ;
def - > label = L ( " Raft expansion " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Expand all raft layers in XY plane " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1.5 ) ) ;
def = this - > add ( " raft_first_layer_density " , coPercent ) ;
def - > label = L ( " Initial layer density " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Density of the first raft or support layer " ) ;
def - > sidetext = " % " ;
def - > min = 10 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercent ( 90 ) ) ;
def = this - > add ( " raft_first_layer_expansion " , coFloat ) ;
def - > label = L ( " Initial layer expansion " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Expand the first raft or support layer to improve bed plate adhesion " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
//BBS: change from 3.0 to 2.0
def - > set_default_value ( new ConfigOptionFloat ( 2.0 ) ) ;
def = this - > add ( " raft_layers " , coInt ) ;
def - > label = L ( " Raft layers " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Object will be raised by this number of support layers. "
" Use this function to avoid wrapping when print ABS " ) ;
def - > sidetext = L ( " layers " ) ;
def - > min = 0 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " resolution " , coFloat ) ;
def - > label = L ( " Resolution " ) ;
def - > tooltip = L ( " G-code path is generated after simplifying the contour of model to avoid too many points and gcode lines "
" in the gcode file. Smaller value means higher resolution and more time to slice " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.01 ) ) ;
def = this - > add ( " retraction_minimum_travel " , coFloats ) ;
def - > label = L ( " Travel distance threshold " ) ;
def - > tooltip = L ( " Only trigger retraction when the travel distance is longer than this threshold " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 2. } ) ;
def = this - > add ( " retract_before_wipe " , coPercents ) ;
def - > label = L ( " Retract amount before wipe " ) ;
def - > tooltip = L ( " The length of fast retraction before wipe, relative to retraction length " ) ;
def - > sidetext = " % " ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercents { 100 } ) ;
def = this - > add ( " retract_when_changing_layer " , coBools ) ;
def - > label = L ( " Retract when change layer " ) ;
def - > tooltip = L ( " Force a retraction when changes layer " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " retraction_length " , coFloats ) ;
def - > label = L ( " Length " ) ;
def - > full_label = L ( " Retraction Length " ) ;
def - > tooltip = L ( " Some amount of material in extruder is pulled back to avoid ooze during long travel. "
" Set zero to disable retraction " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloats { 0.8 } ) ;
def = this - > add ( " enable_long_retraction_when_cut " , coInt ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInt { 0 } ) ;
def = this - > add ( " long_retractions_when_cut " , coBools ) ;
def - > label = L ( " Long retraction when cut(experimental) " ) ;
def - > tooltip = L ( " Experimental feature.Retracting and cutting off the filament at a longer distance during changes to minimize purge. "
" While this reduces flush significantly, it may also raise the risk of nozzle clogs or other printing problems. " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " retraction_distances_when_cut " , coFloats ) ;
def - > label = L ( " Retraction distance when cut " ) ;
def - > tooltip = L ( " Experimental feature.Retraction length before cutting off during filament change " ) ;
def - > mode = comDevelop ;
def - > min = 10 ;
def - > max = 18 ;
def - > set_default_value ( new ConfigOptionFloats { 18 } ) ;
def = this - > add ( " retract_length_toolchange " , coFloats ) ;
def - > label = L ( " Length " ) ;
//def->full_label = L("Retraction Length (Toolchange)");
def - > full_label = " Retraction Length (Toolchange) " ;
//def->tooltip = L("When retraction is triggered before changing tool, filament is pulled back "
// "by the specified amount (the length is measured on raw filament, before it enters "
// "the extruder).");
def - > sidetext = L ( " mm " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 10. } ) ;
def = this - > add ( " z_hop " , coFloats ) ;
def - > label = L ( " Z hop when retract " ) ;
def - > tooltip = L ( " Whenever the retraction is done, the nozzle is lifted a little to create clearance between nozzle and the print. "
" It prevents nozzle from hitting the print when travel moves. "
" Using spiral line to lift z can prevent stringing " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comSimple ;
def - > min = 0 ;
def - > max = 5 ;
def - > set_default_value ( new ConfigOptionFloats { 0.4 } ) ;
def = this - > add ( " retract_lift_above " , coFloats ) ;
def - > label = L ( " Z hop lower boundary " ) ;
def - > tooltip = L ( " Z hop will only come into effect when Z is above this value and is below the parameter: \" Z hop upper boundary \" " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " retract_lift_below " , coFloats ) ;
def - > label = L ( " Z hop upper boundary " ) ;
def - > tooltip = L ( " If this value is positive, Z hop will only come into effect when Z is above the parameter: \" Z hop lower boundary \" and is below this value " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " z_hop_types " , coEnums ) ;
def - > label = L ( " Z Hop Type " ) ;
def - > tooltip = L ( " " ) ;
def - > enum_keys_map = & ConfigOptionEnum < ZHopType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " Auto Lift " ) ;
def - > enum_values . push_back ( " Normal Lift " ) ;
def - > enum_values . push_back ( " Slope Lift " ) ;
def - > enum_values . push_back ( " Spiral Lift " ) ;
def - > enum_labels . push_back ( L ( " Auto " ) ) ;
def - > enum_labels . push_back ( L ( " Normal " ) ) ;
def - > enum_labels . push_back ( L ( " Slope " ) ) ;
def - > enum_labels . push_back ( L ( " Spiral " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnumsGeneric { ZHopType : : zhtSpiral } ) ;
def = this - > add ( " extruder_type " , coEnums ) ;
def - > label = L ( " Type " ) ;
def - > tooltip = ( " This setting is only used for initial value of manual calibration of pressure advance. Bowden extruder usually has larger pa value. This setting doesn't influence normal slicing " ) ;
def - > enum_keys_map = & ConfigOptionEnum < ExtruderType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " DirectDrive " ) ;
def - > enum_values . push_back ( " Bowden " ) ;
def - > enum_labels . push_back ( L ( " Direct drive " ) ) ;
def - > enum_labels . push_back ( L ( " Bowden " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnumsGeneric { ExtruderType : : etDirectDrive } ) ;
def = this - > add ( " retract_restart_extra " , coFloats ) ;
def - > label = L ( " Extra length on restart " ) ;
//def->label = "Extra length on restart";
//def->tooltip = L("When the retraction is compensated after the travel move, the extruder will push "
// "this additional amount of filament. This setting is rarely needed.");
def - > sidetext = L ( " mm " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " retract_restart_extra_toolchange " , coFloats ) ;
def - > label = L ( " Extra length on restart " ) ;
//def->label = "Extra length on restart";
//def->tooltip = L("When the retraction is compensated after changing tool, the extruder will push "
// "this additional amount of filament.");
def - > sidetext = L ( " mm " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " retraction_speed " , coFloats ) ;
def - > label = L ( " Retraction Speed " ) ;
def - > full_label = L ( " Retraction Speed " ) ;
def - > tooltip = L ( " Speed of retractions " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 30. } ) ;
def = this - > add ( " deretraction_speed " , coFloats ) ;
def - > label = L ( " Deretraction Speed " ) ;
def - > full_label = L ( " Deretraction Speed " ) ;
def - > tooltip = L ( " Speed for reloading filament into extruder. Zero means the same speed as retraction " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 0. } ) ;
def = this - > add ( " seam_position " , coEnum ) ;
def - > label = L ( " Seam position " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " The start position to print each part of outer wall " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SeamPosition > : : get_enum_values ( ) ;
//xiamian-
//def->enum_values.push_back("nearest");
def - > enum_values . push_back ( " aligned " ) ;
//def->enum_values.push_back("back");
def - > enum_values . push_back ( " random " ) ;
//def->enum_labels.push_back(L("Nearest"));
def - > enum_labels . push_back ( L ( " Aligned " ) ) ;
//def->enum_labels.push_back(L("Back"));
def - > enum_labels . push_back ( L ( " Random " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < SeamPosition > ( spAligned ) ) ;
def = this - > add ( " seam_gap " , coPercent ) ;
def - > label = L ( " Seam gap " ) ;
def - > tooltip = L ( " In order to reduce the visibility of the seam in a closed loop extrusion, the loop is interrupted and shortened by a specified amount. \n " " This amount as a percentage of the current extruder diameter. The default value for this parameter is 15 " ) ;
def - > sidetext = " % " ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionPercent ( 15 ) ) ;
def = this - > add ( " seam_slope_type " , coEnum ) ;
def - > label = L ( " Scarf joint seam (experimental) " ) ;
def - > tooltip = L ( " Use scarf joint to minimize seam visibility and increase seam strength. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SeamScarfType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " none " ) ;
def - > enum_values . push_back ( " external " ) ;
def - > enum_values . push_back ( " all " ) ;
def - > enum_labels . push_back ( L ( " None " ) ) ;
def - > enum_labels . push_back ( L ( " Contour " ) ) ;
def - > enum_labels . push_back ( L ( " Contour and hole " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SeamScarfType > ( SeamScarfType : : None ) ) ;
def = this - > add ( " seam_slope_conditional " , coBool ) ;
def - > label = L ( " Conditional scarf joint " ) ;
def - > tooltip = L ( " Apply scarf joints only to smooth perimeters where traditional seams do not conceal the seams at sharp corners effectively. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " scarf_angle_threshold " , coInt ) ;
def - > label = L ( " Conditional angle threshold " ) ;
def - > tooltip = L ( " This option sets the threshold angle for applying a conditional scarf joint seam. \n If the seam angle within the perimeter loop " " exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°. " ) ;
def - > mode = comAdvanced ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > max = 180 ;
def - > set_default_value ( new ConfigOptionInt ( 155 ) ) ;
def = this - > add ( " seam_slope_start_height " , coFloatOrPercent ) ;
def - > label = L ( " Scarf start height " ) ;
def - > tooltip = L ( " Start height of the scarf. \n "
" This amount can be specified in millimeters or as a percentage of the current layer height. The default value for this parameter is 0. " ) ;
def - > sidetext = L ( " mm or % " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 50 , true ) ) ;
def = this - > add ( " seam_slope_entire_loop " , coBool ) ;
def - > label = L ( " Scarf around entire wall " ) ;
def - > tooltip = L ( " The scarf extends to the entire length of the wall. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " seam_slope_min_length " , coFloat ) ;
def - > label = L ( " Scarf length " ) ;
def - > tooltip = L ( " Length of the scarf. Setting this parameter to zero effectively disables the scarf. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 10 ) ) ;
def = this - > add ( " seam_slope_steps " , coInt ) ;
def - > label = L ( " Scarf steps " ) ;
def - > tooltip = L ( " Minimum number of segments of each scarf. " ) ;
def - > min = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 10 ) ) ;
def = this - > add ( " seam_slope_inner_walls " , coBool ) ;
def - > label = L ( " Scarf joint for inner walls " ) ;
def - > tooltip = L ( " Use scarf joint for inner walls as well. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " wipe_speed " , coPercent ) ;
def - > label = L ( " Wipe speed " ) ;
def - > tooltip = L ( " The wipe speed is determined by the speed setting specified in this configuration. " " If the value is expressed as a percentage (e.g. 80%), it will be calculated based on the travel speed setting above. " " The default value for this parameter is 80% " ) ;
def - > sidetext = " % " ;
def - > min = 0.01 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionPercent ( 80 ) ) ;
def = this - > add ( " skirt_distance " , coFloat ) ;
def - > label = L ( " Skirt distance " ) ;
def - > tooltip = L ( " Distance from skirt to brim or object " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 55 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 2 ) ) ;
def = this - > add ( " skirt_height " , coInt ) ;
def - > label = L ( " Skirt height " ) ;
//def->label = "Skirt height";
def - > tooltip = L ( " How many layers of skirt. Usually only one layer " ) ;
def - > sidetext = L ( " layers " ) ;
def - > mode = comSimple ;
def - > max = 10000 ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " draft_shield " , coEnum ) ;
//def->label = L("Draft shield");
def - > label = " Draft shield " ;
//def->tooltip = L("With draft shield active, the skirt will be printed skirt_distance from the object, possibly intersecting brim.\n"
// "Enabled = skirt is as tall as the highest printed object.\n"
// "Limited = skirt is as tall as specified by skirt_height.\n"
// "This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft.");
def - > enum_keys_map = & ConfigOptionEnum < DraftShield > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " disabled " ) ;
def - > enum_values . push_back ( " limited " ) ;
def - > enum_values . push_back ( " enabled " ) ;
def - > enum_labels . push_back ( " Disabled " ) ;
def - > enum_labels . push_back ( " Limited " ) ;
def - > enum_labels . push_back ( " Enabled " ) ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionEnum < DraftShield > ( dsDisabled ) ) ;
def = this - > add ( " skirt_loops " , coInt ) ;
def - > label = L ( " Skirt loops " ) ;
def - > full_label = L ( " Skirt loops " ) ;
def - > tooltip = L ( " Number of loops for the skirt. Zero means disabling skirt " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comSimple ;
2025-02-14 08:27:40 +00:00
def - > set_default_value ( new ConfigOptionInt ( 2 ) ) ;
2024-12-20 06:44:50 +00:00
def = this - > add ( " slow_down_layer_time " , coInts ) ;
def - > label = L ( " Layer time " ) ;
def - > tooltip = L ( " The printing speed in exported gcode will be slowed down, when the estimated layer time is shorter than this value, to "
" get better cooling for these layers " ) ;
def - > sidetext = L ( " s " ) ;
def - > min = 0 ;
def - > max = 1000 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInts { 5 } ) ;
def = this - > add ( " minimum_sparse_infill_area " , coFloat ) ;
def - > label = L ( " Minimum sparse infill threshold " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Sparse infill area which is smaller than threshold value is replaced by internal solid infill " ) ;
def - > sidetext = L ( " mm² " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 15 ) ) ;
def = this - > add ( " solid_infill_filament " , coInt ) ;
//def->label = L("Solid infill");
//def->category = L("Extruders");
//def->tooltip = L("Filament to print solid infill");
def - > label = " Solid infill " ;
def - > category = " Extruders " ;
def - > tooltip = " Filament to print solid infill " ;
def - > min = 1 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " internal_solid_infill_line_width " , coFloat ) ;
def - > label = L ( " Internal solid infill " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of internal solid infill " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " internal_solid_infill_speed " , coFloat ) ;
def - > label = L ( " Internal solid infill print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of internal solid infill, not the top and bottom surface " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 100 ) ) ;
def = this - > add ( " spiral_mode " , coBool ) ;
def - > label = L ( " Spiral vase " ) ;
def - > tooltip = L ( " Spiralize smooths out the z moves of the outer contour. "
" And turns a solid model into a single walled print with solid bottom layers. "
" The final generated model has no seam " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " spiral_mode_smooth " , coBool ) ;
def - > label = L ( " Smooth Spiral " ) ;
def - > tooltip = L ( " Smooth Spiral smoothes out X and Y moves as well "
" resulting in no visible seam at all, even in the XY directions on walls that are not vertical " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " spiral_mode_max_xy_smoothing " , coFloatOrPercent ) ;
def - > label = L ( " Max XY Smoothing " ) ;
def - > tooltip = L ( " Maximum distance to move points in XY to try to achieve a smooth spiral "
" If expressed as a %, it will be computed over nozzle diameter " ) ;
def - > sidetext = L ( " mm or % " ) ;
def - > ratio_over = " nozzle_diameter " ;
def - > min = 0 ;
def - > max = 1000 ;
def - > max_literal = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloatOrPercent ( 200 , true ) ) ;
def = this - > add ( " timelapse_type " , coEnum ) ;
def - > label = L ( " Timelapse " ) ;
def - > tooltip = L ( " If smooth or traditional mode is selected, a timelapse video will be generated for each print. "
" After each layer is printed, a snapshot is taken with the chamber camera. "
" All of these snapshots are composed into a timelapse video when printing completes. "
" If smooth mode is selected, the toolhead will move to the excess chute after each layer is printed "
" and then take a snapshot. "
" Since the melt filament may leak from the nozzle during the process of taking a snapshot, "
" prime tower is required for smooth mode to wipe nozzle. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < TimelapseType > : : get_enum_values ( ) ;
def - > enum_values . emplace_back ( " 0 " ) ;
def - > enum_values . emplace_back ( " 1 " ) ;
def - > enum_labels . emplace_back ( L ( " Traditional " ) ) ;
def - > enum_labels . emplace_back ( L ( " Smooth " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < TimelapseType > ( tlTraditional ) ) ;
def = this - > add ( " standby_temperature_delta " , coInt ) ;
def - > label = L ( " Temperature variation " ) ;
//def->tooltip = L("Temperature difference to be applied when an extruder is not active. "
// "Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped.");
def - > sidetext = " ∆°C " ;
def - > min = - max_temp ;
def - > max = max_temp ;
//BBS
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInt ( - 5 ) ) ;
def = this - > add ( " machine_start_gcode " , coString ) ;
def - > label = L ( " Start G-code " ) ;
def - > tooltip = L ( " Start G-code when start the whole printing " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " G28 ; home all axes \n G1 Z5 F5000 ; lift nozzle \n " ) ) ;
def = this - > add ( " filament_start_gcode " , coStrings ) ;
def - > label = L ( " Start G-code " ) ;
def - > tooltip = L ( " Start G-code when start the printing of this filament " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 12 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionStrings { " " } ) ;
def = this - > add ( " single_extruder_multi_material " , coBool ) ;
//def->label = L("Single Extruder Multi Material");
//def->tooltip = L("Use single nozzle to print multi filament");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " wipe_tower_no_sparse_layers " , coBool ) ;
//def->label = L("No sparse layers (EXPERIMENTAL)");
//def->tooltip = L("If enabled, the wipe tower will not be printed on layers with no toolchanges. "
// "On layers with a toolchange, extruder will travel downward to print the wipe tower. "
// "User is responsible for ensuring there is no collision with the print.");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " slice_closing_radius " , coFloat ) ;
def - > label = L ( " Slice gap closing radius " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. "
" The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.049 ) ) ;
def = this - > add ( " slicing_mode " , coEnum ) ;
def - > label = L ( " Slicing Mode " ) ;
def - > category = L ( " Other " ) ;
def - > tooltip = L ( " Use \" Even-odd \" for 3DLabPrint airplane models. Use \" Close holes \" to close all holes in the model. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SlicingMode > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " regular " ) ;
def - > enum_values . push_back ( " even_odd " ) ;
def - > enum_values . push_back ( " close_holes " ) ;
def - > enum_labels . push_back ( L ( " Regular " ) ) ;
def - > enum_labels . push_back ( L ( " Even-odd " ) ) ;
def - > enum_labels . push_back ( L ( " Close holes " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SlicingMode > ( SlicingMode : : Regular ) ) ;
def = this - > add ( " enable_support " , coBool ) ;
//BBS: remove material behind support
def - > label = L ( " Enable support " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Enable support generation. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " support_type " , coEnum ) ;
def - > label = L ( " Type " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " normal(auto) and tree(auto) is used to generate support automatically. "
" If normal(manual) or tree(manual) is selected, only support enforcers are generated " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SupportType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " normal(auto) " ) ;
def - > enum_values . push_back ( " tree(auto) " ) ;
def - > enum_values . push_back ( " normal(manual) " ) ;
def - > enum_values . push_back ( " tree(manual) " ) ;
def - > enum_labels . push_back ( L ( " normal(auto) " ) ) ;
def - > enum_labels . push_back ( L ( " tree(auto) " ) ) ;
def - > enum_labels . push_back ( L ( " normal(manual) " ) ) ;
def - > enum_labels . push_back ( L ( " tree(manual) " ) ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionEnum < SupportType > ( stNormalAuto ) ) ;
def = this - > add ( " support_object_xy_distance " , coFloat ) ;
def - > label = L ( " Support/object xy distance " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " XY separation between an object and its support " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
//Support with too small spacing may touch the object and difficult to remove.
def - > set_default_value ( new ConfigOptionFloat ( 0.35 ) ) ;
def = this - > add ( " support_object_first_layer_gap " , coFloat ) ;
def - > label = L ( " Support/object first layer gap " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " XY separation between an object and its support at the first layer. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
//Support with too small spacing may touch the object and difficult to remove.
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
def = this - > add ( " support_angle " , coFloat ) ;
def - > label = L ( " Pattern angle " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Use this setting to rotate the support pattern on the horizontal plane. " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > max = 359 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " support_on_build_plate_only " , coBool ) ;
def - > label = L ( " On build plate only " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Don't create support on model surface, only on build plate " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
// BBS
def = this - > add ( " support_critical_regions_only " , coBool ) ;
def - > label = L ( " Support critical regions only " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Only create support for critical regions including sharp tail, cantilever, etc. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " support_remove_small_overhang " , coBool ) ;
def - > label = L ( " Remove small overhangs " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Remove small overhangs that possibly need no supports. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
// BBS: change type to common float.
// It may be rounded to mulitple layer height when independent_support_layer_height is false.
def = this - > add ( " support_top_z_distance " , coFloat ) ;
//def->gui_type = ConfigOptionDef::GUIType::f_enum_open;
def - > label = L ( " Top Z distance " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " The z gap between the top support interface and object " ) ;
def - > sidetext = L ( " mm " ) ;
// def->min = 0;
#if 0
//def->enum_values.push_back("0");
//def->enum_values.push_back("0.1");
//def->enum_values.push_back("0.2");
//def->enum_labels.push_back(L("0 (soluble)"));
//def->enum_labels.push_back(L("0.1 (semi-detachable)"));
//def->enum_labels.push_back(L("0.2 (detachable)"));
# endif
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
// BBS:MusangKing
def = this - > add ( " support_bottom_z_distance " , coFloat ) ;
def - > label = L ( " Bottom Z distance " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " The z gap between the bottom support interface and object " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
def = this - > add ( " enforce_support_layers " , coInt ) ;
//def->label = L("Enforce support for the first");
def - > category = L ( " Support " ) ;
//def->tooltip = L("Generate support material for the specified number of layers counting from bottom, "
// "regardless of whether normal support material is enabled or not and regardless "
// "of any angle threshold. This is useful for getting more adhesion of objects "
// "having a very thin or poor footprint on the build plate.");
def - > sidetext = L ( " layers " ) ;
//def->full_label = L("Enforce support for the first n layers");
def - > min = 0 ;
def - > max = 5000 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " support_filament " , coInt ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : i_enum_open ;
def - > label = L ( " Support/raft base " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Filament to print support base and raft. \" Default \" means no specific filament for support and current filament is used " ) ;
def - > min = 0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " support_interface_not_for_body " , coBool ) ;
def - > label = L ( " Avoid interface filament for base " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Avoid using support interface filament to print support base if possible. " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " support_line_width " , coFloat ) ;
def - > label = L ( " Support step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width of support " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " support_interface_loop_pattern " , coBool ) ;
def - > label = L ( " Interface use loop pattern " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Cover the top contact layer of the supports with loops. Disabled by default. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " support_interface_filament " , coInt ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : i_enum_open ;
def - > label = L ( " Support/raft interface " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Filament to print support interface. \" Default \" means no specific filament for support interface and current filament is used " ) ;
def - > min = 0 ;
// BBS
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
auto support_interface_top_layers = def = this - > add ( " support_interface_top_layers " , coInt ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : i_enum_open ;
def - > label = L ( " Top interface layers " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Number of top interface layers " ) ;
def - > sidetext = L ( " layers " ) ;
def - > min = 0 ;
def - > enum_values . push_back ( " 0 " ) ;
def - > enum_values . push_back ( " 1 " ) ;
def - > enum_values . push_back ( " 2 " ) ;
def - > enum_values . push_back ( " 3 " ) ;
def - > enum_labels . push_back ( " 0 " ) ;
def - > enum_labels . push_back ( " 1 " ) ;
def - > enum_labels . push_back ( " 2 " ) ;
def - > enum_labels . push_back ( " 3 " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 3 ) ) ;
def = this - > add ( " support_interface_bottom_layers " , coInt ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : i_enum_open ;
def - > label = L ( " Bottom interface layers " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Number of bottom interface layers " ) ;
def - > sidetext = L ( " layers " ) ;
def - > min = - 1 ;
def - > enum_values . push_back ( " -1 " ) ;
append ( def - > enum_values , support_interface_top_layers - > enum_values ) ;
def - > enum_labels . push_back ( L ( " Same as top " ) ) ;
append ( def - > enum_labels , support_interface_top_layers - > enum_labels ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " support_interface_spacing " , coFloat ) ;
def - > label = L ( " Top interface spacing " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Spacing of interface lines. Zero means solid interface " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.5 ) ) ;
//BBS
def = this - > add ( " support_bottom_interface_spacing " , coFloat ) ;
def - > label = L ( " Bottom interface spacing " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Spacing of bottom interface lines. Zero means solid interface " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 0.5 ) ) ;
def = this - > add ( " support_interface_speed " , coFloat ) ;
def - > label = L ( " Support interface " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of support interface " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 80 ) ) ;
def = this - > add ( " support_base_pattern " , coEnum ) ;
def - > label = L ( " Base pattern " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Line pattern of support " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SupportMaterialPattern > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " default " ) ;
def - > enum_values . push_back ( " rectilinear " ) ;
def - > enum_values . push_back ( " rectilinear-grid " ) ;
def - > enum_values . push_back ( " honeycomb " ) ;
def - > enum_values . push_back ( " lightning " ) ;
def - > enum_values . push_back ( " hollow " ) ;
def - > enum_labels . push_back ( L ( " Default " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear grid " ) ) ;
def - > enum_labels . push_back ( L ( " Honeycomb " ) ) ;
def - > enum_labels . push_back ( L ( " Lightning " ) ) ;
def - > enum_labels . push_back ( L ( " Hollow " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SupportMaterialPattern > ( smpDefault ) ) ;
def = this - > add ( " support_interface_pattern " , coEnum ) ;
def - > label = L ( " Interface pattern " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Line pattern of support interface. "
" Default pattern for non-soluble support interface is Rectilinear, "
" while default pattern for soluble support interface is Concentric " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SupportMaterialInterfacePattern > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " auto " ) ;
def - > enum_values . push_back ( " rectilinear " ) ;
def - > enum_values . push_back ( " concentric " ) ;
def - > enum_values . push_back ( " rectilinear_interlaced " ) ;
def - > enum_values . push_back ( " grid " ) ;
def - > enum_labels . push_back ( L ( " Default " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear " ) ) ;
def - > enum_labels . push_back ( L ( " Concentric " ) ) ;
def - > enum_labels . push_back ( L ( " Rectilinear Interlaced " ) ) ;
def - > enum_labels . push_back ( L ( " Grid " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SupportMaterialInterfacePattern > ( smipAuto ) ) ;
def = this - > add ( " support_base_pattern_spacing " , coFloat ) ;
def - > label = L ( " Base pattern spacing " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Spacing between support lines " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 2.5 ) ) ;
def = this - > add ( " support_expansion " , coFloat ) ;
def - > label = L ( " Normal Support expansion " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Expand (+) or shrink (-) the horizontal span of normal support " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " support_speed " , coFloat ) ;
def - > label = L ( " Support " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of support " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 80 ) ) ;
def = this - > add ( " support_style " , coEnum ) ;
def - > label = L ( " Style " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Style and shape of the support. For normal support, projecting the supports into a regular grid "
" will create more stable supports (default), while snug support towers will save material and reduce "
" object scarring. \n "
" For tree support, slim style will merge branches more aggressively and save "
" a lot of material, strong style will make larger and stronger support structure and use more materials, "
" while hybrid style is the combination of slim tree and normal support with normal nodes "
" under large flat overhangs (default). " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SupportMaterialStyle > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " default " ) ;
def - > enum_values . push_back ( " grid " ) ;
def - > enum_values . push_back ( " snug " ) ;
def - > enum_values . push_back ( " tree_slim " ) ;
def - > enum_values . push_back ( " tree_strong " ) ;
def - > enum_values . push_back ( " tree_hybrid " ) ;
def - > enum_values . push_back ( " tree_organic " ) ;
def - > enum_labels . push_back ( L ( " Default " ) ) ;
def - > enum_labels . push_back ( L ( " Grid " ) ) ;
def - > enum_labels . push_back ( L ( " Snug " ) ) ;
def - > enum_labels . push_back ( L ( " Tree Slim " ) ) ;
def - > enum_labels . push_back ( L ( " Tree Strong " ) ) ;
def - > enum_labels . push_back ( L ( " Tree Hybrid " ) ) ;
def - > enum_labels . push_back ( L ( " Tree Organic " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SupportMaterialStyle > ( smsDefault ) ) ;
def = this - > add ( " independent_support_layer_height " , coBool ) ;
def - > label = L ( " Independent support layer height " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Support layer uses layer height independent with object layer. This is to support customizing z-gap and save print time. "
" This option will be invalid when the prime tower is enabled. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " support_threshold_angle " , coInt ) ;
def - > label = L ( " Threshold angle " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " Support will be generated for overhangs whose slope angle is below the threshold. " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 1 ;
def - > max = 90 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionInt ( 30 ) ) ;
def = this - > add ( " tree_support_branch_angle " , coFloat ) ;
def - > label = L ( " Tree support branch angle " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " This setting determines the maximum overhang angle that t he branches of tree support allowed to make. "
" If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther. " ) ;
def - > sidetext = L ( " ° " ) ;
def - > min = 0 ;
def - > max = 60 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 40. ) ) ;
def = this - > add ( " tree_support_branch_distance " , coFloat ) ;
def - > label = L ( " Tree support branch distance " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " This setting determines the distance between neighboring tree support nodes. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 1.0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 5. ) ) ;
def = this - > add ( " tree_support_branch_diameter " , coFloat ) ;
def - > label = L ( " Tree support branch diameter " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " This setting determines the initial diameter of support nodes. " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 1.0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 5. ) ) ;
def = this - > add ( " tree_support_wall_count " , coInt ) ;
def - > label = L ( " Support wall loops " ) ;
def - > category = L ( " Support " ) ;
def - > tooltip = L ( " This setting specifies the count of walls around support " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " chamber_temperatures " , coInts ) ;
def - > label = L ( " Chamber temperature " ) ;
def - > tooltip = L ( " Higher chamber temperature can help suppress or reduce warping and potentially lead to higher interlayer bonding strength for high temperature materials like ABS, ASA, PC, PA and so on. "
" At the same time, the air filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and other low temperature materials, "
" the actual chamber temperature should not be high to avoid cloggings, so 0 which stands for turning off is highly recommended "
) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Chamber temperature " ) ;
def - > min = 0 ;
def - > max = 60 ;
def - > set_default_value ( new ConfigOptionInts { 0 } ) ;
def = this - > add ( " nozzle_temperature " , coInts ) ;
def - > label = L ( " Other layers " ) ;
def - > tooltip = L ( " Nozzle temperature for layers after the initial one " ) ;
def - > sidetext = " °C " ;
def - > full_label = L ( " Nozzle temperature " ) ;
def - > min = 0 ;
def - > max = max_temp ;
def - > set_default_value ( new ConfigOptionInts { 200 } ) ;
def = this - > add ( " nozzle_temperature_range_low " , coInts ) ;
def - > label = L ( " Min " ) ;
//def->tooltip = "";
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = max_temp ;
def - > set_default_value ( new ConfigOptionInts { 190 } ) ;
def = this - > add ( " nozzle_temperature_range_high " , coInts ) ;
def - > label = L ( " Max " ) ;
//def->tooltip = "";
def - > sidetext = " °C " ;
def - > min = 0 ;
def - > max = max_temp ;
def - > set_default_value ( new ConfigOptionInts { 240 } ) ;
def = this - > add ( " head_wrap_detect_zone " , coPoints ) ;
def - > label = " Head wrap detect zone " ; //do not need translation
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionPoints { } ) ;
def = this - > add ( " detect_thin_wall " , coBool ) ;
def - > label = L ( " Detect thin wall " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " Detect thin wall which can't contain two line width. And use single line to print. "
" Maybe printed not very well, because it's not closed loop " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " change_filament_gcode " , coString ) ;
def - > label = L ( " Change filament G-code " ) ;
def - > tooltip = L ( " This gcode is inserted when change filament, including T command to trigger tool change " ) ;
def - > multiline = true ;
def - > full_width = true ;
def - > height = 5 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def = this - > add ( " top_surface_line_width " , coFloat ) ;
def - > label = L ( " Top surface step " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Line width for top surfaces " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " top_surface_speed " , coFloat ) ;
def - > label = L ( " Top surface print speed " ) ;
def - > category = L ( " Speed " ) ;
def - > tooltip = L ( " Speed of top surface infill which is solid " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 100 ) ) ;
def = this - > add ( " top_shell_layers " , coInt ) ;
def - > label = L ( " Top shell layers " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " This is the number of solid layers of top shell, including the top "
" surface layer. When the thickness calculated by this value is thinner "
" than top shell thickness, the top shell layers will be increased " ) ;
def - > full_label = L ( " Top solid layers " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionInt ( 4 ) ) ;
def = this - > add ( " top_shell_thickness " , coFloat ) ;
def - > label = L ( " Top shell thickness " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is "
" thinner than this value. This can avoid having too thin shell when layer height is small. 0 means that "
" this setting is disabled and thickness of top shell is absolutely determained by top shell layers " ) ;
def - > full_label = L ( " Top shell thickness " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.6 ) ) ;
def = this - > add ( " travel_speed " , coFloat ) ;
def - > label = L ( " Travel speed " ) ;
def - > tooltip = L ( " Speed of travel which is faster and without extrusion " ) ;
def - > sidetext = L ( " mm/s " ) ;
def - > min = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 120 ) ) ;
def = this - > add ( " travel_speed_z " , coFloat ) ;
//def->label = L("Z travel");
//def->tooltip = L("Speed of vertical travel along z axis. "
// "This is typically lower because build plate or gantry is hard to be moved. "
// "Zero means using travel speed directly in gcode, but will be limited by printer's ability when run gcode");
def - > sidetext = L ( " mm/s " ) ;
def - > min = 0 ;
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " use_relative_e_distances " , coBool ) ;
def - > label = L ( " Use relative E distances " ) ;
def - > tooltip = L ( " If your firmware requires relative E values, check this, "
" otherwise leave it unchecked. Must use relative e distance for Bambu printer " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " use_firmware_retraction " , coBool ) ;
def - > label = L ( " Use firmware retraction " ) ;
def - > tooltip = L ( " Convert the retraction moves to G10 and G11 gcode " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " wipe " , coBools ) ;
def - > label = L ( " Wipe while retracting " ) ;
def - > tooltip = L ( " Move nozzle along the last extrusion path when retracting to clean leaked material on nozzle. "
" This can minimize blob when printing new part after travel " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBools { false } ) ;
def = this - > add ( " wipe_distance " , coFloats ) ;
def - > label = L ( " Wipe Distance " ) ;
def - > tooltip = L ( " Describe how long the nozzle will move along the last path when retracting " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats { 2. } ) ;
def = this - > add ( " enable_prime_tower " , coBool ) ;
def - > label = L ( " Enable " ) ;
def - > tooltip = L ( " The wiping tower can be used to clean up the residue on the nozzle and stabilize the chamber pressure inside the nozzle, "
" in order to avoid appearance defects when printing objects. " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " flush_volumes_vector " , coFloats ) ;
// BBS: remove _L()
def - > label = ( " Purging volumes - load/unload volumes " ) ;
//def->tooltip = L("This vector saves required volumes to change from/to each tool used on the "
// "wipe tower. These values are used to simplify creation of the full purging "
// "volumes below.");
// BBS: change 70.f => 140.f
def - > set_default_value ( new ConfigOptionFloats { 140.f , 140.f , 140.f , 140.f , 140.f , 140.f , 140.f , 140.f } ) ;
def = this - > add ( " flush_volumes_matrix " , coFloats ) ;
def - > label = L ( " Purging volumes " ) ;
//def->tooltip = L("This matrix describes volumes (in cubic milimetres) required to purge the"
// " new filament on the wipe tower for any given pair of tools.");
// BBS: change 140.f => 280.f
def - > set_default_value ( new ConfigOptionFloats { 0.f , 280.f , 280.f , 280.f ,
280.f , 0.f , 280.f , 280.f ,
280.f , 280.f , 0.f , 280.f ,
280.f , 280.f , 280.f , 0.f } ) ;
def = this - > add ( " flush_multiplier " , coFloat ) ;
def - > label = L ( " Flush multiplier " ) ;
def - > tooltip = L ( " The actual flushing volumes is equal to the flush multiplier multiplied by the flushing volumes in the table. " ) ;
def - > sidetext = " " ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
// BBS
def = this - > add ( " prime_volume " , coFloat ) ;
def - > label = L ( " Prime volume " ) ;
def - > tooltip = L ( " The volume of material to prime extruder on tower. " ) ;
def - > sidetext = L ( " mm³ " ) ;
def - > min = 1.0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 45. ) ) ;
def = this - > add ( " wipe_tower_x " , coFloats ) ;
//def->label = L("Position X");
//def->tooltip = L("X coordinate of the left front corner of a wipe tower");
//def->sidetext = L("mm");
def - > mode = comDevelop ;
// BBS: change data type to floats to add partplate logic
def - > set_default_value ( new ConfigOptionFloats { 15. } ) ;
def = this - > add ( " wipe_tower_y " , coFloats ) ;
//def->label = L("Position Y");
//def->tooltip = L("Y coordinate of the left front corner of a wipe tower");
//def->sidetext = L("mm");
def - > mode = comDevelop ;
// BBS: change data type to floats to add partplate logic
def - > set_default_value ( new ConfigOptionFloats { 220. } ) ;
def = this - > add ( " prime_tower_width " , coFloat ) ;
def - > label = L ( " Width " ) ;
def - > tooltip = L ( " Width of prime tower " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 2.0 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 35. ) ) ;
def = this - > add ( " wipe_tower_rotation_angle " , coFloat ) ;
//def->label = L("Wipe tower rotation angle");
//def->tooltip = L("Wipe tower rotation angle with respect to x-axis.");
//def->sidetext = L("°");
def - > mode = comDevelop ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " prime_tower_brim_width " , coFloat ) ;
def - > label = L ( " Brim width " ) ;
def - > tooltip = L ( " Brim width " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > min = 0. ;
def - > set_default_value ( new ConfigOptionFloat ( 3. ) ) ;
def = this - > add ( " flush_into_infill " , coBool ) ;
def - > category = L ( " Flush options " ) ;
def - > label = L ( " Flush into objects' infill " ) ;
def - > tooltip = L ( " Purging after filament change will be done inside objects' infills. "
" This may lower the amount of waste and decrease the print time. "
" If the walls are printed with transparent filament, the mixed color infill will be seen outside. "
" It will not take effect, unless the prime tower is enabled. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " flush_into_support " , coBool ) ;
def - > category = L ( " Flush options " ) ;
def - > label = L ( " Flush into objects' support " ) ;
def - > tooltip = L ( " Purging after filament change will be done inside objects' support. "
" This may lower the amount of waste and decrease the print time. "
" It will not take effect, unless the prime tower is enabled. " ) ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " flush_into_objects " , coBool ) ;
def - > category = L ( " Flush options " ) ;
def - > label = L ( " Flush into this object " ) ;
def - > tooltip = L ( " This object will be used to purge the nozzle after a filament change to save filament and decrease the print time. "
" Colours of the objects will be mixed as a result. "
" It will not take effect, unless the prime tower is enabled. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
//BBS
//def = this->add("wipe_tower_bridging", coFloat);
//def->label = L("Maximal bridging distance");
//def->tooltip = L("Maximal distance between supports on sparse infill sections.");
//def->sidetext = L("mm");
//def->mode = comAdvanced;
//def->set_default_value(new ConfigOptionFloat(10.));
def = this - > add ( " xy_hole_compensation " , coFloat ) ;
def - > label = L ( " X-Y hole compensation " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Holes of object will be grown or shrunk in XY plane by the configured value. "
" Positive value makes holes bigger. Negative value makes holes smaller. "
" This function is used to adjust size slightly when the object has assembling issue " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " xy_contour_compensation " , coFloat ) ;
def - > label = L ( " X-Y contour compensation " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Contour of object will be grown or shrunk in XY plane by the configured value. "
" Positive value makes contour bigger. Negative value makes contour smaller. "
" This function is used to adjust size slightly when the object has assembling issue " ) ;
def - > sidetext = L ( " mm " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " wall_generator " , coEnum ) ;
def - > label = L ( " Wall generator " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Classic wall generator produces walls with constant extrusion width and for "
" very thin areas is used gap-fill. "
" Arachne engine produces walls with variable extrusion width " ) ;
def - > enum_keys_map = & ConfigOptionEnum < PerimeterGeneratorType > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " classic " ) ;
def - > enum_values . push_back ( " arachne " ) ;
def - > enum_labels . push_back ( L ( " Classic " ) ) ;
def - > enum_labels . push_back ( L ( " Arachne " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < PerimeterGeneratorType > ( PerimeterGeneratorType : : Arachne ) ) ;
def = this - > add ( " wall_transition_length " , coPercent ) ;
def - > label = L ( " Wall transition length " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " When transitioning between different numbers of walls as the part becomes "
" thinner, a certain amount of space is allotted to split or join the wall segments. "
" It's expressed as a percentage over nozzle diameter " ) ;
def - > sidetext = " % " ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionPercent ( 100 ) ) ;
def = this - > add ( " wall_transition_filter_deviation " , coPercent ) ;
def - > label = L ( " Wall transitioning filter margin " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Prevent transitioning back and forth between one extra wall and one less. This "
" margin extends the range of extrusion widths which follow to [Minimum wall width "
" - margin, 2 * Minimum wall width + margin]. Increasing this margin "
" reduces the number of transitions, which reduces the number of extrusion "
" starts/stops and travel time. However, large extrusion width variation can lead to "
" under- or overextrusion problems. "
" It's expressed as a percentage over nozzle diameter " ) ;
def - > sidetext = " % " ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionPercent ( 25 ) ) ;
def = this - > add ( " wall_transition_angle " , coFloat ) ;
def - > label = L ( " Wall transitioning threshold angle " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " When to create transitions between even and odd numbers of walls. A wedge shape with "
" an angle greater than this setting will not have transitions and no walls will be "
" printed in the center to fill the remaining space. Reducing this setting reduces "
" the number and length of these center walls, but may leave gaps or overextrude " ) ;
def - > sidetext = L ( " ° " ) ;
def - > mode = comAdvanced ;
def - > min = 1. ;
def - > max = 59. ;
def - > set_default_value ( new ConfigOptionFloat ( 10. ) ) ;
def = this - > add ( " wall_distribution_count " , coInt ) ;
def - > label = L ( " Wall distribution count " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " The number of walls, counted from the center, over which the variation needs to be "
" spread. Lower values mean that the outer walls don't change in width " ) ;
def - > mode = comAdvanced ;
def - > min = 1 ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " min_feature_size " , coPercent ) ;
def - > label = L ( " Minimum feature size " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Minimum thickness of thin features. Model features that are thinner than this value will "
" not be printed, while features thicker than the Minimum feature size will be widened to "
" the Minimum wall width. "
" It's expressed as a percentage over nozzle diameter " ) ;
def - > sidetext = " % " ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionPercent ( 25 ) ) ;
def = this - > add ( " min_bead_width " , coPercent ) ;
def - > label = L ( " Minimum wall width " ) ;
def - > category = L ( " Quality " ) ;
def - > tooltip = L ( " Width of the wall that will replace thin features (according to the Minimum feature size) "
" of the model. If the Minimum wall width is thinner than the thickness of the feature, "
" the wall will become as thick as the feature itself. "
" It's expressed as a percentage over nozzle diameter " ) ;
def - > sidetext = " % " ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionPercent ( 85 ) ) ;
// Declare retract values for filament profile, overriding the printer's extruder profile.
for ( const char * opt_key : {
// floats
" retraction_length " , " z_hop " , " z_hop_types " , " retract_lift_above " , " retract_lift_below " , " retraction_speed " , " deretraction_speed " , " retract_restart_extra " , " retraction_minimum_travel " ,
// BBS: floats
" wipe_distance " ,
// bools
" retract_when_changing_layer " , " wipe " ,
// percents
" retract_before_wipe " ,
" long_retractions_when_cut " ,
" retraction_distances_when_cut "
} ) {
auto it_opt = options . find ( opt_key ) ;
assert ( it_opt ! = options . end ( ) ) ;
def = this - > add_nullable ( std : : string ( " filament_ " ) + opt_key , it_opt - > second . type ) ;
def - > label = it_opt - > second . label ;
def - > full_label = it_opt - > second . full_label ;
def - > tooltip = it_opt - > second . tooltip ;
def - > sidetext = it_opt - > second . sidetext ;
def - > enum_keys_map = it_opt - > second . enum_keys_map ;
def - > enum_labels = it_opt - > second . enum_labels ;
def - > enum_values = it_opt - > second . enum_values ;
def - > min = it_opt - > second . min ;
def - > max = it_opt - > second . max ;
//BBS: shown specific filament retract config because we hide the machine retract into comDevelop mode
if ( ( strcmp ( opt_key , " retraction_length " ) = = 0 ) | |
( strcmp ( opt_key , " z_hop " ) = = 0 ) | |
( strcmp ( opt_key , " long_retractions_when_cut " ) = = 0 ) | |
( strcmp ( opt_key , " retraction_distances_when_cut " ) = = 0 ) )
def - > mode = comSimple ;
else
def - > mode = comAdvanced ;
switch ( def - > type ) {
case coFloats : def - > set_default_value ( new ConfigOptionFloatsNullable ( static_cast < const ConfigOptionFloats * > ( it_opt - > second . default_value . get ( ) ) - > values ) ) ; break ;
case coPercents : def - > set_default_value ( new ConfigOptionPercentsNullable ( static_cast < const ConfigOptionPercents * > ( it_opt - > second . default_value . get ( ) ) - > values ) ) ; break ;
case coBools : def - > set_default_value ( new ConfigOptionBoolsNullable ( static_cast < const ConfigOptionBools * > ( it_opt - > second . default_value . get ( ) ) - > values ) ) ; break ;
case coEnums : def - > set_default_value ( new ConfigOptionEnumsGenericNullable ( static_cast < const ConfigOptionEnumsGeneric * > ( it_opt - > second . default_value . get ( ) ) - > values ) ) ; break ;
default : assert ( false ) ;
}
}
def = this - > add ( " detect_narrow_internal_solid_infill " , coBool ) ;
def - > label = L ( " Detect narrow internal solid infill " ) ;
def - > category = L ( " Strength " ) ;
def - > tooltip = L ( " This option will auto detect narrow internal solid infill area. "
" If enabled, concentric pattern will be used for the area to speed printing up. "
" Otherwise, rectilinear pattern is used defaultly. " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
}
void PrintConfigDef : : init_extruder_option_keys ( )
{
// ConfigOptionFloats, ConfigOptionPercents, ConfigOptionBools, ConfigOptionStrings
m_extruder_option_keys = {
" extruder_type " , " nozzle_diameter " , " min_layer_height " , " max_layer_height " , " extruder_offset " ,
" retraction_length " , " z_hop " , " z_hop_types " , " retraction_speed " , " retract_lift_above " , " retract_lift_below " , " deretraction_speed " ,
" retract_before_wipe " , " retract_restart_extra " , " retraction_minimum_travel " , " wipe " , " wipe_distance " ,
" retract_when_changing_layer " , " retract_length_toolchange " , " retract_restart_extra_toolchange " , " extruder_colour " ,
" default_filament_profile " , " retraction_distances_when_cut " , " long_retractions_when_cut "
} ;
m_extruder_retract_keys = {
" deretraction_speed " ,
" long_retractions_when_cut " ,
" retract_before_wipe " ,
" retract_lift_above " ,
" retract_lift_below " ,
" retract_restart_extra " ,
" retract_when_changing_layer " ,
" retraction_distances_when_cut " ,
" retraction_length " ,
" retraction_minimum_travel " ,
" retraction_speed " ,
" wipe " ,
" wipe_distance " ,
" z_hop " ,
" z_hop_types "
} ;
assert ( std : : is_sorted ( m_extruder_retract_keys . begin ( ) , m_extruder_retract_keys . end ( ) ) ) ;
}
void PrintConfigDef : : init_filament_option_keys ( )
{
m_filament_option_keys = {
" filament_diameter " , " min_layer_height " , " max_layer_height " ,
" retraction_length " , " z_hop " , " z_hop_types " , " retraction_speed " , " deretraction_speed " ,
" retract_before_wipe " , " retract_restart_extra " , " retraction_minimum_travel " , " wipe " , " wipe_distance " ,
" retract_when_changing_layer " , " retract_length_toolchange " , " retract_restart_extra_toolchange " , " filament_colour " ,
" default_filament_profile " , " retraction_distances_when_cut " , " long_retractions_when_cut "
} ;
m_filament_retract_keys = {
" deretraction_speed " ,
" long_retractions_when_cut " ,
" retract_before_wipe " ,
" retract_restart_extra " ,
" retract_when_changing_layer " ,
" retraction_distances_when_cut " ,
" retraction_length " ,
" retraction_minimum_travel " ,
" retraction_speed " ,
" wipe " ,
" wipe_distance " ,
" z_hop " ,
" z_hop_types "
} ;
assert ( std : : is_sorted ( m_filament_retract_keys . begin ( ) , m_filament_retract_keys . end ( ) ) ) ;
}
void PrintConfigDef : : init_sla_params ( )
{
ConfigOptionDef * def ;
// SLA Printer settings
def = this - > add ( " display_width " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 1 ;
def - > set_default_value ( new ConfigOptionFloat ( 120. ) ) ;
def = this - > add ( " display_height " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 1 ;
def - > set_default_value ( new ConfigOptionFloat ( 68. ) ) ;
def = this - > add ( " display_pixels_x " , coInt ) ;
def - > full_label = L ( " " ) ;
def - > label = ( " X " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 100 ;
def - > set_default_value ( new ConfigOptionInt ( 2560 ) ) ;
def = this - > add ( " display_pixels_y " , coInt ) ;
def - > label = ( " Y " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 100 ;
def - > set_default_value ( new ConfigOptionInt ( 1440 ) ) ;
def = this - > add ( " display_mirror_x " , coBool ) ;
def - > full_label = L ( " " ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " display_mirror_y " , coBool ) ;
def - > full_label = L ( " " ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " display_orientation " , coEnum ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SLADisplayOrientation > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " landscape " ) ;
def - > enum_values . push_back ( " portrait " ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SLADisplayOrientation > ( sladoPortrait ) ) ;
def = this - > add ( " fast_tilt_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 5. ) ) ;
def = this - > add ( " slow_tilt_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 8. ) ) ;
def = this - > add ( " area_fill " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 50. ) ) ;
def = this - > add ( " relative_correction " , coFloats ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats ( { 1. , 1. } ) ) ;
def = this - > add ( " relative_correction_x " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " relative_correction_y " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " relative_correction_z " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " absolute_correction " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.0 ) ) ;
def = this - > add ( " elefant_foot_min_width " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
def = this - > add ( " gamma_correction " , coFloat ) ;
def - > label = L ( " " ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
// SLA Material settings.
def = this - > add ( " material_colour " , coString ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : color ;
def - > set_default_value ( new ConfigOptionString ( " #29B2B2 " ) ) ;
def = this - > add ( " material_type " , coString ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > gui_type = ConfigOptionDef : : GUIType : : f_enum_open ; // TODO: ???
def - > gui_flags = " show_value " ;
def - > enum_values . push_back ( " Tough " ) ;
def - > enum_values . push_back ( " Flexible " ) ;
def - > enum_values . push_back ( " Casting " ) ;
def - > enum_values . push_back ( " Dental " ) ;
def - > enum_values . push_back ( " Heat-resistant " ) ;
def - > set_default_value ( new ConfigOptionString ( " Tough " ) ) ;
def = this - > add ( " initial_layer_height " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.3 ) ) ;
def = this - > add ( " bottle_volume " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 50 ;
def - > set_default_value ( new ConfigOptionFloat ( 1000.0 ) ) ;
def = this - > add ( " bottle_weight " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
def = this - > add ( " material_density " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
def = this - > add ( " bottle_cost " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.0 ) ) ;
def = this - > add ( " faded_layers " , coInt ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 3 ;
def - > max = 20 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 10 ) ) ;
def = this - > add ( " min_exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " max_exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 100 ) ) ;
def = this - > add ( " exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 10 ) ) ;
def = this - > add ( " min_initial_exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " max_initial_exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 150 ) ) ;
def = this - > add ( " initial_exposure_time " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 15 ) ) ;
def = this - > add ( " material_correction " , coFloats ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloats ( { 1. , 1. , 1. } ) ) ;
def = this - > add ( " material_correction_x " , coFloat ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " material_correction_y " , coFloat ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " material_correction_z " , coFloat ) ;
def - > full_label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " material_vendor " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " default_sla_material_profile " , coString ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " sla_material_settings_id " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " default_sla_print_profile " , coString ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " sla_print_settings_id " , coString ) ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
def - > cli = ConfigOptionDef : : nocli ;
def = this - > add ( " supports_enable " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " support_head_front_diameter " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.4 ) ) ;
def = this - > add ( " support_head_penetration " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > mode = comAdvanced ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 0.2 ) ) ;
def = this - > add ( " support_head_width " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 20 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
def = this - > add ( " support_pillar_diameter " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 15 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
def = this - > add ( " support_small_pillar_diameter_percent " , coPercent ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 1 ;
def - > max = 100 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionPercent ( 50 ) ) ;
def = this - > add ( " support_max_bridges_on_pillar " , coInt ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > max = 50 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionInt ( 3 ) ) ;
def = this - > add ( " support_pillar_connection_mode " , coEnum ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SLAPillarConnectionMode > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " zigzag " ) ;
def - > enum_values . push_back ( " cross " ) ;
def - > enum_values . push_back ( " dynamic " ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SLAPillarConnectionMode > ( slapcmDynamic ) ) ;
def = this - > add ( " support_buildplate_only " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " support_pillar_widening_factor " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.0 ) ) ;
def = this - > add ( " support_base_diameter " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 30 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 4.0 ) ) ;
def = this - > add ( " support_base_height " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1.0 ) ) ;
def = this - > add ( " support_base_safety_distance " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " support_critical_angle " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 90 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 45 ) ) ;
def = this - > add ( " support_max_bridge_length " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 15.0 ) ) ;
def = this - > add ( " support_max_pillar_link_distance " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ; // 0 means no linking
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 10.0 ) ) ;
def = this - > add ( " support_object_elevation " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 150 ; // This is the max height of print on SL1
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 5.0 ) ) ;
def = this - > add ( " support_points_density_relative " , coInt ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionInt ( 100 ) ) ;
def = this - > add ( " support_points_minimal_distance " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > set_default_value ( new ConfigOptionFloat ( 1. ) ) ;
def = this - > add ( " pad_enable " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " pad_wall_thickness " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 30 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 2.0 ) ) ;
def = this - > add ( " pad_wall_height " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > category = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 30 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0. ) ) ;
def = this - > add ( " pad_brim_size " , coFloat ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > category = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 30 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1.6 ) ) ;
def = this - > add ( " pad_max_merge_distance " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 50.0 ) ) ;
def = this - > add ( " pad_wall_slope " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 45 ;
def - > max = 90 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 90.0 ) ) ;
def = this - > add ( " pad_around_object " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " pad_around_object_everywhere " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " pad_object_gap " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 1 ) ) ;
def = this - > add ( " pad_object_connector_stride " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 10 ) ) ;
def = this - > add ( " pad_object_connector_width " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.5 ) ) ;
def = this - > add ( " pad_object_connector_penetration " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 0 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.3 ) ) ;
def = this - > add ( " hollowing_enable " , coBool ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " hollowing_min_thickness " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " " ) ;
def - > min = 1 ;
def - > max = 10 ;
def - > mode = comSimple ;
def - > set_default_value ( new ConfigOptionFloat ( 3. ) ) ;
def = this - > add ( " hollowing_quality " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > min = 0 ;
def - > max = 1 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 0.5 ) ) ;
def = this - > add ( " hollowing_closing_distance " , coFloat ) ;
def - > label = L ( " " ) ;
def - > category = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > sidetext = L ( " mm " ) ;
def - > min = 0 ;
def - > max = 10 ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionFloat ( 2.0 ) ) ;
def = this - > add ( " material_print_speed " , coEnum ) ;
def - > label = L ( " " ) ;
def - > tooltip = L ( " " ) ;
def - > enum_keys_map = & ConfigOptionEnum < SLAMaterialSpeed > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " slow " ) ;
def - > enum_values . push_back ( " fast " ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > enum_labels . push_back ( L ( " " ) ) ;
def - > mode = comAdvanced ;
def - > set_default_value ( new ConfigOptionEnum < SLAMaterialSpeed > ( slamsFast ) ) ;
}
void PrintConfigDef : : handle_legacy ( t_config_option_key & opt_key , std : : string & value )
{
//BBS: handle legacy options
if ( opt_key = = " enable_wipe_tower " ) {
opt_key = " enable_prime_tower " ;
} else if ( opt_key = = " wipe_tower_width " ) {
opt_key = " prime_tower_width " ;
} else if ( opt_key = = " bottom_solid_infill_flow_ratio " ) {
opt_key = " initial_layer_flow_ratio " ;
} else if ( opt_key = = " wiping_volume " ) {
opt_key = " prime_volume " ;
} else if ( opt_key = = " wipe_tower_brim_width " ) {
opt_key = " prime_tower_brim_width " ;
} else if ( opt_key = = " tool_change_gcode " ) {
opt_key = " change_filament_gcode " ;
} else if ( opt_key = = " bridge_fan_speed " ) {
opt_key = " overhang_fan_speed " ;
} else if ( opt_key = = " infill_extruder " ) {
opt_key = " sparse_infill_filament " ;
} else if ( opt_key = = " solid_infill_extruder " ) {
opt_key = " solid_infill_filament " ;
} else if ( opt_key = = " perimeter_extruder " ) {
opt_key = " wall_filament " ;
} else if ( opt_key = = " support_material_extruder " ) {
opt_key = " support_filament " ;
} else if ( opt_key = = " support_material_interface_extruder " ) {
opt_key = " support_interface_filament " ;
} else if ( opt_key = = " support_material_angle " ) {
opt_key = " support_angle " ;
} else if ( opt_key = = " support_material_enforce_layers " ) {
opt_key = " enforce_support_layers " ;
} else if ( ( opt_key = = " initial_layer_print_height " | |
2025-01-21 06:26:10 +00:00
opt_key = = " default_print_speed " | |
opt_key = = " initial_layer_speed " | |
2024-12-20 06:44:50 +00:00
opt_key = = " internal_solid_infill_speed " | |
opt_key = = " top_surface_speed " | |
opt_key = = " support_interface_speed " | |
opt_key = = " outer_wall_speed " | |
opt_key = = " support_object_xy_distance " ) & & value . find ( " % " ) ! = std : : string : : npos ) {
//BBS: this is old profile in which value is expressed as percentage.
//But now these key-value must be absolute value.
//Reset to default value by erasing these key to avoid parsing error.
opt_key = " " ;
} else if ( opt_key = = " inherits_cummulative " ) {
opt_key = " inherits_group " ;
} else if ( opt_key = = " compatible_printers_condition_cummulative " ) {
opt_key = " compatible_machine_expression_group " ;
} else if ( opt_key = = " compatible_prints_condition_cummulative " ) {
opt_key = " compatible_process_expression_group " ;
} else if ( opt_key = = " cooling " ) {
opt_key = " slow_down_for_layer_cooling " ;
} else if ( opt_key = = " timelapse_no_toolhead " ) {
opt_key = " timelapse_type " ;
} else if ( opt_key = = " timelapse_type " & & value = = " 2 " ) {
// old file "0" is None, "2" is Traditional
// new file "0" is Traditional, erase "2"
value = " 0 " ;
} else if ( opt_key = = " support_type " & & value = = " normal " ) {
value = " normal(manual) " ;
} else if ( opt_key = = " support_type " & & value = = " tree " ) {
value = " tree(manual) " ;
} else if ( opt_key = = " support_type " & & value = = " hybrid(auto) " ) {
value = " tree(auto) " ;
} else if ( opt_key = = " support_base_pattern " & & value = = " none " ) {
value = " hollow " ;
} else if ( opt_key = = " infill_anchor " ) {
opt_key = " sparse_infill_anchor " ;
} else if ( opt_key = = " infill_anchor_max " ) {
opt_key = " sparse_infill_anchor_max " ;
} else if ( opt_key = = " different_settings_to_system " ) {
std : : string copy_value = value ;
copy_value . erase ( std : : remove ( copy_value . begin ( ) , copy_value . end ( ) , ' \" ' ) , copy_value . end ( ) ) ; // remove '"' in string
std : : set < std : : string > split_keys = SplitStringAndRemoveDuplicateElement ( copy_value , " ; " ) ;
for ( std : : string split_key : split_keys ) {
std : : string copy_key = split_key , copy_value = " " ;
handle_legacy ( copy_key , copy_value ) ;
if ( copy_key ! = split_key ) {
ReplaceString ( value , split_key , copy_key ) ;
}
}
} else if ( opt_key = = " overhang_fan_threshold " & & value = = " 5% " ) {
value = " 10% " ;
} else if ( opt_key = = " wall_infill_order " ) {
if ( value = = " inner wall/outer wall/infill " | | value = = " infill/inner wall/outer wall " ) {
opt_key = " wall_sequence " ;
value = " inner wall/outer wall " ;
} else if ( value = = " outer wall/inner wall/infill " | | value = = " infill/outer wall/inner wall " ) {
opt_key = " wall_sequence " ;
value = " outer wall/inner wall " ;
} else if ( value = = " inner-outer-inner wall/infill " ) {
opt_key = " wall_sequence " ;
value = " inner-outer-inner wall " ;
} else {
opt_key = " wall_sequence " ;
}
}
// Ignore the following obsolete configuration keys:
static std : : set < std : : string > ignore = {
" acceleration " , " scale " , " rotate " , " duplicate " , " duplicate_grid " ,
" bed_size " ,
" print_center " , " g0 " , " wipe_tower_per_color_wipe "
# ifndef HAS_PRESSURE_EQUALIZER
, " max_volumetric_extrusion_rate_slope_positive " , " max_volumetric_extrusion_rate_slope_negative "
# endif /* HAS_PRESSURE_EQUALIZER */
// BBS
, " support_sharp_tails " , " support_remove_small_overhangs " , " support_with_sheath " ,
" tree_support_branch_diameter_angle " , " tree_support_collision_resolution " , " tree_support_with_infill " ,
" tree_support_brim_width " ,
" max_volumetric_speed " , " max_print_speed " ,
" support_closing_radius " ,
" remove_freq_sweep " , " remove_bed_leveling " , " remove_extrusion_calibration " ,
" support_transition_line_width " , " support_transition_speed " , " bed_temperature " , " bed_temperature_initial_layer " ,
" can_switch_nozzle_type " , " can_add_auxiliary_fan " , " extra_flush_volume " , " spaghetti_detector " , " adaptive_layer_height " ,
" z_hop_type " , " nozzle_hrc " , " chamber_temperature " , " only_one_wall_top " , " bed_temperature_difference " , " long_retraction_when_cut " ,
" retraction_distance_when_cut "
} ;
if ( ignore . find ( opt_key ) ! = ignore . end ( ) ) {
opt_key = " " ;
return ;
}
if ( ! print_config_def . has ( opt_key ) ) {
opt_key = " " ;
return ;
}
}
const PrintConfigDef print_config_def ;
DynamicPrintConfig DynamicPrintConfig : : full_print_config ( )
{
return DynamicPrintConfig ( ( const PrintRegionConfig & ) FullPrintConfig : : defaults ( ) ) ;
}
DynamicPrintConfig : : DynamicPrintConfig ( const StaticPrintConfig & rhs ) : DynamicConfig ( rhs , rhs . keys_ref ( ) )
{
}
DynamicPrintConfig * DynamicPrintConfig : : new_from_defaults_keys ( const std : : vector < std : : string > & keys )
{
auto * out = new DynamicPrintConfig ( ) ;
out - > apply_only ( FullPrintConfig : : defaults ( ) , keys ) ;
return out ;
}
double min_object_distance ( const ConfigBase & cfg )
{
const ConfigOptionEnum < PrinterTechnology > * opt_printer_technology = cfg . option < ConfigOptionEnum < PrinterTechnology > > ( " printer_technology " ) ;
auto printer_technology = opt_printer_technology ? opt_printer_technology - > value : ptUnknown ;
double ret = 0. ;
if ( printer_technology = = ptSLA )
ret = 6. ;
else {
//BBS: duplicate_distance seam to be useless
constexpr double duplicate_distance = 6. ;
auto ecr_opt = cfg . option < ConfigOptionFloat > ( " extruder_clearance_max_radius " ) ;
auto co_opt = cfg . option < ConfigOptionEnum < PrintSequence > > ( " print_sequence " ) ;
if ( ! ecr_opt | | ! co_opt )
ret = 0. ;
else {
// min object distance is max(duplicate_distance, clearance_radius)
ret = ( ( co_opt - > value = = PrintSequence : : ByObject ) & & ecr_opt - > value > duplicate_distance ) ?
ecr_opt - > value : duplicate_distance ;
}
}
return ret ;
}
void DynamicPrintConfig : : normalize_fdm ( int used_filaments )
{
if ( this - > has ( " extruder " ) ) {
int extruder = this - > option ( " extruder " ) - > getInt ( ) ;
this - > erase ( " extruder " ) ;
if ( extruder ! = 0 ) {
if ( ! this - > has ( " sparse_infill_filament " ) )
this - > option ( " sparse_infill_filament " , true ) - > setInt ( extruder ) ;
if ( ! this - > has ( " wall_filament " ) )
this - > option ( " wall_filament " , true ) - > setInt ( extruder ) ;
// Don't propagate the current extruder to support.
// For non-soluble supports, the default "0" extruder means to use the active extruder,
// for soluble supports one certainly does not want to set the extruder to non-soluble.
// if (!this->has("support_filament"))
// this->option("support_filament", true)->setInt(extruder);
// if (!this->has("support_interface_filament"))
// this->option("support_interface_filament", true)->setInt(extruder);
}
}
if ( ! this - > has ( " solid_infill_filament " ) & & this - > has ( " sparse_infill_filament " ) )
this - > option ( " solid_infill_filament " , true ) - > setInt ( this - > option ( " sparse_infill_filament " ) - > getInt ( ) ) ;
if ( this - > has ( " spiral_mode " ) & & this - > opt < ConfigOptionBool > ( " spiral_mode " , true ) - > value ) {
{
// this should be actually done only on the spiral layers instead of all
auto * opt = this - > opt < ConfigOptionBools > ( " retract_when_changing_layer " , true ) ;
opt - > values . assign ( opt - > values . size ( ) , false ) ; // set all values to false
// Disable retract on layer change also for filament overrides.
auto * opt_n = this - > opt < ConfigOptionBoolsNullable > ( " filament_retract_when_changing_layer " , true ) ;
opt_n - > values . assign ( opt_n - > values . size ( ) , false ) ; // Set all values to false.
}
{
this - > opt < ConfigOptionInt > ( " wall_loops " , true ) - > value = 1 ;
this - > opt < ConfigOptionInt > ( " top_shell_layers " , true ) - > value = 0 ;
this - > opt < ConfigOptionPercent > ( " sparse_infill_density " , true ) - > value = 0 ;
}
}
if ( auto * opt_gcode_resolution = this - > opt < ConfigOptionFloat > ( " resolution " , false ) ; opt_gcode_resolution )
// Resolution will be above 1um.
opt_gcode_resolution - > value = std : : max ( opt_gcode_resolution - > value , 0.001 ) ;
// BBS
ConfigOptionBool * ept_opt = this - > option < ConfigOptionBool > ( " enable_prime_tower " ) ;
if ( used_filaments > 0 & & ept_opt ! = nullptr ) {
ConfigOptionBool * islh_opt = this - > option < ConfigOptionBool > ( " independent_support_layer_height " , true ) ;
//ConfigOptionBool* alh_opt = this->option<ConfigOptionBool>("adaptive_layer_height");
ConfigOptionEnum < PrintSequence > * ps_opt = this - > option < ConfigOptionEnum < PrintSequence > > ( " print_sequence " ) ;
ConfigOptionEnum < TimelapseType > * timelapse_opt = this - > option < ConfigOptionEnum < TimelapseType > > ( " timelapse_type " ) ;
bool is_smooth_timelapse = timelapse_opt ! = nullptr & & timelapse_opt - > value = = TimelapseType : : tlSmooth ;
if ( ! is_smooth_timelapse & & ( used_filaments = = 1 | | ps_opt - > value = = PrintSequence : : ByObject ) ) {
ept_opt - > value = false ;
}
if ( ept_opt - > value ) {
if ( islh_opt )
islh_opt - > value = false ;
//if (alh_opt)
// alh_opt->value = false;
}
/* BBS: MusangKing - not sure if this is still valid, just comment it out cause "Independent support layer height" is re-opened.
else {
if ( islh_opt )
islh_opt - > value = true ;
}
*/
}
}
//BBS:divide normalize_fdm to 2 steps and call them one by one in Print::Apply
void DynamicPrintConfig : : normalize_fdm_1 ( )
{
if ( this - > has ( " extruder " ) ) {
int extruder = this - > option ( " extruder " ) - > getInt ( ) ;
this - > erase ( " extruder " ) ;
if ( extruder ! = 0 ) {
if ( ! this - > has ( " sparse_infill_filament " ) )
this - > option ( " sparse_infill_filament " , true ) - > setInt ( extruder ) ;
if ( ! this - > has ( " wall_filament " ) )
this - > option ( " wall_filament " , true ) - > setInt ( extruder ) ;
// Don't propagate the current extruder to support.
// For non-soluble supports, the default "0" extruder means to use the active extruder,
// for soluble supports one certainly does not want to set the extruder to non-soluble.
// if (!this->has("support_filament"))
// this->option("support_filament", true)->setInt(extruder);
// if (!this->has("support_interface_filament"))
// this->option("support_interface_filament", true)->setInt(extruder);
}
}
if ( ! this - > has ( " solid_infill_filament " ) & & this - > has ( " sparse_infill_filament " ) )
this - > option ( " solid_infill_filament " , true ) - > setInt ( this - > option ( " sparse_infill_filament " ) - > getInt ( ) ) ;
if ( this - > has ( " spiral_mode " ) & & this - > opt < ConfigOptionBool > ( " spiral_mode " , true ) - > value ) {
{
// this should be actually done only on the spiral layers instead of all
auto * opt = this - > opt < ConfigOptionBools > ( " retract_when_changing_layer " , true ) ;
opt - > values . assign ( opt - > values . size ( ) , false ) ; // set all values to false
// Disable retract on layer change also for filament overrides.
auto * opt_n = this - > opt < ConfigOptionBoolsNullable > ( " filament_retract_when_changing_layer " , true ) ;
opt_n - > values . assign ( opt_n - > values . size ( ) , false ) ; // Set all values to false.
}
{
this - > opt < ConfigOptionInt > ( " wall_loops " , true ) - > value = 1 ;
this - > opt < ConfigOptionInt > ( " top_shell_layers " , true ) - > value = 0 ;
this - > opt < ConfigOptionPercent > ( " sparse_infill_density " , true ) - > value = 0 ;
}
}
if ( auto * opt_gcode_resolution = this - > opt < ConfigOptionFloat > ( " resolution " , false ) ; opt_gcode_resolution )
// Resolution will be above 1um.
opt_gcode_resolution - > value = std : : max ( opt_gcode_resolution - > value , 0.001 ) ;
return ;
}
t_config_option_keys DynamicPrintConfig : : normalize_fdm_2 ( int num_objects , int used_filaments )
{
t_config_option_keys changed_keys ;
ConfigOptionBool * ept_opt = this - > option < ConfigOptionBool > ( " enable_prime_tower " ) ;
if ( used_filaments > 0 & & ept_opt ! = nullptr ) {
ConfigOptionBool * islh_opt = this - > option < ConfigOptionBool > ( " independent_support_layer_height " , true ) ;
//ConfigOptionBool* alh_opt = this->option<ConfigOptionBool>("adaptive_layer_height");
ConfigOptionEnum < PrintSequence > * ps_opt = this - > option < ConfigOptionEnum < PrintSequence > > ( " print_sequence " ) ;
ConfigOptionEnum < TimelapseType > * timelapse_opt = this - > option < ConfigOptionEnum < TimelapseType > > ( " timelapse_type " ) ;
bool is_smooth_timelapse = timelapse_opt ! = nullptr & & timelapse_opt - > value = = TimelapseType : : tlSmooth ;
if ( ! is_smooth_timelapse & & ( used_filaments = = 1 | | ( ps_opt - > value = = PrintSequence : : ByObject & & num_objects > 1 ) ) ) {
if ( ept_opt - > value ) {
ept_opt - > value = false ;
changed_keys . push_back ( " enable_prime_tower " ) ;
}
//ept_opt->value = false;
}
if ( ept_opt - > value ) {
if ( islh_opt ) {
if ( islh_opt - > value ) {
islh_opt - > value = false ;
changed_keys . push_back ( " independent_support_layer_height " ) ;
}
//islh_opt->value = false;
}
//if (alh_opt) {
// if (alh_opt->value) {
// alh_opt->value = false;
// changed_keys.push_back("adaptive_layer_height");
// }
// //alh_opt->value = false;
//}
}
/* BBS: MusangKing - use "global->support->Independent support layer height" widget to replace previous assignment
else {
if ( islh_opt ) {
if ( ! islh_opt - > value ) {
islh_opt - > value = true ;
changed_keys . push_back ( " independent_support_layer_height " ) ;
}
//islh_opt->value = true;
}
}
*/
}
return changed_keys ;
}
void handle_legacy_sla ( DynamicPrintConfig & config )
{
for ( std : : string corr : { " relative_correction " , " material_correction " } ) {
if ( config . has ( corr ) ) {
if ( std : : string corr_x = corr + " _x " ; ! config . has ( corr_x ) ) {
auto * opt = config . opt < ConfigOptionFloat > ( corr_x , true ) ;
opt - > value = config . opt < ConfigOptionFloats > ( corr ) - > values [ 0 ] ;
}
if ( std : : string corr_y = corr + " _y " ; ! config . has ( corr_y ) ) {
auto * opt = config . opt < ConfigOptionFloat > ( corr_y , true ) ;
opt - > value = config . opt < ConfigOptionFloats > ( corr ) - > values [ 0 ] ;
}
if ( std : : string corr_z = corr + " _z " ; ! config . has ( corr_z ) ) {
auto * opt = config . opt < ConfigOptionFloat > ( corr_z , true ) ;
opt - > value = config . opt < ConfigOptionFloats > ( corr ) - > values [ 1 ] ;
}
}
}
}
void DynamicPrintConfig : : set_num_extruders ( unsigned int num_extruders )
{
const auto & defaults = FullPrintConfig : : defaults ( ) ;
for ( const std : : string & key : print_config_def . extruder_option_keys ( ) ) {
if ( key = = " default_filament_profile " )
// Don't resize this field, as it is presented to the user at the "Dependencies" page of the Printer profile and we don't want to present
// empty fields there, if not defined by the system profile.
continue ;
auto * opt = this - > option ( key , false ) ;
assert ( opt ! = nullptr ) ;
assert ( opt - > is_vector ( ) ) ;
if ( opt ! = nullptr & & opt - > is_vector ( ) )
static_cast < ConfigOptionVectorBase * > ( opt ) - > resize ( num_extruders , defaults . option ( key ) ) ;
}
}
// BBS
void DynamicPrintConfig : : set_num_filaments ( unsigned int num_filaments )
{
const auto & defaults = FullPrintConfig : : defaults ( ) ;
for ( const std : : string & key : print_config_def . filament_option_keys ( ) ) {
if ( key = = " default_filament_profile " )
// Don't resize this field, as it is presented to the user at the "Dependencies" page of the Printer profile and we don't want to present
// empty fields there, if not defined by the system profile.
continue ;
auto * opt = this - > option ( key , false ) ;
assert ( opt ! = nullptr ) ;
assert ( opt - > is_vector ( ) ) ;
if ( opt ! = nullptr & & opt - > is_vector ( ) )
static_cast < ConfigOptionVectorBase * > ( opt ) - > resize ( num_filaments , defaults . option ( key ) ) ;
}
}
//BBS: pass map to recording all invalid valies
std : : map < std : : string , std : : string > DynamicPrintConfig : : validate ( bool under_cli )
{
// Full print config is initialized from the defaults.
const ConfigOption * opt = this - > option ( " printer_technology " , false ) ;
auto printer_technology = ( opt = = nullptr ) ? ptFFF : static_cast < PrinterTechnology > ( dynamic_cast < const ConfigOptionEnumGeneric * > ( opt ) - > value ) ;
switch ( printer_technology ) {
case ptFFF :
{
FullPrintConfig fpc ;
fpc . apply ( * this , true ) ;
// Verify this print options through the FullPrintConfig.
return Slic3r : : validate ( fpc , under_cli ) ;
}
default :
//FIXME no validation on SLA data?
return std : : map < std : : string , std : : string > ( ) ;
}
}
std : : string DynamicPrintConfig : : get_filament_type ( std : : string & displayed_filament_type , int id )
{
auto * filament_id = dynamic_cast < const ConfigOptionStrings * > ( this - > option ( " filament_id " ) ) ;
auto * filament_type = dynamic_cast < const ConfigOptionStrings * > ( this - > option ( " filament_type " ) ) ;
auto * filament_is_support = dynamic_cast < const ConfigOptionBools * > ( this - > option ( " filament_is_support " ) ) ;
if ( ! filament_type )
return " " ;
if ( ! filament_is_support ) {
if ( filament_type ) {
displayed_filament_type = filament_type - > get_at ( id ) ;
return filament_type - > get_at ( id ) ;
}
else {
displayed_filament_type = " " ;
return " " ;
}
}
else {
bool is_support = filament_is_support ? filament_is_support - > get_at ( id ) : false ;
if ( is_support ) {
if ( filament_id ) {
if ( filament_id - > get_at ( id ) = = " GFS00 " ) {
displayed_filament_type = " Sup.PLA " ;
return " PLA-S " ;
}
else if ( filament_id - > get_at ( id ) = = " GFS01 " ) {
displayed_filament_type = " Sup.PA " ;
return " PA-S " ;
}
else {
if ( filament_type - > get_at ( id ) = = " PLA " ) {
displayed_filament_type = " Sup.PLA " ;
return " PLA-S " ;
}
else if ( filament_type - > get_at ( id ) = = " PA " ) {
displayed_filament_type = " Sup.PA " ;
return " PA-S " ;
}
else {
displayed_filament_type = filament_type - > get_at ( id ) ;
return filament_type - > get_at ( id ) ;
}
}
}
else {
if ( filament_type - > get_at ( id ) = = " PLA " ) {
displayed_filament_type = " Sup.PLA " ;
return " PLA-S " ;
} else if ( filament_type - > get_at ( id ) = = " PA " ) {
displayed_filament_type = " Sup.PA " ;
return " PA-S " ;
} else {
displayed_filament_type = filament_type - > get_at ( id ) ;
return filament_type - > get_at ( id ) ;
}
}
}
else {
displayed_filament_type = filament_type - > get_at ( id ) ;
return filament_type - > get_at ( id ) ;
}
}
return " PLA " ;
}
bool DynamicPrintConfig : : is_custom_defined ( )
{
auto * is_custom_defined = dynamic_cast < const ConfigOptionStrings * > ( this - > option ( " is_custom_defined " ) ) ;
if ( ! is_custom_defined | | is_custom_defined - > empty ( ) )
return false ;
if ( is_custom_defined - > get_at ( 0 ) = = " 1 " )
return true ;
return false ;
}
//BBS: pass map to recording all invalid valies
//FIXME localize this function.
std : : map < std : : string , std : : string > validate ( const FullPrintConfig & cfg , bool under_cli )
{
std : : map < std : : string , std : : string > error_message ;
// --layer-height
if ( cfg . get_abs_value ( " layer_height " ) < = 0 ) {
error_message . emplace ( " layer_height " , L ( " invalid value " ) + std : : to_string ( cfg . get_abs_value ( " layer_height " ) ) ) ;
}
else if ( fabs ( fmod ( cfg . get_abs_value ( " layer_height " ) , SCALING_FACTOR ) ) > 1e-4 ) {
error_message . emplace ( " layer_height " , L ( " invalid value " ) + std : : to_string ( cfg . get_abs_value ( " layer_height " ) ) ) ;
}
// --first-layer-height
if ( cfg . initial_layer_print_height . value < = 0 ) {
error_message . emplace ( " initial_layer_print_height " , L ( " invalid value " ) + std : : to_string ( cfg . initial_layer_print_height . value ) ) ;
}
// --filament-diameter
for ( double fd : cfg . filament_diameter . values )
if ( fd < 1 ) {
error_message . emplace ( " filament_diameter " , L ( " invalid value " ) + cfg . filament_diameter . serialize ( ) ) ;
break ;
}
// --nozzle-diameter
for ( double nd : cfg . nozzle_diameter . values )
if ( nd < 0.005 ) {
error_message . emplace ( " nozzle_diameter " , L ( " invalid value " ) + cfg . nozzle_diameter . serialize ( ) ) ;
break ;
}
// --perimeters
if ( cfg . wall_loops . value < 0 ) {
error_message . emplace ( " wall_loops " , L ( " invalid value " ) + std : : to_string ( cfg . wall_loops . value ) ) ;
}
// --solid-layers
if ( cfg . top_shell_layers < 0 ) {
error_message . emplace ( " top_shell_layers " , L ( " invalid value " ) + std : : to_string ( cfg . top_shell_layers ) ) ;
}
if ( cfg . bottom_shell_layers < 0 ) {
error_message . emplace ( " bottom_shell_layers " , L ( " invalid value " ) + std : : to_string ( cfg . bottom_shell_layers ) ) ;
}
std : : set < GCodeFlavor > with_firmware_retraction_flavor = {
gcfSmoothie ,
gcfRepRapSprinter ,
gcfRepRapFirmware ,
gcfMarlinLegacy ,
gcfMarlinFirmware ,
gcfMachinekit ,
gcfRepetier ,
gcfKlipper
} ;
if ( cfg . use_firmware_retraction . value & & with_firmware_retraction_flavor . count ( cfg . gcode_flavor . value ) = = 0 )
error_message . emplace ( " gcode_flavor " , L ( " --use-firmware-retraction is only supported by Marlin, Klipper, Smoothie, RepRapFirmware, Repetier and Machinekit firmware " ) ) ;
if ( cfg . use_firmware_retraction . value )
for ( unsigned char wipe : cfg . wipe . values )
if ( wipe )
error_message . emplace ( " wipe " , L ( " --use-firmware-retraction is not compatible with --wipe " ) ) ;
// --gcode-flavor
if ( ! print_config_def . get ( " gcode_flavor " ) - > has_enum_value ( cfg . gcode_flavor . serialize ( ) ) ) {
error_message . emplace ( " gcode_flavor " , L ( " invalid value " ) + cfg . gcode_flavor . serialize ( ) ) ;
}
// --fill-pattern
if ( ! print_config_def . get ( " sparse_infill_pattern " ) - > has_enum_value ( cfg . sparse_infill_pattern . serialize ( ) ) ) {
error_message . emplace ( " sparse_infill_pattern " , L ( " invalid value " ) + cfg . sparse_infill_pattern . serialize ( ) ) ;
}
// --top-fill-pattern
if ( ! print_config_def . get ( " top_surface_pattern " ) - > has_enum_value ( cfg . top_surface_pattern . serialize ( ) ) ) {
error_message . emplace ( " top_surface_pattern " , L ( " invalid value " ) + cfg . top_surface_pattern . serialize ( ) ) ;
}
// --bottom-fill-pattern
if ( ! print_config_def . get ( " bottom_surface_pattern " ) - > has_enum_value ( cfg . bottom_surface_pattern . serialize ( ) ) ) {
error_message . emplace ( " bottom_surface_pattern " , L ( " invalid value " ) + cfg . bottom_surface_pattern . serialize ( ) ) ;
}
// --soild-fill-pattern
if ( ! print_config_def . get ( " internal_solid_infill_pattern " ) - > has_enum_value ( cfg . internal_solid_infill_pattern . serialize ( ) ) ) {
error_message . emplace ( " internal_solid_infill_pattern " , L ( " invalid value " ) + cfg . internal_solid_infill_pattern . serialize ( ) ) ;
}
// --fill-density
if ( fabs ( cfg . sparse_infill_density . value - 100. ) < EPSILON & &
! print_config_def . get ( " top_surface_pattern " ) - > has_enum_value ( cfg . sparse_infill_pattern . serialize ( ) ) ) {
error_message . emplace ( " sparse_infill_pattern " , cfg . sparse_infill_pattern . serialize ( ) + L ( " doesn't work at 100%% density " ) ) ;
}
// --skirt-height
if ( cfg . skirt_height < 0 ) {
error_message . emplace ( " skirt_height " , L ( " invalid value " ) + std : : to_string ( cfg . skirt_height ) ) ;
}
// --bridge-flow-ratio
if ( cfg . bridge_flow < = 0 ) {
error_message . emplace ( " bridge_flow " , L ( " invalid value " ) + std : : to_string ( cfg . bridge_flow ) ) ;
}
// extruder clearance
if ( cfg . extruder_clearance_max_radius < = 0 ) {
error_message . emplace ( " extruder_clearance_max_radius " , L ( " invalid value " ) + std : : to_string ( cfg . extruder_clearance_max_radius ) ) ;
}
if ( cfg . extruder_clearance_height_to_rod < = 0 ) {
error_message . emplace ( " extruder_clearance_height_to_rod " , L ( " invalid value " ) + std : : to_string ( cfg . extruder_clearance_height_to_rod ) ) ;
}
if ( cfg . extruder_clearance_height_to_lid < = 0 ) {
error_message . emplace ( " extruder_clearance_height_to_lid " , L ( " invalid value " ) + std : : to_string ( cfg . extruder_clearance_height_to_lid ) ) ;
}
if ( cfg . nozzle_height < = 0 )
error_message . emplace ( " nozzle_height " , L ( " invalid value " ) + std : : to_string ( cfg . nozzle_height ) ) ;
// --extrusion-multiplier
for ( double em : cfg . filament_flow_ratio . values )
if ( em < = 0 ) {
error_message . emplace ( " filament_flow_ratio " , L ( " invalid value " ) + cfg . filament_flow_ratio . serialize ( ) ) ;
break ;
}
// The following test was commented out after 482841b, see also https://github.com/prusa3d/PrusaSlicer/pull/6743.
// The backend should now handle this case correctly. I.e., zero default_acceleration behaves as if all others
// were zero too. This is now consistent with what the UI said would happen.
// The UI already grays the fields out, there is no more reason to reject it here. This function validates the
// config before exporting, leaving this check in would mean that config would be rejected before export
// (although both the UI and the backend handle it).
// --default-acceleration
//if ((cfg.outer_wall_acceleration != 0. || cfg.infill_acceleration != 0. || cfg.bridge_acceleration != 0. || cfg.initial_layer_acceleration != 0.) &&
// cfg.default_acceleration == 0.)
// return "Invalid zero value for --default-acceleration when using other acceleration settings";
// --spiral-vase
//for non-cli case, we will popup dialog for spiral mode correction
if ( cfg . spiral_mode & & under_cli ) {
// Note that we might want to have more than one perimeter on the bottom
// solid layers.
if ( cfg . wall_loops ! = 1 ) {
error_message . emplace ( " wall_loops " , L ( " Invalid value when spiral vase mode is enabled: " ) + std : : to_string ( cfg . wall_loops ) ) ;
//return "Can't make more than one perimeter when spiral vase mode is enabled";
//return "Can't make less than one perimeter when spiral vase mode is enabled";
}
if ( cfg . sparse_infill_density > 0 ) {
error_message . emplace ( " sparse_infill_density " , L ( " Invalid value when spiral vase mode is enabled: " ) + std : : to_string ( cfg . sparse_infill_density ) ) ;
//return "Spiral vase mode can only print hollow objects, so you need to set Fill density to 0";
}
if ( cfg . top_shell_layers > 0 ) {
error_message . emplace ( " top_shell_layers " , L ( " Invalid value when spiral vase mode is enabled: " ) + std : : to_string ( cfg . top_shell_layers ) ) ;
//return "Spiral vase mode is not compatible with top solid layers";
}
if ( cfg . enable_support ) {
error_message . emplace ( " enable_support " , L ( " Invalid value when spiral vase mode is enabled: " ) + std : : to_string ( cfg . enable_support ) ) ;
//return "Spiral vase mode is not compatible with support";
}
if ( cfg . enforce_support_layers > 0 ) {
error_message . emplace ( " enforce_support_layers " , L ( " Invalid value when spiral vase mode is enabled: " ) + std : : to_string ( cfg . enforce_support_layers ) ) ;
//return "Spiral vase mode is not compatible with support";
}
}
// extrusion widths
{
double max_nozzle_diameter = 0. ;
for ( double dmr : cfg . nozzle_diameter . values )
max_nozzle_diameter = std : : max ( max_nozzle_diameter , dmr ) ;
const char * widths [ ] = {
" outer_wall_line_width " ,
" inner_wall_line_width " ,
" sparse_infill_line_width " ,
" internal_solid_infill_line_width " ,
" top_surface_line_width " ,
" support_line_width " ,
" initial_layer_line_width " } ;
for ( size_t i = 0 ; i < sizeof ( widths ) / sizeof ( widths [ i ] ) ; + + i ) {
std : : string key ( widths [ i ] ) ;
if ( cfg . get_abs_value ( key ) > 2.5 * max_nozzle_diameter ) {
error_message . emplace ( key , L ( " too large line width " ) + std : : to_string ( cfg . get_abs_value ( key ) ) ) ;
//return std::string("Too Large line width: ") + key;
}
}
}
// Out of range validation of numeric values.
for ( const std : : string & opt_key : cfg . keys ( ) ) {
const ConfigOption * opt = cfg . optptr ( opt_key ) ;
assert ( opt ! = nullptr ) ;
const ConfigOptionDef * optdef = print_config_def . get ( opt_key ) ;
assert ( optdef ! = nullptr ) ;
bool out_of_range = false ;
switch ( opt - > type ( ) ) {
case coFloat :
case coPercent :
case coFloatOrPercent :
{
auto * fopt = static_cast < const ConfigOptionFloat * > ( opt ) ;
out_of_range = fopt - > value < optdef - > min | | fopt - > value > optdef - > max ;
break ;
}
case coFloats :
case coPercents :
for ( double v : static_cast < const ConfigOptionVector < double > * > ( opt ) - > values )
if ( v < optdef - > min | | v > optdef - > max ) {
out_of_range = true ;
break ;
}
break ;
case coInt :
{
auto * iopt = static_cast < const ConfigOptionInt * > ( opt ) ;
out_of_range = iopt - > value < optdef - > min | | iopt - > value > optdef - > max ;
break ;
}
case coInts :
for ( int v : static_cast < const ConfigOptionVector < int > * > ( opt ) - > values )
if ( v < optdef - > min | | v > optdef - > max ) {
out_of_range = true ;
break ;
}
break ;
default : ;
}
if ( out_of_range ) {
if ( error_message . find ( opt_key ) = = error_message . end ( ) )
error_message . emplace ( opt_key , opt - > serialize ( ) + L ( " not in range " ) + " [ " + std : : to_string ( optdef - > min ) + " , " + std : : to_string ( optdef - > max ) + " ] " ) ;
//return std::string("Value out of range: " + opt_key);
}
}
// The configuration is valid.
return error_message ;
}
// Declare and initialize static caches of StaticPrintConfig derived classes.
# define PRINT_CONFIG_CACHE_ELEMENT_DEFINITION(r, data, CLASS_NAME) StaticPrintConfig::StaticCache<class Slic3r::CLASS_NAME> BOOST_PP_CAT(CLASS_NAME::s_cache_, CLASS_NAME);
# define PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION(r, data, CLASS_NAME) Slic3r::CLASS_NAME::initialize_cache();
# define PRINT_CONFIG_CACHE_INITIALIZE(CLASSES_SEQ) \
BOOST_PP_SEQ_FOR_EACH ( PRINT_CONFIG_CACHE_ELEMENT_DEFINITION , _ , BOOST_PP_TUPLE_TO_SEQ ( CLASSES_SEQ ) ) \
int print_config_static_initializer ( ) { \
/* Putting a trace here to avoid the compiler to optimize out this function. */ \
BOOST_LOG_TRIVIAL ( trace ) < < " Initializing StaticPrintConfigs " ; \
BOOST_PP_SEQ_FOR_EACH ( PRINT_CONFIG_CACHE_ELEMENT_INITIALIZATION , _ , BOOST_PP_TUPLE_TO_SEQ ( CLASSES_SEQ ) ) \
return 1 ; \
}
PRINT_CONFIG_CACHE_INITIALIZE ( (
PrintObjectConfig , PrintRegionConfig , MachineEnvelopeConfig , GCodeConfig , PrintConfig , FullPrintConfig ,
SLAMaterialConfig , SLAPrintConfig , SLAPrintObjectConfig , SLAPrinterConfig , SLAFullPrintConfig ) )
static int print_config_static_initialized = print_config_static_initializer ( ) ;
//BBS: remove unused command currently
CLIActionsConfigDef : : CLIActionsConfigDef ( )
{
ConfigOptionDef * def ;
// Actions:
/*def = this->add("export_obj", coBool);
def - > label = L ( " Export OBJ " ) ;
def - > tooltip = L ( " Export the model(s) as OBJ. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
/*
def = this - > add ( " export_svg " , coBool ) ;
def - > label = L ( " Export SVG " ) ;
def - > tooltip = L ( " Slice the model and export solid slices as SVG. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
*/
/*def = this->add("export_sla", coBool);
def - > label = L ( " Export SLA " ) ;
def - > tooltip = L ( " Slice the model and export SLA printing layers as PNG. " ) ;
def - > cli = " export-sla|sla " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
def = this - > add ( " export_3mf " , coString ) ;
def - > label = " Export 3MF " ;
def - > tooltip = " Export project as 3MF. " ;
def - > cli_params = " filename.3mf " ;
def - > set_default_value ( new ConfigOptionString ( " output.3mf " ) ) ;
def = this - > add ( " export_slicedata " , coString ) ;
def - > label = " Export slicing data " ;
def - > tooltip = " Export slicing data to a folder. " ;
def - > cli_params = " slicing_data_directory " ;
def - > set_default_value ( new ConfigOptionString ( " cached_data " ) ) ;
def = this - > add ( " load_slicedata " , coStrings ) ;
def - > label = " Load slicing data " ;
def - > tooltip = " Load cached slicing data from directory " ;
def - > cli_params = " slicing_data_directory " ;
def - > set_default_value ( new ConfigOptionString ( " cached_data " ) ) ;
/*def = this->add("export_amf", coBool);
def - > label = L ( " Export AMF " ) ;
def - > tooltip = L ( " Export the model(s) as AMF. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
def = this - > add ( " export_stl " , coBool ) ;
def - > label = " Export STL " ;
def - > tooltip = " Export the objects as single STL. " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " export_stls " , coString ) ;
def - > label = " Export multiple stls " ;
def - > tooltip = " Export the objects as multiple stls to directory " ;
def - > set_default_value ( new ConfigOptionString ( " stl_path " ) ) ;
/*def = this->add("export_gcode", coBool);
def - > label = L ( " Export G-code " ) ;
def - > tooltip = L ( " Slice the model and export toolpaths as G-code. " ) ;
def - > cli = " export-gcode|gcode|g " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
/*def = this->add("gcodeviewer", coBool);
// BBS: remove _L()
def - > label = ( " G-code viewer " ) ;
def - > tooltip = ( " Visualize an already sliced and saved G-code " ) ;
def - > cli = " gcodeviewer " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
def = this - > add ( " slice " , coInt ) ;
def - > label = " Slice " ;
def - > tooltip = " Slice the plates: 0-all plates, i-plate i, others-invalid " ;
def - > cli = " slice " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " help " , coBool ) ;
def - > label = " Help " ;
def - > tooltip = " Show command help. " ;
def - > cli = " help|h " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " uptodate " , coBool ) ;
def - > label = " UpToDate " ;
def - > tooltip = " Update the configs values of 3mf to latest. " ;
def - > cli = " uptodate " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " load_defaultfila " , coBool ) ;
def - > label = " Load default filaments " ;
def - > tooltip = " Load first filament as default for those not loaded " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " min_save " , coBool ) ;
def - > label = " Minimum save " ;
def - > tooltip = " export 3mf with minimum size. " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " mtcpp " , coInt ) ;
def - > label = " mtcpp " ;
def - > tooltip = " max triangle count per plate for slicing. " ;
def - > cli = " mtcpp " ;
def - > cli_params = " count " ;
def - > set_default_value ( new ConfigOptionInt ( 1000000 ) ) ;
def = this - > add ( " mstpp " , coInt ) ;
def - > label = " mstpp " ;
def - > tooltip = " max slicing time per plate in seconds. " ;
def - > cli = " mstpp " ;
def - > cli_params = " time " ;
def - > set_default_value ( new ConfigOptionInt ( 300 ) ) ;
// must define new params here, otherwise comamnd param check will fail
def = this - > add ( " no_check " , coBool ) ;
def - > label = L ( " No check " ) ;
def - > tooltip = L ( " Do not run any validity checks, such as gcode path conflicts check. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " normative_check " , coBool ) ;
def - > label = " Normative check " ;
def - > tooltip = " Check the normative items. " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
/*def = this->add("help_fff", coBool);
def - > label = L ( " Help (FFF options) " ) ;
def - > tooltip = L ( " Show the full list of print/G-code configuration options. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " help_sla " , coBool ) ;
def - > label = L ( " Help (SLA options) " ) ;
def - > tooltip = L ( " Show the full list of SLA print configuration options. " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
def = this - > add ( " info " , coBool ) ;
def - > label = " Output Model Info " ;
def - > tooltip = " Output the model's information. " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " export_settings " , coString ) ;
def - > label = " Export Settings " ;
def - > tooltip = " Export settings to a file. " ;
def - > cli_params = " settings.json " ;
def - > set_default_value ( new ConfigOptionString ( " output.json " ) ) ;
def = this - > add ( " pipe " , coString ) ;
def - > label = " Send progress to pipe " ;
def - > tooltip = " Send progress to pipe. " ;
def - > cli_params = " pipename " ;
def - > set_default_value ( new ConfigOptionString ( " " ) ) ;
}
//BBS: remove unused command currently
CLITransformConfigDef : : CLITransformConfigDef ( )
{
ConfigOptionDef * def ;
// Transform options:
/*def = this->add("align_xy", coPoint);
def - > label = L ( " Align XY " ) ;
def - > tooltip = L ( " Align the model to the given point. " ) ;
def - > set_default_value ( new ConfigOptionPoint ( Vec2d ( 100 , 100 ) ) ) ;
def = this - > add ( " cut " , coFloat ) ;
def - > label = L ( " Cut " ) ;
def - > tooltip = L ( " Cut model at the given Z. " ) ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ; */
/*
def = this - > add ( " cut_grid " , coFloat ) ;
def - > label = L ( " Cut " ) ;
def - > tooltip = L ( " Cut model in the XY plane into tiles of the specified max size. " ) ;
def - > set_default_value ( new ConfigOptionPoint ( ) ) ;
def = this - > add ( " cut_x " , coFloat ) ;
def - > label = L ( " Cut " ) ;
def - > tooltip = L ( " Cut model at the given X. " ) ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " cut_y " , coFloat ) ;
def - > label = L ( " Cut " ) ;
def - > tooltip = L ( " Cut model at the given Y. " ) ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
*/
/*def = this->add("center", coPoint);
def - > label = L ( " Center " ) ;
def - > tooltip = L ( " Center the print around the given center. " ) ;
def - > set_default_value ( new ConfigOptionPoint ( Vec2d ( 100 , 100 ) ) ) ; */
def = this - > add ( " arrange " , coInt ) ;
def - > label = " Arrange Options " ;
def - > tooltip = " Arrange options: 0-disable, 1-enable, others-auto " ;
def - > cli_params = " option " ;
//def->cli = "arrange|a";
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
def = this - > add ( " repetitions " , coInt ) ;
def - > label = " Repetition count " ;
def - > tooltip = " Repetition count of the whole model " ;
def - > cli_params = " count " ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " ensure_on_bed " , coBool ) ;
def - > label = " Ensure on bed " ;
def - > tooltip = " Lift the object above the bed when it is partially below. Disabled by default " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
/*def = this->add("copy", coInt);
def - > label = L ( " Copy " ) ;
def - > tooltip = L ( " Duplicate copies of model " ) ;
def - > min = 1 ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ; */
/*def = this->add("duplicate_grid", coPoint);
def - > label = L ( " Duplicate by grid " ) ;
def - > tooltip = L ( " Multiply copies by creating a grid. " ) ; */
def = this - > add ( " assemble " , coBool ) ;
def - > label = " Assemble " ;
def - > tooltip = " Arrange the supplied models in a plate and merge them in a single model in order to perform actions once. " ;
//def->cli = "merge|m";
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " convert_unit " , coBool ) ;
def - > label = " Convert Unit " ;
def - > tooltip = " Convert the units of model " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " orient " , coInt ) ;
def - > label = " Orient Options " ;
def - > tooltip = " Orient options: 0-disable, 1-enable, others-auto " ;
//def->cli = "orient|o";
def - > set_default_value ( new ConfigOptionInt ( 0 ) ) ;
/*def = this->add("repair", coBool);
def - > label = L ( " Repair " ) ;
def - > tooltip = L ( " Repair the model's meshes if it is non-manifold mesh " ) ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ; */
def = this - > add ( " rotate " , coFloat ) ;
def - > label = " Rotate " ;
def - > tooltip = " Rotation angle around the Z axis in degrees. " ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " rotate_x " , coFloat ) ;
def - > label = " Rotate around X " ;
def - > tooltip = " Rotation angle around the X axis in degrees. " ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " rotate_y " , coFloat ) ;
def - > label = " Rotate around Y " ;
def - > tooltip = " Rotation angle around the Y axis in degrees. " ;
def - > set_default_value ( new ConfigOptionFloat ( 0 ) ) ;
def = this - > add ( " scale " , coFloat ) ;
def - > label = " Scale " ;
def - > tooltip = " Scale the model by a float factor " ;
def - > cli_params = " factor " ;
def - > set_default_value ( new ConfigOptionFloat ( 1.f ) ) ;
/*def = this->add("split", coBool);
def - > label = L ( " Split " ) ;
def - > tooltip = L ( " Detect unconnected parts in the given model(s) and split them into separate objects. " ) ;
def = this - > add ( " scale_to_fit " , coPoint3 ) ;
def - > label = L ( " Scale to Fit " ) ;
def - > tooltip = L ( " Scale to fit the given volume. " ) ;
def - > set_default_value ( new ConfigOptionPoint3 ( Vec3d ( 0 , 0 , 0 ) ) ) ; */
}
CLIMiscConfigDef : : CLIMiscConfigDef ( )
{
ConfigOptionDef * def ;
/*def = this->add("ignore_nonexistent_config", coBool);
def - > label = L ( " Ignore non-existent config files " ) ;
def - > tooltip = L ( " Do not fail if a file supplied to --load does not exist. " ) ;
def = this - > add ( " config_compatibility " , coEnum ) ;
def - > label = L ( " Forward-compatibility rule when loading configurations from config files and project files (3MF, AMF). " ) ;
def - > tooltip = L ( " This version of BambuStudio may not understand configurations produced by the newest BambuStudio versions. "
" For example, newer BambuStudio may extend the list of supported firmware flavors. One may decide to "
" bail out or to substitute an unknown value with a default silently or verbosely. " ) ;
def - > enum_keys_map = & ConfigOptionEnum < ForwardCompatibilitySubstitutionRule > : : get_enum_values ( ) ;
def - > enum_values . push_back ( " disable " ) ;
def - > enum_values . push_back ( " enable " ) ;
def - > enum_values . push_back ( " enable_silent " ) ;
def - > enum_labels . push_back ( L ( " Bail out on unknown configuration values " ) ) ;
def - > enum_labels . push_back ( L ( " Enable reading unknown configuration values by verbosely substituting them with defaults. " ) ) ;
def - > enum_labels . push_back ( L ( " Enable reading unknown configuration values by silently substituting them with defaults. " ) ) ;
def - > set_default_value ( new ConfigOptionEnum < ForwardCompatibilitySubstitutionRule > ( ForwardCompatibilitySubstitutionRule : : Enable ) ) ; */
/*def = this->add("load", coStrings);
def - > label = L ( " Load config file " ) ;
def - > tooltip = L ( " Load configuration from the specified file. It can be used more than once to load options from multiple files. " ) ; */
def = this - > add ( " load_settings " , coStrings ) ;
def - > label = " Load General Settings " ;
def - > tooltip = " Load process/machine settings from the specified file " ;
def - > cli_params = " \" setting1.json;setting2.json \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " load_filaments " , coStrings ) ;
def - > label = " Load Filament Settings " ;
def - > tooltip = " Load filament settings from the specified file list " ;
def - > cli_params = " \" filament1.json;filament2.json;... \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " skip_objects " , coInts ) ;
def - > label = " Skip Objects " ;
def - > tooltip = " Skip some objects in this print " ;
def - > cli_params = " \" 3,5,10,77 \" " ;
def - > set_default_value ( new ConfigOptionInts ( ) ) ;
def = this - > add ( " clone_objects " , coInts ) ;
def - > label = " Clone Objects " ;
def - > tooltip = " Clone objects in the load list " ;
def - > cli_params = " \" 1,3,1,10 \" " ;
def - > set_default_value ( new ConfigOptionInts ( ) ) ;
def = this - > add ( " uptodate_settings " , coStrings ) ;
def - > label = " load uptodate process/machine settings when using uptodate " ;
def - > tooltip = " load uptodate process/machine settings from the specified file when using uptodate " ;
def - > cli_params = " \" setting1.json;setting2.json \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " uptodate_filaments " , coStrings ) ;
def - > label = " load uptodate filament settings when using uptodate " ;
def - > tooltip = " load uptodate filament settings from the specified file when using uptodate " ;
def - > cli_params = " \" filament1.json;filament2.json;... \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " downward_check " , coBool ) ;
def - > label = " downward machines check " ;
def - > tooltip = " if enabled, check whether current machine downward compatible with the machines in the list " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " downward_settings " , coStrings ) ;
def - > label = " downward machines settings " ;
def - > tooltip = " the machine settings list need to do downward checking " ;
def - > cli_params = " \" machine1.json;machine2.json;... \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " load_assemble_list " , coString ) ;
def - > label = " Load assemble list " ;
def - > tooltip = " Load assemble object list from config file " ;
def - > cli_params = " assemble_list.json " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
/*def = this->add("output", coString);
def - > label = L ( " Output File " ) ;
def - > tooltip = L ( " The file where the output will be written (if not specified, it will be based on the input file). " ) ;
def - > cli = " output|o " ;
def = this - > add ( " single_instance " , coBool ) ;
def - > label = L ( " Single instance mode " ) ;
def - > tooltip = L ( " If enabled, the command line arguments are sent to an existing instance of GUI BambuStudio, "
" or an existing BambuStudio window is activated. "
" Overrides the \" single_instance \" configuration value from application preferences. " ) ; */
/*
def = this - > add ( " autosave " , coString ) ;
def - > label = L ( " Autosave " ) ;
def - > tooltip = L ( " Automatically export current configuration to the specified file. " ) ;
*/
def = this - > add ( " outputdir " , coString ) ;
def - > label = " Output directory " ;
def - > tooltip = " Output directory for the exported files. " ;
def - > cli_params = " dir " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def = this - > add ( " debug " , coInt ) ;
def - > label = " Debug level " ;
def - > tooltip = " Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace \n " ;
def - > min = 0 ;
def - > cli_params = " level " ;
def - > set_default_value ( new ConfigOptionInt ( 1 ) ) ;
def = this - > add ( " enable_timelapse " , coBool ) ;
def - > label = " Enable timeplapse for print " ;
def - > tooltip = " If enabled, this slicing will be considered using timelapse " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(SLIC3R_GUI)
/*def = this->add("sw_renderer", coBool);
def - > label = L ( " Render with a software renderer " ) ;
def - > tooltip = L ( " Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver. " ) ;
def - > min = 0 ; */
# endif /* _MSC_VER */
def = this - > add ( " load_custom_gcodes " , coString ) ;
def - > label = " Load custom gcode " ;
def - > tooltip = " Load custom gcode from json " ;
def - > cli_params = " custom_gcode_toolchange.json " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def = this - > add ( " load_filament_ids " , coInts ) ;
def - > label = " Load filament ids " ;
def - > tooltip = " Load filament ids for each object " ;
def - > cli_params = " \" 1,2,3,1 \" " ;
def - > set_default_value ( new ConfigOptionInts ( ) ) ;
def = this - > add ( " allow_multicolor_oneplate " , coBool ) ;
def - > label = " Allow multiple color on one plate " ;
def - > tooltip = " If enabled, the arrange will allow multiple color on one plate " ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " allow_rotations " , coBool ) ;
def - > label = " Allow rotatations when arrange " ;
def - > tooltip = " If enabled, the arrange will allow rotations when place object " ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " avoid_extrusion_cali_region " , coBool ) ;
def - > label = " Avoid extrusion calibrate region when doing arrange " ;
def - > tooltip = " If enabled, the arrange will avoid extrusion calibrate region when place object " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " skip_modified_gcodes " , coBool ) ;
def - > label = " Skip modified gcodes in 3mf " ;
def - > tooltip = " Skip the modified gcodes in 3mf from Printer or filament Presets " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
def = this - > add ( " skip_useless_pick " , coBool ) ;
def - > label = " Skip generating useless pick/top images into 3mf " ;
def - > tooltip = " Skip generating useless pick/top images into 3mf " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( true ) ) ;
def = this - > add ( " makerlab_name " , coString ) ;
def - > label = " MakerLab name " ;
def - > tooltip = " MakerLab name to generate this 3mf " ;
def - > cli_params = " name " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def = this - > add ( " makerlab_version " , coString ) ;
def - > label = " MakerLab version " ;
def - > tooltip = " MakerLab version to generate this 3mf " ;
def - > cli_params = " version " ;
def - > set_default_value ( new ConfigOptionString ( ) ) ;
def = this - > add ( " metadata_name " , coStrings ) ;
def - > label = " metadata name list " ;
def - > tooltip = " matadata name list added into 3mf " ;
def - > cli_params = " \" name1;name2;... \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " metadata_value " , coStrings ) ;
def - > label = " metadata value list " ;
def - > tooltip = " matadata value list added into 3mf " ;
def - > cli_params = " \" value1;value2;... \" " ;
def - > set_default_value ( new ConfigOptionStrings ( ) ) ;
def = this - > add ( " allow_newer_file " , coBool ) ;
def - > label = " Allow 3mf with newer version to be sliced " ;
def - > tooltip = " Allow 3mf with newer version to be sliced " ;
def - > cli_params = " option " ;
def - > set_default_value ( new ConfigOptionBool ( false ) ) ;
}
const CLIActionsConfigDef cli_actions_config_def ;
const CLITransformConfigDef cli_transform_config_def ;
const CLIMiscConfigDef cli_misc_config_def ;
DynamicPrintAndCLIConfig : : PrintAndCLIConfigDef DynamicPrintAndCLIConfig : : s_def ;
void DynamicPrintAndCLIConfig : : handle_legacy ( t_config_option_key & opt_key , std : : string & value ) const
{
if ( cli_actions_config_def . options . find ( opt_key ) = = cli_actions_config_def . options . end ( ) & &
cli_transform_config_def . options . find ( opt_key ) = = cli_transform_config_def . options . end ( ) & &
cli_misc_config_def . options . find ( opt_key ) = = cli_misc_config_def . options . end ( ) ) {
PrintConfigDef : : handle_legacy ( opt_key , value ) ;
}
}
uint64_t ModelConfig : : s_last_timestamp = 1 ;
static Points to_points ( const std : : vector < Vec2d > & dpts )
{
Points pts ; pts . reserve ( dpts . size ( ) ) ;
for ( auto & v : dpts )
pts . emplace_back ( coord_t ( scale_ ( v . x ( ) ) ) , coord_t ( scale_ ( v . y ( ) ) ) ) ;
return pts ;
}
Points get_bed_shape ( const DynamicPrintConfig & config )
{
const auto * bed_shape_opt = config . opt < ConfigOptionPoints > ( " printable_area " ) ;
if ( ! bed_shape_opt ) {
// Here, it is certain that the bed shape is missing, so an infinite one
// has to be used, but still, the center of bed can be queried
if ( auto center_opt = config . opt < ConfigOptionPoint > ( " center " ) )
return { scaled ( center_opt - > value ) } ;
return { } ;
}
return to_points ( bed_shape_opt - > values ) ;
}
Points get_bed_shape ( const PrintConfig & cfg )
{
return to_points ( cfg . printable_area . values ) ;
}
Points get_bed_shape ( const SLAPrinterConfig & cfg ) { return to_points ( cfg . printable_area . values ) ; }
Polygon get_bed_shape_with_excluded_area ( const PrintConfig & cfg )
{
Polygon bed_poly ;
bed_poly . points = get_bed_shape ( cfg ) ;
Points excluse_area_points = to_points ( cfg . bed_exclude_area . values ) ;
Polygons exclude_polys ;
Polygon exclude_poly ;
for ( int i = 0 ; i < excluse_area_points . size ( ) ; i + + ) {
auto pt = excluse_area_points [ i ] ;
exclude_poly . points . emplace_back ( pt ) ;
if ( i % 4 = = 3 ) { // exclude areas are always rectangle
exclude_polys . push_back ( exclude_poly ) ;
exclude_poly . points . clear ( ) ;
}
}
auto tmp = diff ( { bed_poly } , exclude_polys ) ;
if ( ! tmp . empty ( ) ) bed_poly = tmp [ 0 ] ;
return bed_poly ;
}
bool has_skirt ( const DynamicPrintConfig & cfg )
{
auto opt_skirt_height = cfg . option ( " skirt_height " ) ;
auto opt_skirt_loops = cfg . option ( " skirt_loops " ) ;
auto opt_draft_shield = cfg . option ( " draft_shield " ) ;
return ( opt_skirt_height & & opt_skirt_height - > getInt ( ) > 0 & & opt_skirt_loops & & opt_skirt_loops - > getInt ( ) > 0 )
| | ( opt_draft_shield & & opt_draft_shield - > getInt ( ) ! = dsDisabled ) ;
}
float get_real_skirt_dist ( const DynamicPrintConfig & cfg ) {
return has_skirt ( cfg ) ? cfg . opt_float ( " skirt_distance " ) : 0 ;
}
} // namespace Slic3r
# include <cereal/types/polymorphic.hpp>
CEREAL_REGISTER_TYPE ( Slic3r : : DynamicPrintConfig )
CEREAL_REGISTER_POLYMORPHIC_RELATION ( Slic3r : : DynamicConfig , Slic3r : : DynamicPrintConfig )