2013-12-07 15:14:30 +00:00
# ifndef slic3r_Config_hpp_
# define slic3r_Config_hpp_
# include <myinit.h>
# include <map>
# include <string>
# include <vector>
2013-12-20 15:37:28 +00:00
namespace Slic3r {
2013-12-07 15:14:30 +00:00
typedef std : : string t_config_option_key ;
typedef std : : vector < std : : string > t_config_option_keys ;
2013-12-20 15:37:28 +00:00
class ConfigOption {
public :
virtual ~ ConfigOption ( ) { } ;
} ;
class ConfigOptionFloat : public ConfigOption
2013-12-07 15:14:30 +00:00
{
public :
2013-12-20 15:37:28 +00:00
float value ;
operator float ( ) const { return this - > value ; } ;
} ;
class ConfigOptionInt : public ConfigOption
{
public :
int value ;
operator int ( ) const { return this - > value ; } ;
} ;
class ConfigOptionString : public ConfigOption
{
public :
std : : string value ;
operator std : : string ( ) const { return this - > value ; } ;
} ;
class ConfigOptionFloatOrPercent : public ConfigOption
{
public :
float value ;
bool percent ;
2013-12-07 15:14:30 +00:00
} ;
enum ConfigOptionType {
coFloat ,
coInt ,
coString ,
2013-12-20 15:37:28 +00:00
coFloatOrPercent ,
2013-12-07 15:14:30 +00:00
} ;
class ConfigOptionDef
{
public :
ConfigOptionType type ;
std : : string label ;
std : : string tooltip ;
} ;
typedef std : : map < t_config_option_key , ConfigOptionDef > t_optiondef_map ;
class ConfigBase
{
public :
virtual ConfigOption * option ( const t_config_option_key opt_key ) = 0 ;
virtual void keys ( t_config_option_keys * keys ) = 0 ;
2013-12-20 15:37:28 +00:00
void apply ( ConfigBase & other , bool ignore_nonexistent = false ) ;
2013-12-07 15:14:30 +00:00
2013-12-20 15:37:28 +00:00
# ifdef SLIC3RXS
SV * get ( t_config_option_key opt_key ) ;
# endif
2013-12-07 15:14:30 +00:00
} ;
class DynamicConfig : public ConfigBase
{
public :
2013-12-20 15:37:28 +00:00
ConfigOption * option ( const t_config_option_key opt_key ) ;
void keys ( t_config_option_keys * keys ) ;
bool has ( const t_config_option_key opt_key ) const ;
2013-12-07 15:14:30 +00:00
2013-12-20 15:37:28 +00:00
private :
typedef std : : map < t_config_option_key , ConfigOption * > t_options_map ;
t_options_map options ;
2013-12-07 15:14:30 +00:00
} ;
class StaticConfig : public ConfigBase
{
public :
2013-12-20 15:37:28 +00:00
void keys ( t_config_option_keys * keys ) ;
2013-12-07 15:14:30 +00:00
} ;
class FullConfig : public StaticConfig
{
public :
2013-12-20 15:37:28 +00:00
ConfigOptionFloat layer_height ;
ConfigOptionFloatOrPercent first_layer_height ;
2013-12-07 15:14:30 +00:00
ConfigOption * option ( const t_config_option_key opt_key ) {
if ( opt_key = = " layer_height " ) return & this - > layer_height ;
if ( opt_key = = " first_layer_height " ) return & this - > first_layer_height ;
return NULL ;
} ;
} ;
2013-12-20 15:37:28 +00:00
static t_optiondef_map _build_optiondef_map ( ) {
t_optiondef_map Options ;
Options [ " layer_height " ] . type = coFloat ;
Options [ " layer_height " ] . label = " Layer height " ;
Options [ " layer_height " ] . tooltip = " This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print. " ;
Options [ " first_layer_height " ] . type = coFloatOrPercent ;
return Options ;
}
static FullConfig _build_default_config ( ) {
FullConfig defconf ;
defconf . layer_height . value = 0.4 ;
defconf . first_layer_height . value = 0.35 ;
defconf . first_layer_height . percent = false ;
return defconf ;
}
2013-12-07 15:14:30 +00:00
}
# endif