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

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2014-08-03 21:42:29 +0400
committerAlessandro Ranellucci <aar@cpan.org>2014-08-03 21:42:29 +0400
commit6adc3477c9d08d2cfa0e6902b3d241a9193e50d4 (patch)
tree98e1a403cec185a06501056d1811b4d39d731bf5 /xs/src/libslic3r/PlaceholderParser.cpp
parentb8676241e0c9f91eb9db5b6757e73edfe7f85598 (diff)
Moved C++ code into new libslic3r directory
Diffstat (limited to 'xs/src/libslic3r/PlaceholderParser.cpp')
-rw-r--r--xs/src/libslic3r/PlaceholderParser.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/xs/src/libslic3r/PlaceholderParser.cpp b/xs/src/libslic3r/PlaceholderParser.cpp
new file mode 100644
index 000000000..c384afa32
--- /dev/null
+++ b/xs/src/libslic3r/PlaceholderParser.cpp
@@ -0,0 +1,120 @@
+#include "PlaceholderParser.hpp"
+
+
+namespace Slic3r {
+
+
+PlaceholderParser::PlaceholderParser()
+{
+ // TODO: port these methods to C++, then call them here
+ // this->apply_env_variables();
+ // this->update_timestamp();
+}
+
+PlaceholderParser::~PlaceholderParser()
+{
+}
+
+void PlaceholderParser::apply_config(DynamicPrintConfig &config)
+{
+ // options that are set and aren't text-boxes
+ t_config_option_keys opt_keys;
+ for (t_optiondef_map::iterator i = config.def->begin();
+ i != config.def->end(); ++i)
+ {
+ const t_config_option_key &key = i->first;
+ const ConfigOptionDef &def = i->second;
+
+ if (config.has(key) && !def.multiline) {
+ opt_keys.push_back(key);
+ }
+ }
+
+ for (t_config_option_keys::iterator i = opt_keys.begin();
+ i != opt_keys.end(); ++i)
+ {
+ const t_config_option_key &key = *i;
+
+ // set placeholders for options with multiple values
+ const ConfigOptionDef &def = (*config.def)[key];
+ switch (def.type) {
+ case coFloats:
+ this->set_multiple_from_vector(key,
+ *(ConfigOptionFloats*)config.option(key));
+ break;
+
+ case coInts:
+ this->set_multiple_from_vector(key,
+ *(ConfigOptionInts*)config.option(key));
+ break;
+
+ case coStrings:
+ this->set_multiple_from_vector(key,
+ *(ConfigOptionStrings*)config.option(key));
+ break;
+
+ case coPoints:
+ this->set_multiple_from_vector(key,
+ *(ConfigOptionPoints*)config.option(key));
+ break;
+
+ case coBools:
+ this->set_multiple_from_vector(key,
+ *(ConfigOptionBools*)config.option(key));
+ break;
+
+ case coPoint:
+ {
+ const ConfigOptionPoint &opt =
+ *(ConfigOptionPoint*)config.option(key);
+
+ this->_single[key] = opt.serialize();
+
+ Pointf val = opt;
+ this->_multiple[key + "_X"] = val.x;
+ this->_multiple[key + "_Y"] = val.y;
+ }
+
+ break;
+
+ default:
+ // set single-value placeholders
+ this->_single[key] = config.serialize(key);
+ break;
+ }
+ }
+}
+
+std::ostream& operator<<(std::ostream &stm, const Pointf &pointf)
+{
+ return stm << pointf.x << "," << pointf.y;
+}
+
+template<class T>
+void PlaceholderParser::set_multiple_from_vector(const std::string &key,
+ ConfigOptionVector<T> &opt)
+{
+ const std::vector<T> &vals = opt.values;
+
+ for (size_t i = 0; i < vals.size(); ++i) {
+ std::stringstream multikey_stm;
+ multikey_stm << key << "_" << i;
+
+ std::stringstream val_stm;
+ val_stm << vals[i];
+
+ this->_multiple[multikey_stm.str()] = val_stm.str();
+ }
+
+ if (vals.size() > 0) {
+ std::stringstream val_stm;
+ val_stm << vals[0];
+ this->_multiple[key] = val_stm.str();
+ }
+}
+
+#ifdef SLIC3RXS
+REGISTER_CLASS(PlaceholderParser, "GCode::PlaceholderParser");
+#endif
+
+}