summaryrefslogtreecommitdiff
path: root/src/rotateextrude.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-09-30 01:11:28 (GMT)
committerMarius Kintel <marius@kintel.net>2011-09-30 01:11:28 (GMT)
commitbf3fb9634c44bcd28a4e2faede72052daa1f966c (patch)
tree50096d172fa5aa4df69dec7e0f34372e4dd441f5 /src/rotateextrude.cc
parentff915961b6fac11c535742857b5923514ce18e09 (diff)
Renamed some files and classnames for clarification
Diffstat (limited to 'src/rotateextrude.cc')
-rw-r--r--src/rotateextrude.cc137
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();
+}
contact: Jan Huwald // Impressum