diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Preferences.cc | 8 | ||||
-rw-r--r-- | src/control.cc | 6 | ||||
-rw-r--r-- | src/csgtermnormalizer.cc | 2 | ||||
-rw-r--r-- | src/func.cc | 8 | ||||
-rw-r--r-- | src/mainwin.cc | 17 | ||||
-rw-r--r-- | src/openscad.cc | 10 | ||||
-rw-r--r-- | src/svg.cc | 3 |
7 files changed, 40 insertions, 14 deletions
diff --git a/src/Preferences.cc b/src/Preferences.cc index e70a2a1..ec66094 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -30,7 +30,9 @@ #include <QKeyEvent> #include <QSettings> #include "PolySetCache.h" +#ifdef ENABLE_CGAL #include "CGALCache.h" +#endif Preferences *Preferences::instance = NULL; @@ -75,7 +77,9 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) this->defaultmap["advanced/opencsg_show_warning"] = true; this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; this->defaultmap["advanced/polysetCacheSize"] = uint(PolySetCache::instance()->maxSize()); +#ifdef ENABLE_CGAL this->defaultmap["advanced/cgalCacheSize"] = uint(CGALCache::instance()->maxSize()); +#endif this->defaultmap["advanced/openCSGLimit"] = 2000; this->defaultmap["advanced/forceGoldfeather"] = false; @@ -126,7 +130,9 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) // Advanced pane QValidator *validator = new QIntValidator(this); +#ifdef ENABLE_CGAL this->cgalCacheSizeEdit->setValidator(validator); +#endif this->polysetCacheSizeEdit->setValidator(validator); this->opencsgLimitEdit->setValidator(validator); @@ -198,7 +204,9 @@ void Preferences::on_cgalCacheSizeEdit_textChanged(const QString &text) { QSettings settings; settings.setValue("advanced/cgalCacheSize", text); +#ifdef ENABLE_CGAL CGALCache::instance()->setMaxSize(text.toULong()); +#endif } void Preferences::on_polysetCacheSizeEdit_textChanged(const QString &text) diff --git a/src/control.cc b/src/control.cc index bdd0f40..44847f5 100644 --- a/src/control.cc +++ b/src/control.cc @@ -96,8 +96,10 @@ AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation size_t n = 0; if (inst->argvalues.size() > 0) { double v; - if (inst->argvalues[0].getDouble(v)) - n = v; + if (inst->argvalues[0].getDouble(v)) { + if (v < 0) return NULL; // Disallow negative child indices + n = trunc(v); + } } for (int i = Context::ctx_stack.size()-1; i >= 0; i--) { const Context *c = Context::ctx_stack[i]; diff --git a/src/csgtermnormalizer.cc b/src/csgtermnormalizer.cc index e2474e9..81fab80 100644 --- a/src/csgtermnormalizer.cc +++ b/src/csgtermnormalizer.cc @@ -20,7 +20,7 @@ shared_ptr<CSGTerm> CSGTermNormalizer::normalize(const shared_ptr<CSGTerm> &root PRINTB("WARNING: Normalized tree is growing past %d elements. Aborting normalization.\n", this->limit); // Clean up any partially evaluated terms shared_ptr<CSGTerm> newroot = root, tmproot; - while (newroot != tmproot) { + while (newroot && newroot != tmproot) { tmproot = newroot; newroot = collapse_null_terms(tmproot); } diff --git a/src/func.cc b/src/func.cc index 5dcb3e9..791e957 100644 --- a/src/func.cc +++ b/src/func.cc @@ -43,7 +43,7 @@ */ #include <boost/random/mersenne_twister.hpp> -#include <boost/random/uniform_real_distribution.hpp> +#include <boost/random/uniform_real.hpp> #ifdef __WIN32__ #include <process.h> @@ -54,8 +54,8 @@ int process_id = _getpid(); int process_id = getpid(); #endif -boost::random::mt19937 deterministic_rng; -boost::random::mt19937 lessdeterministic_rng( std::time(0) + process_id ); +boost::mt19937 deterministic_rng; +boost::mt19937 lessdeterministic_rng( std::time(0) + process_id ); AbstractFunction::~AbstractFunction() { @@ -167,7 +167,7 @@ Value builtin_rands(const Context *, const std::vector<std::string>&, const std: double min = std::min( args[0].toDouble(), args[1].toDouble() ); double max = std::max( args[0].toDouble(), args[1].toDouble() ); - boost::random::uniform_real_distribution<> distributor( min, max ); + boost::uniform_real<> distributor( min, max ); Value::VectorType vec; for (int i=0; i<args[2].toDouble(); i++) { if ( deterministic ) { diff --git a/src/mainwin.cc b/src/mainwin.cc index 251c6e1..17b9ef7 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -89,6 +89,10 @@ #include "cgal.h" #include "cgalworker.h" +#else + +#include "PolySetEvaluator.h" + #endif // ENABLE_CGAL #ifndef OPENCSG_VERSION_STRING @@ -153,9 +157,11 @@ MainWindow::MainWindow(const QString &filename) { setupUi(this); +#ifdef ENABLE_CGAL this->cgalworker = new CGALWorker(); connect(this->cgalworker, SIGNAL(done(CGAL_Nef_polyhedron *)), this, SLOT(actionRenderCGALDone(CGAL_Nef_polyhedron *))); +#endif register_builtin(root_ctx); @@ -410,8 +416,10 @@ MainWindow::loadDesignSettings() } uint polySetCacheSize = Preferences::inst()->getValue("advanced/polysetCacheSize").toUInt(); PolySetCache::instance()->setMaxSize(polySetCacheSize); +#ifdef ENABLE_CGAL uint cgalCacheSize = Preferences::inst()->getValue("advanced/cgalCacheSize").toUInt(); CGALCache::instance()->setMaxSize(cgalCacheSize); +#endif } MainWindow::~MainWindow() @@ -677,8 +685,12 @@ void MainWindow::compileCSG(bool procevents) progress_report_prep(this->root_node, report_func, this); try { +#ifdef ENABLE_CGAL CGALEvaluator cgalevaluator(this->tree); PolySetCGALEvaluator psevaluator(cgalevaluator); +#else + PolySetEvaluator psevaluator(this->tree); +#endif CSGTermEvaluator csgrenderer(this->tree, &psevaluator); this->root_raw_term = csgrenderer.evaluateCSGTerm(*root_node, highlight_terms, background_terms); if (!root_raw_term) { @@ -687,7 +699,9 @@ void MainWindow::compileCSG(bool procevents) QApplication::processEvents(); } PolySetCache::instance()->print(); +#ifdef ENABLE_CGAL CGALCache::instance()->print(); +#endif } catch (const ProgressCancelException &e) { PRINT("CSG generation cancelled."); @@ -1196,8 +1210,9 @@ void MainWindow::actionRenderCGALDone(CGAL_Nef_polyhedron *root_N) if (root_N) { PolySetCache::instance()->print(); +#ifdef ENABLE_CGAL CGALCache::instance()->print(); - +#endif if (!root_N->isNull()) { if (root_N->dim == 2) { PRINT(" Top level object is a 2D object:"); diff --git a/src/openscad.cc b/src/openscad.cc index 472b5d4..880aa0d 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -255,7 +255,6 @@ int main(int argc, char **argv) if (!filename) help(argv[0]); -#ifdef ENABLE_CGAL Context root_ctx; register_builtin(root_ctx); @@ -299,6 +298,7 @@ int main(int argc, char **argv) } } else { +#ifdef ENABLE_CGAL CGAL_Nef_polyhedron root_N = cgalevaluator.evaluateCGALMesh(*tree.root()); fs::current_path(original_path); @@ -373,12 +373,12 @@ int main(int argc, char **argv) fstream.close(); } } - } - delete root_node; #else - fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n"); - exit(1); + fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n"); + exit(1); #endif + } + delete root_node; } else if (useGUI) { @@ -1,3 +1,4 @@ +#ifdef ENABLE_CGAL #include "cgalutils.h" #include "svg.h" #include <boost/algorithm/string.hpp> @@ -246,4 +247,4 @@ std::string dump_svg( const CGAL_Nef_polyhedron3 &N ) } // namespace - +#endif // ENABLE_CGAL |