diff options
author | Marius Kintel <marius@kintel.net> | 2011-09-30 01:11:28 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-09-30 01:11:28 (GMT) |
commit | bf3fb9634c44bcd28a4e2faede72052daa1f966c (patch) | |
tree | 50096d172fa5aa4df69dec7e0f34372e4dd441f5 /src/rotateextrude.cc | |
parent | ff915961b6fac11c535742857b5923514ce18e09 (diff) |
Renamed some files and classnames for clarification
Diffstat (limited to 'src/rotateextrude.cc')
-rw-r--r-- | src/rotateextrude.cc | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/rotateextrude.cc b/src/rotateextrude.cc new file mode 100644 index 0000000..3a6eb55 --- /dev/null +++ b/src/rotateextrude.cc @@ -0,0 +1,137 @@ +/* + * OpenSCAD (www.openscad.org) + * Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and + * Marius Kintel <marius@kintel.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * As a special exception, you have permission to link this program + * with the CGAL library and distribute executables, as long as you + * follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from CGAL. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "rotateextrudenode.h" +#include "module.h" +#include "context.h" +#include "printutils.h" +#include "builtin.h" +#include "polyset.h" +#include "dxfdata.h" +#include "progress.h" +#include "visitor.h" +#include "PolySetEvaluator.h" +#include "openscad.h" // get_fragments_from_r() + +#include <sstream> +#include <boost/assign/std/vector.hpp> +using namespace boost::assign; // bring 'operator+=()' into scope + +#include <QFileInfo> + +class RotateExtrudeModule : public AbstractModule +{ +public: + RotateExtrudeModule() { } + virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; +}; + +AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const +{ + RotateExtrudeNode *node = new RotateExtrudeNode(inst); + + std::vector<std::string> argnames; + argnames += "file", "layer", "origin", "scale"; + std::vector<Expression*> argexpr; + + Context c(ctx); + c.args(argnames, argexpr, inst->argnames, inst->argvalues); + + node->fn = c.lookup_variable("$fn").num; + node->fs = c.lookup_variable("$fs").num; + node->fa = c.lookup_variable("$fa").num; + + Value file = c.lookup_variable("file"); + Value layer = c.lookup_variable("layer", true); + Value convexity = c.lookup_variable("convexity", true); + Value origin = c.lookup_variable("origin", true); + Value scale = c.lookup_variable("scale", true); + + if (!file.text.empty()) { + PRINTF("DEPRECATED: Support for reading files in rotate_extrude will be removed in future releases. Use a child import() instead."); + node->filename = c.getAbsolutePath(file.text); + } + + node->layername = layer.text; + node->convexity = (int)convexity.num; + origin.getv2(node->origin_x, node->origin_y); + node->scale = scale.num; + + if (node->convexity <= 0) + node->convexity = 1; + + if (node->scale <= 0) + node->scale = 1; + + if (node->filename.empty()) { + std::vector<AbstractNode *> evaluatednodes = inst->evaluateChildren(); + node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); + } + + return node; +} + +void register_builtin_dxf_rotate_extrude() +{ + builtin_modules["dxf_rotate_extrude"] = new RotateExtrudeModule(); + builtin_modules["rotate_extrude"] = new RotateExtrudeModule(); +} + +PolySet *RotateExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const +{ + if (!evaluator) { + PRINTF("WARNING: No suitable PolySetEvaluator found for %s module!", this->name().c_str()); + return NULL; + } + + print_messages_push(); + + PolySet *ps = evaluator->evaluatePolySet(*this); + + print_messages_pop(); + + return ps; +} + +std::string RotateExtrudeNode::toString() const +{ + std::stringstream stream; + + stream << this->name() << "("; + if (!this->filename.empty()) { // Ignore deprecated parameters if empty + stream << + "file = \"" << this->filename << "\", " + "cache = \"" << QFileInfo(QString::fromStdString(this->filename)) << "\", " + "layer = \"" << this->layername << "\", " + "origin = [ " << std::dec << this->origin_x << " " << this->origin_y << " ], " + "scale = " << this->scale << ", "; + } + stream << + "convexity = " << this->convexity << ", " + "$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")"; + + return stream.str(); +} |