mirror of https://github.com/vitalif/openscad
Merge remote-tracking branch 'upstream/master'
commit
8baead275a
|
@ -0,0 +1,12 @@
|
|||
*.scad
|
||||
*.dmg
|
||||
*.tar*
|
||||
Makefile
|
||||
objects
|
||||
*.stl
|
||||
*.dxf
|
||||
lexer_lex.cpp
|
||||
parser_yacc.cpp
|
||||
parser_yacc.h
|
||||
tmp
|
||||
OpenSCAD.app
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
class Builtins
|
||||
{
|
||||
public:
|
||||
typedef boost::unordered_map<std::string, class AbstractFunction*> FunctionContainer;
|
||||
typedef boost::unordered_map<std::string, class AbstractModule*> ModuleContainer;
|
||||
|
||||
extern boost::unordered_map<std::string, class AbstractModule*> builtin_modules;
|
||||
extern void initialize_builtin_modules();
|
||||
extern void destroy_builtin_modules();
|
||||
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);
|
||||
|
||||
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();
|
||||
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);
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -101,5 +101,5 @@ std::string ColorNode::name() const
|
|||
|
||||
void register_builtin_color()
|
||||
{
|
||||
builtin_modules["color"] = new ColorModule();
|
||||
Builtins::init("color", new ColorModule());
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
62
src/func.cc
62
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()
|
||||
void register_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();
|
||||
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));
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -97,5 +97,5 @@ std::string ProjectionNode::toString() const
|
|||
|
||||
void register_builtin_projection()
|
||||
{
|
||||
builtin_modules["projection"] = new ProjectionModule();
|
||||
Builtins::init("projection", new ProjectionModule());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue