mirror of https://github.com/vitalif/openscad
Added support for an untyped import() module, deprecating the explicitly typed import_*() ones
parent
9ec9111dcb
commit
f40f7ef072
|
@ -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) {
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
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,18 +218,6 @@ 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 << "\", "
|
||||
|
@ -236,27 +225,20 @@ std::string ImportNode::toString() const
|
|||
"scale = " << this->scale << ", "
|
||||
"convexity = " << this->convexity << ", "
|
||||
"$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")";
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "visitor.h"
|
||||
|
||||
enum import_type_e {
|
||||
TYPE_UNKNOWN,
|
||||
TYPE_STL,
|
||||
TYPE_OFF,
|
||||
TYPE_DXF
|
||||
|
|
Loading…
Reference in New Issue