summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-09-06 22:47:55 (GMT)
committerMarius Kintel <marius@kintel.net>2011-09-06 22:47:55 (GMT)
commitf40f7ef072927cd9ea18104e66217c31cfd810db (patch)
treecc5a2ab8638bce50359412ca2971239b69714f46 /src
parent9ec9111dcbac7414e503a8a3d01cfb66ce7184c9 (diff)
Added support for an untyped import() module, deprecating the explicitly typed import_*() ones
Diffstat (limited to 'src')
-rw-r--r--src/context.cc11
-rw-r--r--src/import.cc94
-rw-r--r--src/importnode.h1
3 files changed, 49 insertions, 57 deletions
diff --git a/src/context.cc b/src/context.cc
index 0100234..b4983f6 100644
--- a/src/context.cc
+++ b/src/context.cc
@@ -153,9 +153,18 @@ AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const
if (m == builtin_modules["dxf_linear_extrude"]) {
PRINTF("DEPRECATED: The dxf_linear_extrude() module will be removed in future releases. Use a linear_extrude() instead.");
}
- if (m == builtin_modules["dxf_rotate_extrude"]) {
+ else if (m == builtin_modules["dxf_rotate_extrude"]) {
PRINTF("DEPRECATED: The dxf_rotate_extrude() module will be removed in future releases. Use a rotate_extrude() instead.");
}
+ else if (m == builtin_modules["import_stl"]) {
+ PRINTF("DEPRECATED: The import_stl() module will be removed in future releases. Use import() instead.");
+ }
+ else if (m == builtin_modules["import_dxf"]) {
+ PRINTF("DEPRECATED: The import_dxf() module will be removed in future releases. Use import() instead.");
+ }
+ else if (m == builtin_modules["import_off"]) {
+ PRINTF("DEPRECATED: The import_off() module will be removed in future releases. Use import() instead.");
+ }
return m->evaluate(this, &inst);
}
if (this->usedlibs_p) {
diff --git a/src/import.cc b/src/import.cc
index 447c139..17ad3f2 100644
--- a/src/import.cc
+++ b/src/import.cc
@@ -49,20 +49,14 @@ class ImportModule : public AbstractModule
{
public:
import_type_e type;
- ImportModule(import_type_e type) : type(type) { }
+ ImportModule(import_type_e type = TYPE_UNKNOWN) : type(type) { }
virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const;
};
AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const
{
- ImportNode *node = new ImportNode(inst, type);
-
std::vector<std::string> argnames;
- if (this->type == TYPE_DXF) {
- argnames += "file", "layer", "convexity", "origin", "scale";
- } else {
- argnames += "file", "convexity";
- }
+ argnames += "file", "layer", "convexity", "origin", "scale";
std::vector<Expression*> argexpr;
// Map old argnames to new argnames for compatibility
@@ -77,13 +71,23 @@ AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiati
Context c(ctx);
c.args(argnames, argexpr, inst_argnames, inst->argvalues);
+ Value v = c.lookup_variable("file");
+ std::string filename = c.getAbsolutePath(v.text);
+ import_type_e actualtype = this->type;
+ if (actualtype == TYPE_UNKNOWN) {
+ QFileInfo fi(QString::fromStdString(filename));
+ if (fi.suffix().toLower() == "stl") actualtype = TYPE_STL;
+ else if (fi.suffix().toLower() == "off") actualtype = TYPE_OFF;
+ else if (fi.suffix().toLower() == "dxf") actualtype = TYPE_DXF;
+ }
+
+ ImportNode *node = new ImportNode(inst, actualtype);
+
node->fn = c.lookup_variable("$fn").num;
node->fs = c.lookup_variable("$fs").num;
node->fa = c.lookup_variable("$fa").num;
- Value v = c.lookup_variable("file");
- node->filename = c.getAbsolutePath(v.text);
-// node->filename = c.getAbsolutePath(c.lookup_variable("file").text);
+ node->filename = filename;
node->layername = c.lookup_variable("layer", true).text;
node->convexity = c.lookup_variable("convexity", true).num;
@@ -102,13 +106,6 @@ AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiati
return node;
}
-void register_builtin_import()
-{
- builtin_modules["import_stl"] = new ImportModule(TYPE_STL);
- builtin_modules["import_off"] = new ImportModule(TYPE_OFF);
- builtin_modules["import_dxf"] = new ImportModule(TYPE_DXF);
-}
-
PolySet *ImportNode::evaluate_polyset(render_mode_e, class PolySetEvaluator *) const
{
PolySet *p = new PolySet();
@@ -191,18 +188,22 @@ PolySet *ImportNode::evaluate_polyset(render_mode_e, class PolySetEvaluator *) c
}
}
- if (this->type == TYPE_OFF)
+ else if (this->type == TYPE_OFF)
{
PRINTF("WARNING: OFF import is not implemented yet.");
}
- if (this->type == TYPE_DXF)
+ else if (this->type == TYPE_DXF)
{
DxfData dd(this->fn, this->fs, this->fa, this->filename, this->layername, this->origin_x, this->origin_y, this->scale);
p->is2d = true;
dxf_tesselate(p, dd, 0, true, false, 0);
dxf_border_to_ps(p, dd);
}
+ else
+ {
+ PRINTF("ERROR: Unsupported file format while trying to import file '%s'", this->filename.c_str());
+ }
return p;
}
@@ -217,46 +218,27 @@ std::string ImportNode::toString() const
stat(this->filename.c_str(), &st);
stream << this->name();
- switch (this->type) {
- case TYPE_STL:
- stream << "(file = \"" << this->filename << "\", "
- "cache = \"" << std::hex << (int)st.st_mtime << "." << (int)st.st_size << "\", "
- "convexity = " << std::dec << this->convexity << ")";
- break;
- case TYPE_OFF:
- stream << "(file = \"" << this->filename << "\", "
- "cache = \"" << std::hex << (int)st.st_mtime << "." << (int)st.st_size << "\", "
- "convexity = " << std::dec << this->convexity << ")";
- break;
- case TYPE_DXF:
- stream << "(file = \"" << this->filename << "\", "
- "cache = \"" << std::hex << (int)st.st_mtime << "." << (int)st.st_size << "\", "
- "layer = \"" << this->layername << "\", "
- "origin = [ " << std::dec << this->origin_x << " " << this->origin_y << " ], "
- "scale = " << this->scale << ", "
- "convexity = " << this->convexity << ", "
- "$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")";
- break;
- default:
- assert(false);
- }
+ stream << "(file = \"" << this->filename << "\", "
+ "cache = \"" << std::hex << (int)st.st_mtime << "." << (int)st.st_size << "\", "
+ "layer = \"" << this->layername << "\", "
+ "origin = [ " << std::dec << this->origin_x << " " << this->origin_y << " ], "
+ "scale = " << this->scale << ", "
+ "convexity = " << this->convexity << ", "
+ "$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")";
return stream.str();
}
std::string ImportNode::name() const
{
- switch (this->type) {
- case TYPE_STL:
- return "import_stl";
- break;
- case TYPE_OFF:
- return "import_off";
- break;
- case TYPE_DXF:
- return "import_dxf";
- break;
- default:
- assert(false);
- }
+ return "import";
}
+
+void register_builtin_import()
+{
+ builtin_modules["import_stl"] = new ImportModule(TYPE_STL);
+ builtin_modules["import_off"] = new ImportModule(TYPE_OFF);
+ builtin_modules["import_dxf"] = new ImportModule(TYPE_DXF);
+ builtin_modules["import"] = new ImportModule();
+}
+
diff --git a/src/importnode.h b/src/importnode.h
index 3fcdb37..49e9f16 100644
--- a/src/importnode.h
+++ b/src/importnode.h
@@ -5,6 +5,7 @@
#include "visitor.h"
enum import_type_e {
+ TYPE_UNKNOWN,
TYPE_STL,
TYPE_OFF,
TYPE_DXF
contact: Jan Huwald // Impressum