diff options
author | don bright <hugh.m.bright@gmail.com> | 2011-11-06 18:19:09 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2011-11-06 18:19:09 (GMT) |
commit | 8baead275affe384e2344bbbff78b046c08c8812 (patch) | |
tree | 63d741c40631a6c6f1b42a598a672a19844f9f72 | |
parent | 31a97f34e1122690cbad2c9bf01f3ede6d3da135 (diff) | |
parent | 6bb261bcd5922c69770c27d25f43c7c315c101a4 (diff) |
Merge remote-tracking branch 'upstream/master'
-rw-r--r-- | .gitignore | 12 | ||||
-rw-r--r-- | doc/TODO.txt | 2 | ||||
-rw-r--r-- | openscad.pro | 1 | ||||
-rw-r--r-- | src/builtin.cc | 86 | ||||
-rw-r--r-- | src/builtin.h | 45 | ||||
-rw-r--r-- | src/cgaladv.cc | 16 | ||||
-rw-r--r-- | src/color.cc | 2 | ||||
-rw-r--r-- | src/context.cc | 21 | ||||
-rw-r--r-- | src/control.cc | 13 | ||||
-rw-r--r-- | src/csgops.cc | 6 | ||||
-rw-r--r-- | src/dxfdim.cc | 5 | ||||
-rw-r--r-- | src/func.cc | 64 | ||||
-rw-r--r-- | src/import.cc | 9 | ||||
-rw-r--r-- | src/linearextrude.cc | 12 | ||||
-rw-r--r-- | src/module.cc | 29 | ||||
-rw-r--r-- | src/openscad.cc | 7 | ||||
-rw-r--r-- | src/primitives.cc | 22 | ||||
-rw-r--r-- | src/projection.cc | 2 | ||||
-rw-r--r-- | src/render.cc | 10 | ||||
-rw-r--r-- | src/rotateextrude.cc | 12 | ||||
-rw-r--r-- | src/surface.cc | 10 | ||||
-rw-r--r-- | src/transform.cc | 10 | ||||
-rw-r--r-- | src/value.cc | 1 | ||||
-rw-r--r-- | tests/.gitignore | 17 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/cgalpngtest.cc | 6 | ||||
-rw-r--r-- | tests/cgaltest.cc | 7 | ||||
-rw-r--r-- | tests/csgtermtest.cc | 6 | ||||
-rw-r--r-- | tests/csgtestcore.cc | 6 | ||||
-rw-r--r-- | tests/csgtexttest.cc | 6 | ||||
-rw-r--r-- | tests/dumptest.cc | 11 | ||||
-rw-r--r-- | tests/echotest.cc | 7 |
32 files changed, 259 insertions, 205 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d0c520 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*.scad +*.dmg +*.tar* +Makefile +objects +*.stl +*.dxf +lexer_lex.cpp +parser_yacc.cpp +parser_yacc.h +tmp +OpenSCAD.app
\ No newline at end of file diff --git a/doc/TODO.txt b/doc/TODO.txt index c869681..7df6a4d 100644 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -52,6 +52,7 @@ o Preferences - OpenGL params - Default language feature settings - Make the library search path configurable? + - Turn on/off caching (advanced) o MDI - Think about how to do MDI the right way - Ctrl-W should close the current dialog, not the current main window @@ -117,6 +118,7 @@ o Misc - If trying to export STL/DXF but source is newer than the CGAL rendering, ask for confirmation. - Go through keyboard shortcuts and make them more conformant to platform standards + - Show design info/stats (sizes, caches etc.) o Cmd-line - Add verbose option (PRINT command from mainwin.cc and progress output) diff --git a/openscad.pro b/openscad.pro index 89df95d..ebe5d46 100644 --- a/openscad.pro +++ b/openscad.pro @@ -223,6 +223,7 @@ SOURCES += src/openscad.cc \ src/func.cc \ src/module.cc \ src/node.cc \ + src/builtin.cc \ src/context.cc \ src/csgterm.cc \ src/polyset.cc \ diff --git a/src/builtin.cc b/src/builtin.cc new file mode 100644 index 0000000..6eb32b6 --- /dev/null +++ b/src/builtin.cc @@ -0,0 +1,86 @@ +#include "builtin.h" +#include "function.h" +#include "module.h" +#include <boost/foreach.hpp> + +Builtins *Builtins::instance(bool erase) +{ + static Builtins *s_builtins = new Builtins; + if (erase) { + delete s_builtins; + s_builtins = NULL; + } + return s_builtins; +} + +void Builtins::init(const char *name, class AbstractModule *module) +{ + Builtins::instance()->builtinmodules[name] = module; +} + +void Builtins::init(const char *name, class AbstractFunction *function) +{ + Builtins::instance()->builtinfunctions[name] = function; +} + +extern void register_builtin_functions(); +extern void register_builtin_csgops(); +extern void register_builtin_transform(); +extern void register_builtin_color(); +extern void register_builtin_primitives(); +extern void register_builtin_surface(); +extern void register_builtin_control(); +extern void register_builtin_render(); +extern void register_builtin_import(); +extern void register_builtin_projection(); +extern void register_builtin_cgaladv(); +extern void register_builtin_dxf_linear_extrude(); +extern void register_builtin_dxf_rotate_extrude(); +extern void initialize_builtin_dxf_dim(); + +/*! + Registers all builtin functions. + Call once for the whole app. +*/ +void Builtins::initialize() +{ + register_builtin_functions(); + initialize_builtin_dxf_dim(); + + init("group", new AbstractModule()); + + register_builtin_csgops(); + register_builtin_transform(); + register_builtin_color(); + register_builtin_primitives(); + register_builtin_surface(); + register_builtin_control(); + register_builtin_render(); + register_builtin_import(); + register_builtin_projection(); + register_builtin_cgaladv(); + register_builtin_dxf_linear_extrude(); + register_builtin_dxf_rotate_extrude(); + + this->deprecations["dxf_linear_extrude"] = "linear_extrude"; + this->deprecations["dxf_rotate_extrude"] = "rotate_extrude"; + this->deprecations["import_stl"] = "import"; + this->deprecations["import_dxf"] = "import"; + this->deprecations["import_off"] = "import"; +} + +std::string Builtins::isDeprecated(const std::string &name) +{ + if (this->deprecations.find(name) != this->deprecations.end()) { + return this->deprecations[name]; + } + return std::string(); +} + +Builtins::~Builtins() +{ + BOOST_FOREACH(FunctionContainer::value_type &f, this->builtinfunctions) delete f.second; + this->builtinfunctions.clear(); + BOOST_FOREACH(ModuleContainer::value_type &m, this->builtinmodules) delete m.second; + this->builtinmodules.clear(); +} diff --git a/src/builtin.h b/src/builtin.h index 643966b..bc096e5 100644 --- a/src/builtin.h +++ b/src/builtin.h @@ -4,27 +4,30 @@ #include <string> #include <boost/unordered_map.hpp> -extern boost::unordered_map<std::string, class AbstractFunction*> builtin_functions; -extern void initialize_builtin_functions(); -extern void destroy_builtin_functions(); - -extern boost::unordered_map<std::string, class AbstractModule*> builtin_modules; -extern void initialize_builtin_modules(); -extern void destroy_builtin_modules(); - -extern void register_builtin_csgops(); -extern void register_builtin_transform(); -extern void register_builtin_color(); -extern void register_builtin_primitives(); -extern void register_builtin_surface(); -extern void register_builtin_control(); -extern void register_builtin_render(); -extern void register_builtin_import(); -extern void register_builtin_projection(); -extern void register_builtin_cgaladv(); -extern void register_builtin_dxf_linear_extrude(); -extern void register_builtin_dxf_rotate_extrude(); -extern void initialize_builtin_dxf_dim(); +class Builtins +{ +public: + typedef boost::unordered_map<std::string, class AbstractFunction*> FunctionContainer; + typedef boost::unordered_map<std::string, class AbstractModule*> ModuleContainer; + + static Builtins *instance(bool erase = false); + static void init(const char *name, class AbstractModule *module); + static void init(const char *name, class AbstractFunction *function); + void initialize(); + std::string isDeprecated(const std::string &name); + + const FunctionContainer &functions() { return this->builtinfunctions; } + const ModuleContainer &modules() { return this->builtinmodules; } + +private: + Builtins() { } + ~Builtins(); + + FunctionContainer builtinfunctions; + ModuleContainer builtinmodules; + + boost::unordered_map<std::string, std::string> deprecations; +}; extern void register_builtin(class Context &ctx); diff --git a/src/cgaladv.cc b/src/cgaladv.cc index c83e18b..9abf87c 100644 --- a/src/cgaladv.cc +++ b/src/cgaladv.cc @@ -97,14 +97,6 @@ PolySet *CgaladvNode::evaluate_polyset(PolySetEvaluator *ps) const return ps->evaluatePolySet(*this); } -void register_builtin_cgaladv() -{ - builtin_modules["minkowski"] = new CgaladvModule(MINKOWSKI); - builtin_modules["glide"] = new CgaladvModule(GLIDE); - builtin_modules["subdiv"] = new CgaladvModule(SUBDIV); - builtin_modules["hull"] = new CgaladvModule(HULL); -} - std::string CgaladvNode::name() const { switch (this->type) { @@ -149,3 +141,11 @@ std::string CgaladvNode::toString() const return stream.str(); } + +void register_builtin_cgaladv() +{ + Builtins::init("minkowski", new CgaladvModule(MINKOWSKI)); + Builtins::init("glide", new CgaladvModule(GLIDE)); + Builtins::init("subdiv", new CgaladvModule(SUBDIV)); + Builtins::init("hull", new CgaladvModule(HULL)); +} diff --git a/src/color.cc b/src/color.cc index 3c6942c..304ccc1 100644 --- a/src/color.cc +++ b/src/color.cc @@ -101,5 +101,5 @@ std::string ColorNode::name() const void register_builtin_color() { - builtin_modules["color"] = new ColorModule(); + Builtins::init("color", new ColorModule()); } diff --git a/src/context.cc b/src/context.cc index 47b8a78..bd97f8f 100644 --- a/src/context.cc +++ b/src/context.cc @@ -150,20 +150,9 @@ AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const { if (this->modules_p && this->modules_p->find(inst.modname) != this->modules_p->end()) { AbstractModule *m = this->modules_p->find(inst.modname)->second; - 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."); - } - 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."); + std::string replacement = Builtins::instance()->isDeprecated(inst.modname); + if (!replacement.empty()) { + PRINTF("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", inst.modname.c_str(), replacement.c_str()); } return m->evaluate(this, &inst); } @@ -196,8 +185,8 @@ std::string Context::getAbsolutePath(const std::string &filename) const void register_builtin(Context &ctx) { - ctx.functions_p = &builtin_functions; - ctx.modules_p = &builtin_modules; + ctx.functions_p = &Builtins::instance()->functions(); + ctx.modules_p = &Builtins::instance()->modules(); ctx.set_variable("$fn", Value(0.0)); ctx.set_variable("$fs", Value(1.0)); ctx.set_variable("$fa", Value(12.0)); diff --git a/src/control.cc b/src/control.cc index 1f79254..2275c79 100644 --- a/src/control.cc +++ b/src/control.cc @@ -169,11 +169,10 @@ AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation void register_builtin_control() { - builtin_modules["child"] = new ControlModule(CHILD); - builtin_modules["echo"] = new ControlModule(ECHO); - builtin_modules["assign"] = new ControlModule(ASSIGN); - builtin_modules["for"] = new ControlModule(FOR); - builtin_modules["intersection_for"] = new ControlModule(INT_FOR); - builtin_modules["if"] = new ControlModule(IF); + Builtins::init("child", new ControlModule(CHILD)); + Builtins::init("echo", new ControlModule(ECHO)); + Builtins::init("assign", new ControlModule(ASSIGN)); + Builtins::init("for", new ControlModule(FOR)); + Builtins::init("intersection_for", new ControlModule(INT_FOR)); + Builtins::init("if", new ControlModule(IF)); } - diff --git a/src/csgops.cc b/src/csgops.cc index 7b363f0..7524559 100644 --- a/src/csgops.cc +++ b/src/csgops.cc @@ -72,8 +72,8 @@ std::string CsgNode::name() const void register_builtin_csgops() { - builtin_modules["union"] = new CsgModule(CSG_TYPE_UNION); - builtin_modules["difference"] = new CsgModule(CSG_TYPE_DIFFERENCE); - builtin_modules["intersection"] = new CsgModule(CSG_TYPE_INTERSECTION); + Builtins::init("union", new CsgModule(CSG_TYPE_UNION)); + Builtins::init("difference", new CsgModule(CSG_TYPE_DIFFERENCE)); + Builtins::init("intersection", new CsgModule(CSG_TYPE_INTERSECTION)); } diff --git a/src/dxfdim.cc b/src/dxfdim.cc index 7b016f1..c696226 100644 --- a/src/dxfdim.cc +++ b/src/dxfdim.cc @@ -194,7 +194,6 @@ Value builtin_dxf_cross(const Context *ctx, const std::vector<std::string> &argn void initialize_builtin_dxf_dim() { - builtin_functions["dxf_dim"] = new BuiltinFunction(&builtin_dxf_dim); - builtin_functions["dxf_cross"] = new BuiltinFunction(&builtin_dxf_cross); + Builtins::init("dxf_dim", new BuiltinFunction(&builtin_dxf_dim)); + Builtins::init("dxf_cross", new BuiltinFunction(&builtin_dxf_cross)); } - diff --git a/src/func.cc b/src/func.cc index b011a27..a9d5948 100644 --- a/src/func.cc +++ b/src/func.cc @@ -33,7 +33,6 @@ #include "mathc99.h" #include <algorithm> #include "stl-utils.h" -#include <boost/foreach.hpp> AbstractFunction::~AbstractFunction() { @@ -81,9 +80,6 @@ std::string Function::dump(const std::string &indent, const std::string &name) c return dump.str(); } -typedef boost::unordered_map<std::string, AbstractFunction*> BuiltinContainer; -BuiltinContainer builtin_functions; - BuiltinFunction::~BuiltinFunction() { } @@ -375,38 +371,30 @@ Value builtin_version_num(const Context *ctx, const std::vector<std::string>& ca return Value(y * 10000 + m * 100 + d); } -void initialize_builtin_functions() -{ - builtin_functions["abs"] = new BuiltinFunction(&builtin_abs); - builtin_functions["sign"] = new BuiltinFunction(&builtin_sign); - builtin_functions["rands"] = new BuiltinFunction(&builtin_rands); - builtin_functions["min"] = new BuiltinFunction(&builtin_min); - builtin_functions["max"] = new BuiltinFunction(&builtin_max); - builtin_functions["sin"] = new BuiltinFunction(&builtin_sin); - builtin_functions["cos"] = new BuiltinFunction(&builtin_cos); - builtin_functions["asin"] = new BuiltinFunction(&builtin_asin); - builtin_functions["acos"] = new BuiltinFunction(&builtin_acos); - builtin_functions["tan"] = new BuiltinFunction(&builtin_tan); - builtin_functions["atan"] = new BuiltinFunction(&builtin_atan); - builtin_functions["atan2"] = new BuiltinFunction(&builtin_atan2); - builtin_functions["round"] = new BuiltinFunction(&builtin_round); - builtin_functions["ceil"] = new BuiltinFunction(&builtin_ceil); - builtin_functions["floor"] = new BuiltinFunction(&builtin_floor); - builtin_functions["pow"] = new BuiltinFunction(&builtin_pow); - builtin_functions["sqrt"] = new BuiltinFunction(&builtin_sqrt); - builtin_functions["exp"] = new BuiltinFunction(&builtin_exp); - builtin_functions["log"] = new BuiltinFunction(&builtin_log); - builtin_functions["ln"] = new BuiltinFunction(&builtin_ln); - builtin_functions["str"] = new BuiltinFunction(&builtin_str); - builtin_functions["lookup"] = new BuiltinFunction(&builtin_lookup); - builtin_functions["version"] = new BuiltinFunction(&builtin_version); - builtin_functions["version_num"] = new BuiltinFunction(&builtin_version_num); - initialize_builtin_dxf_dim(); -} - -void destroy_builtin_functions() -{ - BOOST_FOREACH(BuiltinContainer::value_type &f, builtin_functions) delete f.second; -//std::for_each(builtin_functions.begin(), builtin_functions.end(), del_fun<AbstractFunction>()); - builtin_functions.clear(); +void register_builtin_functions() +{ + Builtins::init("abs", new BuiltinFunction(&builtin_abs)); + Builtins::init("sign", new BuiltinFunction(&builtin_sign)); + Builtins::init("rands", new BuiltinFunction(&builtin_rands)); + Builtins::init("min", new BuiltinFunction(&builtin_min)); + Builtins::init("max", new BuiltinFunction(&builtin_max)); + Builtins::init("sin", new BuiltinFunction(&builtin_sin)); + Builtins::init("cos", new BuiltinFunction(&builtin_cos)); + Builtins::init("asin", new BuiltinFunction(&builtin_asin)); + Builtins::init("acos", new BuiltinFunction(&builtin_acos)); + Builtins::init("tan", new BuiltinFunction(&builtin_tan)); + Builtins::init("atan", new BuiltinFunction(&builtin_atan)); + Builtins::init("atan2", new BuiltinFunction(&builtin_atan2)); + Builtins::init("round", new BuiltinFunction(&builtin_round)); + Builtins::init("ceil", new BuiltinFunction(&builtin_ceil)); + Builtins::init("floor", new BuiltinFunction(&builtin_floor)); + Builtins::init("pow", new BuiltinFunction(&builtin_pow)); + Builtins::init("sqrt", new BuiltinFunction(&builtin_sqrt)); + Builtins::init("exp", new BuiltinFunction(&builtin_exp)); + Builtins::init("log", new BuiltinFunction(&builtin_log)); + Builtins::init("ln", new BuiltinFunction(&builtin_ln)); + Builtins::init("str", new BuiltinFunction(&builtin_str)); + Builtins::init("lookup", new BuiltinFunction(&builtin_lookup)); + Builtins::init("version", new BuiltinFunction(&builtin_version)); + Builtins::init("version_num", new BuiltinFunction(&builtin_version_num)); } diff --git a/src/import.cc b/src/import.cc index 8a3b0a4..880823d 100644 --- a/src/import.cc +++ b/src/import.cc @@ -251,9 +251,8 @@ std::string ImportNode::name() const 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(); + Builtins::init("import_stl", new ImportModule(TYPE_STL)); + Builtins::init("import_off", new ImportModule(TYPE_OFF)); + Builtins::init("import_dxf", new ImportModule(TYPE_DXF)); + Builtins::init("import", new ImportModule()); } - diff --git a/src/linearextrude.cc b/src/linearextrude.cc index 019f606..d1d2841 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -114,12 +114,6 @@ AbstractNode *LinearExtrudeModule::evaluate(const Context *ctx, const ModuleInst return node; } -void register_builtin_dxf_linear_extrude() -{ - builtin_modules["dxf_linear_extrude"] = new LinearExtrudeModule(); - builtin_modules["linear_extrude"] = new LinearExtrudeModule(); -} - class PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { @@ -161,3 +155,9 @@ std::string LinearExtrudeNode::toString() const return stream.str(); } + +void register_builtin_dxf_linear_extrude() +{ + Builtins::init("dxf_linear_extrude", new LinearExtrudeModule()); + Builtins::init("linear_extrude", new LinearExtrudeModule()); +} diff --git a/src/module.cc b/src/module.cc index 0b17ff7..269e128 100644 --- a/src/module.cc +++ b/src/module.cc @@ -29,7 +29,6 @@ #include "context.h" #include "expression.h" #include "function.h" -#include "builtin.h" #include "printutils.h" #include <boost/foreach.hpp> #include <sstream> @@ -201,31 +200,3 @@ std::string Module::dump(const std::string &indent, const std::string &name) con } return dump.str(); } - -Module::AbstractModuleContainer builtin_modules; - -void initialize_builtin_modules() -{ - builtin_modules["group"] = new AbstractModule(); - - register_builtin_csgops(); - register_builtin_transform(); - register_builtin_color(); - register_builtin_primitives(); - register_builtin_surface(); - register_builtin_control(); - register_builtin_render(); - register_builtin_import(); - register_builtin_projection(); - register_builtin_cgaladv(); - register_builtin_dxf_linear_extrude(); - register_builtin_dxf_rotate_extrude(); -} - -void destroy_builtin_modules() -{ - BOOST_FOREACH(Module::AbstractModuleContainer::value_type &m, builtin_modules) { - delete m.second; - } - builtin_modules.clear(); -} diff --git a/src/openscad.cc b/src/openscad.cc index 84d6263..678d87a 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -101,8 +101,7 @@ int main(int argc, char **argv) // (which we don't catch). This gives us stack traces without rerunning in gdb. CGAL::set_error_behaviour(CGAL::ABORT); #endif - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); #ifdef Q_WS_X11 // see <http://qt.nokia.com/doc/4.5/qapplication.html#QApplication-2>: @@ -124,6 +123,7 @@ int main(int argc, char **argv) QCoreApplication::setOrganizationName("OpenSCAD"); QCoreApplication::setOrganizationDomain("openscad.org"); QCoreApplication::setApplicationName("OpenSCAD"); + QCoreApplication::setApplicationVersion(TOSTRING(OPENSCAD_VERSION)); const char *filename = NULL; const char *output_file = NULL; @@ -408,8 +408,7 @@ int main(int argc, char **argv) exit(1); } - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/src/primitives.cc b/src/primitives.cc index a651ff8..b18a816 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -236,17 +236,6 @@ AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const ModuleInstanti return node; } -void register_builtin_primitives() -{ - builtin_modules["cube"] = new PrimitiveModule(CUBE); - builtin_modules["sphere"] = new PrimitiveModule(SPHERE); - builtin_modules["cylinder"] = new PrimitiveModule(CYLINDER); - builtin_modules["polyhedron"] = new PrimitiveModule(POLYHEDRON); - builtin_modules["square"] = new PrimitiveModule(SQUARE); - builtin_modules["circle"] = new PrimitiveModule(CIRCLE); - builtin_modules["polygon"] = new PrimitiveModule(POLYGON); -} - /*! Returns the number of subdivision of a whole circle, given radius and the three special variables $fn, $fs and $fa @@ -606,3 +595,14 @@ std::string PrimitiveNode::toString() const return stream.str(); } + +void register_builtin_primitives() +{ + Builtins::init("cube", new PrimitiveModule(CUBE)); + Builtins::init("sphere", new PrimitiveModule(SPHERE)); + Builtins::init("cylinder", new PrimitiveModule(CYLINDER)); + Builtins::init("polyhedron", new PrimitiveModule(POLYHEDRON)); + Builtins::init("square", new PrimitiveModule(SQUARE)); + Builtins::init("circle", new PrimitiveModule(CIRCLE)); + Builtins::init("polygon", new PrimitiveModule(POLYGON)); +} diff --git a/src/projection.cc b/src/projection.cc index 1333d19..a712800 100644 --- a/src/projection.cc +++ b/src/projection.cc @@ -97,5 +97,5 @@ std::string ProjectionNode::toString() const void register_builtin_projection() { - builtin_modules["projection"] = new ProjectionModule(); + Builtins::init("projection", new ProjectionModule()); } diff --git a/src/render.cc b/src/render.cc index b79fa56..7b0ced5 100644 --- a/src/render.cc +++ b/src/render.cc @@ -67,11 +67,6 @@ class PolySet *RenderNode::evaluate_polyset(PolySetEvaluator *ps) const return ps->evaluatePolySet(*this); } -void register_builtin_render() -{ - builtin_modules["render"] = new RenderModule(); -} - std::string RenderNode::toString() const { std::stringstream stream; @@ -80,3 +75,8 @@ std::string RenderNode::toString() const return stream.str(); } + +void register_builtin_render() +{ + Builtins::init("render", new RenderModule()); +} diff --git a/src/rotateextrude.cc b/src/rotateextrude.cc index 13e5db0..ae8793d 100644 --- a/src/rotateextrude.cc +++ b/src/rotateextrude.cc @@ -92,12 +92,6 @@ AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInst 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) { @@ -133,3 +127,9 @@ std::string RotateExtrudeNode::toString() const return stream.str(); } + +void register_builtin_dxf_rotate_extrude() +{ + Builtins::init("dxf_rotate_extrude", new RotateExtrudeModule()); + Builtins::init("rotate_extrude", new RotateExtrudeModule()); +} diff --git a/src/surface.cc b/src/surface.cc index 8349afd..cdac4ec 100644 --- a/src/surface.cc +++ b/src/surface.cc @@ -92,11 +92,6 @@ AbstractNode *SurfaceModule::evaluate(const Context *ctx, const ModuleInstantiat return node; } -void register_builtin_surface() -{ - builtin_modules["surface"] = new SurfaceModule(); -} - PolySet *SurfaceNode::evaluate_polyset(class PolySetEvaluator *) const { handle_dep(filename); @@ -219,3 +214,8 @@ std::string SurfaceNode::toString() const return stream.str(); } + +void register_builtin_surface() +{ + Builtins::init("surface", new SurfaceModule()); +} diff --git a/src/transform.cc b/src/transform.cc index eda69c2..f5038b1 100644 --- a/src/transform.cc +++ b/src/transform.cc @@ -206,9 +206,9 @@ std::string TransformNode::name() const void register_builtin_transform() { - builtin_modules["scale"] = new TransformModule(SCALE); - builtin_modules["rotate"] = new TransformModule(ROTATE); - builtin_modules["mirror"] = new TransformModule(MIRROR); - builtin_modules["translate"] = new TransformModule(TRANSLATE); - builtin_modules["multmatrix"] = new TransformModule(MULTMATRIX); + Builtins::init("scale", new TransformModule(SCALE)); + Builtins::init("rotate", new TransformModule(ROTATE)); + Builtins::init("mirror", new TransformModule(MIRROR)); + Builtins::init("translate", new TransformModule(TRANSLATE)); + Builtins::init("multmatrix", new TransformModule(MULTMATRIX)); } diff --git a/src/value.cc b/src/value.cc index 44a4b88..6685594 100644 --- a/src/value.cc +++ b/src/value.cc @@ -341,7 +341,6 @@ std::string Value::toString() const switch (this->type) { case STRING: - // FIXME: Escape special characters when outputting stream << '"' << this->text << '"'; break; case VECTOR: diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..6b839c5 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,17 @@ +*-output +CMakeFiles +CMakeCache.txt +CTestTestfile.cmake +Testing +cmake_install.cmake +lexer.cpp +parser_yacc.c +cgalpngtest +cgaltest +csgtermtest +csgtexttest +dumptest +echotest +opencsgtest +throwntogethertest +yee_compare diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 88b828e..dda4aea 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -192,6 +192,7 @@ set(CORE_SOURCES ../src/func.cc ../src/module.cc ../src/node.cc + ../src/builtin.cc ../src/context.cc ../src/csgterm.cc ../src/polyset.cc diff --git a/tests/cgalpngtest.cc b/tests/cgalpngtest.cc index 02ee35e..e9e1f7b 100644 --- a/tests/cgalpngtest.cc +++ b/tests/cgalpngtest.cc @@ -100,8 +100,7 @@ int main(int argc, char **argv) const char *filename = argv[1]; const char *outfile = argv[2]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -212,8 +211,7 @@ int main(int argc, char **argv) csgInfo.glview->paintGL(); csgInfo.glview->save(outfile); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return 0; } diff --git a/tests/cgaltest.cc b/tests/cgaltest.cc index 0cbd89a..0b433bf 100644 --- a/tests/cgaltest.cc +++ b/tests/cgaltest.cc @@ -84,8 +84,7 @@ int main(int argc, char **argv) const char *filename = argv[1]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -142,8 +141,8 @@ int main(int argc, char **argv) if (!N.empty()) { export_stl(&N, std::cout, NULL); } - destroy_builtin_functions(); - destroy_builtin_modules(); + + Builtins::instance(true); return 0; } diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc index 5268b28..c8fcc6b 100644 --- a/tests/csgtermtest.cc +++ b/tests/csgtermtest.cc @@ -69,8 +69,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -145,8 +144,7 @@ int main(int argc, char **argv) } outfile.close(); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc index 57e397e..034084c 100644 --- a/tests/csgtestcore.cc +++ b/tests/csgtestcore.cc @@ -77,8 +77,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) const char *filename = argv[1]; const char *outfilename = argv[2]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); @@ -217,8 +216,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) csgInfo.glview->save(outfilename); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return 0; } diff --git a/tests/csgtexttest.cc b/tests/csgtexttest.cc index ca28e37..76f6eb1 100644 --- a/tests/csgtexttest.cc +++ b/tests/csgtexttest.cc @@ -72,8 +72,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -130,8 +129,7 @@ int main(int argc, char **argv) outfile << csgcache[*root_node] << "\n"; outfile.close(); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/dumptest.cc b/tests/dumptest.cc index d2fd9b1..5f2f22f 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -65,6 +65,10 @@ string dumptree(const Tree &tree, const AbstractNode &node) int main(int argc, char **argv) { +#ifdef WIN32 + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + if (argc != 3) { fprintf(stderr, "Usage: %s <file.scad> <output.txt>\n", argv[0]); exit(1); @@ -75,8 +79,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -159,9 +162,7 @@ int main(int argc, char **argv) exit(1); } - - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/echotest.cc b/tests/echotest.cc index d1d1f9b..5ab9efa 100644 --- a/tests/echotest.cc +++ b/tests/echotest.cc @@ -76,8 +76,7 @@ int main(int argc, char **argv) } set_output_handler(&outfile_handler, &ofile); - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -121,9 +120,7 @@ int main(int argc, char **argv) AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); - destroy_builtin_functions(); - destroy_builtin_modules(); - + Builtins::instance(true); ofile.close(); return rc; } |