summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2013-06-20 04:11:16 (GMT)
committerMarius Kintel <marius@kintel.net>2013-06-20 04:11:16 (GMT)
commit1c719371cc83911cbd1758a695ed59fa7901fef4 (patch)
treecb903ecbad54e720d2ea91202b6be392d3cd0278 /src
parentbac587363ab9ecbbec61616c35c0a9f3000ec5a3 (diff)
parentc75d19555256c5daceb9aea2c3e45010a7a75e88 (diff)
Merge remote-tracking branch 'origin/epec-kernel'
Diffstat (limited to 'src')
-rw-r--r--src/AppleEvents.cc2
-rw-r--r--src/CGALEvaluator.cc13
-rw-r--r--src/CGAL_Nef_polyhedron.h2
-rw-r--r--src/CSGTermEvaluator.cc3
-rw-r--r--src/MainWindow.h20
-rw-r--r--src/ModuleCache.cc1
-rw-r--r--src/cgal.h10
-rw-r--r--src/cgalutils.cc3
-rw-r--r--src/cgalutils.h2
-rw-r--r--src/lexer.l2
-rw-r--r--src/mainwin.cc252
-rw-r--r--src/module.h1
-rw-r--r--src/parsersettings.cc8
-rw-r--r--src/svg.cc40
14 files changed, 221 insertions, 138 deletions
diff --git a/src/AppleEvents.cc b/src/AppleEvents.cc
index 1fb4f99..3102792 100644
--- a/src/AppleEvents.cc
+++ b/src/AppleEvents.cc
@@ -15,7 +15,7 @@ OSErr eventHandler(const AppleEvent *, AppleEvent *, SRefCon )
if (mainwin) break;
}
if (mainwin) {
- mainwin->actionReloadCompile();
+ mainwin->actionReloadRenderCSG();
}
return noErr;
}
diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc
index 686bde1..8e1b5eb 100644
--- a/src/CGALEvaluator.cc
+++ b/src/CGALEvaluator.cc
@@ -202,30 +202,31 @@ CGAL_Nef_polyhedron CGALEvaluator::applyResize(const CgaladvNode &node)
if ( N.dim == 2 ) {
CGAL_Iso_rectangle_2e bbox = bounding_box( *N.p2 );
CGAL_Point_2e min2(bbox.min()), max2(bbox.max());
- CGAL_Point_3 min3(min2.x(),min2.y(),0), max3(max2.x(),max2.y(),0);
+ CGAL_Point_3 min3(CGAL::to_double(min2.x()), CGAL::to_double(min2.y()), 0),
+ max3(CGAL::to_double(max2.x()), CGAL::to_double(max2.y()), 0);
bb = CGAL_Iso_cuboid_3( min3, max3 );
}
else {
bb = bounding_box( *N.p3 );
}
- std::vector<NT> scale, bbox_size;
- for (int i=0;i<3;i++) scale.push_back( NT(1) );
+ std::vector<NT3> scale, bbox_size;
+ for (int i=0;i<3;i++) scale.push_back( NT3(1) );
bbox_size.push_back( bb.xmax()-bb.xmin() );
bbox_size.push_back( bb.ymax()-bb.ymin() );
bbox_size.push_back( bb.zmax()-bb.zmin() );
for (int i=0;i<3;i++) {
if (node.newsize[i]) {
- if (bbox_size[i]==NT(0)) {
+ if (bbox_size[i]==NT3(0)) {
PRINT("WARNING: Cannot resize in direction normal to flat object");
return N;
}
else {
- scale[i] = NT(node.newsize[i]) / bbox_size[i];
+ scale[i] = NT3(node.newsize[i]) / bbox_size[i];
}
}
}
- NT autoscale = std::max( scale[0], std::max( scale[1], scale[2] ));
+ NT3 autoscale = std::max( scale[0], std::max( scale[1], scale[2] ));
for (int i=0;i<3;i++) {
if (node.autosize[i]) scale[i] = autoscale;
}
diff --git a/src/CGAL_Nef_polyhedron.h b/src/CGAL_Nef_polyhedron.h
index cfab993..7f59861 100644
--- a/src/CGAL_Nef_polyhedron.h
+++ b/src/CGAL_Nef_polyhedron.h
@@ -1,7 +1,7 @@
#ifndef CGAL_NEF_POLYHEDRON_H_
#define CGAL_NEF_POLYHEDRON_H_
-#include "cgalfwd.h"
+#include "cgal.h"
#include "memory.h"
#include <string>
#include "linalg.h"
diff --git a/src/CSGTermEvaluator.cc b/src/CSGTermEvaluator.cc
index a6b654c..71cf149 100644
--- a/src/CSGTermEvaluator.cc
+++ b/src/CSGTermEvaluator.cc
@@ -115,6 +115,7 @@ Response CSGTermEvaluator::visit(State &state, const AbstractPolyNode &node)
if (ps) {
t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background,
ps, node.modinst, node);
+ node.progress_report();
}
}
this->stored_term[node.index()] = t1;
@@ -178,6 +179,7 @@ Response CSGTermEvaluator::visit(State &state, const RenderNode &node)
shared_ptr<PolySet> ps;
if (this->psevaluator) {
ps = this->psevaluator->getPolySet(node, true);
+ node.progress_report();
}
if (ps) {
t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background,
@@ -201,6 +203,7 @@ Response CSGTermEvaluator::visit(State &state, const CgaladvNode &node)
if (ps) {
t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background,
ps, node.modinst, node);
+ node.progress_report();
}
this->stored_term[node.index()] = t1;
addToParent(state, node);
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 1dcffeb..79e2080 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -28,6 +28,7 @@ public:
QTimer *autoReloadTimer;
std::string autoReloadId;
+ QTimer *waitAfterReloadTimer;
ModuleContext top_ctx;
FileModule *root_module; // Result of parsing
@@ -76,8 +77,8 @@ private:
void refreshDocument();
void updateTemporalVariables();
bool fileChangedOnDisk();
- bool compileTopLevelDocument(bool reload);
- bool compile(bool reload, bool procevents);
+ void compileTopLevelDocument();
+ void compile(bool reload, bool forcedone = false);
void compileCSG(bool procevents);
bool maybeSave();
bool checkEditorModified();
@@ -102,6 +103,10 @@ private slots:
void actionReload();
void actionShowLibraryFolder();
+ void instantiateRoot();
+ void compileDone(bool didchange);
+ void compileEnded();
+
private slots:
void pasteViewportTranslation();
void pasteViewportRotation();
@@ -109,10 +114,13 @@ private slots:
void preferences();
private slots:
- void actionCompile();
+ void actionRenderCSG();
+ void csgRender();
+ void csgReloadRender();
#ifdef ENABLE_CGAL
void actionRenderCGAL();
void actionRenderCGALDone(class CGAL_Nef_polyhedron *);
+ void cgalRender();
#endif
void actionDisplayAST();
void actionDisplayCSGTree();
@@ -131,6 +139,7 @@ public:
void clearCurrentOutput();
public slots:
+ void actionReloadRenderCSG();
#ifdef ENABLE_OPENCSG
void viewModeOpenCSG();
#endif
@@ -163,13 +172,16 @@ public slots:
void helpManual();
void helpLibrary();
void quit();
- void actionReloadCompile();
void checkAutoReload();
+ void waitAfterReload();
void autoReloadSet(bool);
private:
static void report_func(const class AbstractNode*, void *vp, int mark);
+ char const * afterCompileSlot;
+ bool procevents;
+
class ProgressWidget *progresswidget;
class CGALWorker *cgalworker;
QMutex consolemutex;
diff --git a/src/ModuleCache.cc b/src/ModuleCache.cc
index 99c0b20..de9af01 100644
--- a/src/ModuleCache.cc
+++ b/src/ModuleCache.cc
@@ -53,7 +53,6 @@ FileModule *ModuleCache::evaluate(const std::string &filename)
if (lib_mod) {
if (this->entries[filename].cache_id == cache_id) {
shouldCompile = false;
-
if (lib_mod->includesChanged()) {
lib_mod = NULL;
shouldCompile = true;
diff --git a/src/cgal.h b/src/cgal.h
index a7300c6..45228be 100644
--- a/src/cgal.h
+++ b/src/cgal.h
@@ -39,8 +39,8 @@ using boost::uintmax_t;
#include <CGAL/assertions_behaviour.h>
#include <CGAL/exceptions.h>
-typedef CGAL::Gmpq NT;
-typedef CGAL::Extended_cartesian<NT> CGAL_Kernel2;
+typedef CGAL::Gmpq NT2;
+typedef CGAL::Extended_cartesian<NT2> CGAL_Kernel2;
typedef CGAL::Nef_polyhedron_2<CGAL_Kernel2> CGAL_Nef_polyhedron2;
typedef CGAL_Kernel2::Aff_transformation_2 CGAL_Aff_transformation2;
@@ -48,7 +48,9 @@ typedef CGAL::Exact_predicates_exact_constructions_kernel CGAL_ExactKernel2;
typedef CGAL::Polygon_2<CGAL_ExactKernel2> CGAL_Poly2;
typedef CGAL::Polygon_with_holes_2<CGAL_ExactKernel2> CGAL_Poly2h;
-typedef CGAL::Cartesian<NT> CGAL_Kernel3;
+ //typedef CGAL::Cartesian<NT> CGAL_Kernel3;
+typedef CGAL::Exact_predicates_exact_constructions_kernel CGAL_Kernel3;
+typedef CGAL::Exact_predicates_exact_constructions_kernel::FT NT3;
typedef CGAL::Nef_polyhedron_3<CGAL_Kernel3> CGAL_Nef_polyhedron3;
typedef CGAL_Nef_polyhedron3::Aff_transformation_3 CGAL_Aff_transformation;
@@ -63,7 +65,7 @@ typedef CGAL::Iso_cuboid_3<CGAL_Kernel3> CGAL_Iso_cuboid_3;
// CGAL_Nef_polyhedron2::Explorer::Point which is different than
// CGAL_Kernel2::Point. Hence the suffix 'e'
typedef CGAL_Nef_polyhedron2::Explorer::Point CGAL_Point_2e;
-typedef CGAL::Iso_rectangle_2< CGAL::Simple_cartesian<NT> > CGAL_Iso_rectangle_2e;
+typedef CGAL::Iso_rectangle_2<CGAL::Simple_cartesian<NT2> > CGAL_Iso_rectangle_2e;
#ifdef PREV_NDEBUG
diff --git a/src/cgalutils.cc b/src/cgalutils.cc
index 8b4c476..bb46f1c 100644
--- a/src/cgalutils.cc
+++ b/src/cgalutils.cc
@@ -193,7 +193,8 @@ void ZRemover::visit( CGAL_Nef_polyhedron3::Halffacet_const_handle hfacet )
std::vector<CGAL_Nef_polyhedron2::Explorer::Point> contour;
CGAL_For_all( c1, cend ) {
CGAL_Nef_polyhedron3::Point_3 point3d = c1->source()->target()->point();
- CGAL_Nef_polyhedron2::Explorer::Point point2d( point3d.x(), point3d.y() );
+ CGAL_Nef_polyhedron2::Explorer::Point point2d(CGAL::to_double(point3d.x()),
+ CGAL::to_double(point3d.y()));
contour.push_back( point2d );
}
if (contour.size()==0) continue;
diff --git a/src/cgalutils.h b/src/cgalutils.h
index 6ea7711..d25fd4c 100644
--- a/src/cgalutils.h
+++ b/src/cgalutils.h
@@ -1,7 +1,7 @@
#ifndef CGALUTILS_H_
#define CGALUTILS_H_
-#include <cgalfwd.h>
+#include <cgal.h>
class PolySet *createPolySetFromPolyhedron(const CGAL_Polyhedron &p);
CGAL_Polyhedron *createPolyhedronFromPolySet(const class PolySet &ps);
CGAL_Iso_cuboid_3 bounding_box( const CGAL_Nef_polyhedron3 &N );
diff --git a/src/lexer.l b/src/lexer.l
index 0b8048f..3dd3b6b 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -100,7 +100,7 @@ E [Ee][+-]?{D}+
%%
-include[ \t\r\n>]*"<" { BEGIN(cond_include); filepath = filename = "";}
+include[ \t\r\n>]*"<" { BEGIN(cond_include); filepath = filename = ""; }
<cond_include>{
[^\t\r\n>]*"/" { filepath = yytext; }
[^\t\r\n>/]+ { filename = yytext; }
diff --git a/src/mainwin.cc b/src/mainwin.cc
index 95f7242..3d50d6f 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -206,9 +206,15 @@ MainWindow::MainWindow(const QString &filename)
autoReloadTimer = new QTimer(this);
autoReloadTimer->setSingleShot(false);
+ autoReloadTimer->setInterval(200);
connect(autoReloadTimer, SIGNAL(timeout()), this, SLOT(checkAutoReload()));
- connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionCompile()));
+ waitAfterReloadTimer = new QTimer(this);
+ waitAfterReloadTimer->setSingleShot(true);
+ waitAfterReloadTimer->setInterval(200);
+ connect(waitAfterReloadTimer, SIGNAL(timeout()), this, SLOT(waitAfterReload()));
+
+ connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionRenderCSG()));
connect(this->e_fps, SIGNAL(textChanged(QString)), this, SLOT(updatedFps()));
animate_panel->hide();
@@ -288,8 +294,8 @@ MainWindow::MainWindow(const QString &filename)
// Design menu
connect(this->designActionAutoReload, SIGNAL(toggled(bool)), this, SLOT(autoReloadSet(bool)));
- connect(this->designActionReloadAndCompile, SIGNAL(triggered()), this, SLOT(actionReloadCompile()));
- connect(this->designActionCompile, SIGNAL(triggered()), this, SLOT(actionCompile()));
+ connect(this->designActionReloadAndCompile, SIGNAL(triggered()), this, SLOT(actionReloadRenderCSG()));
+ connect(this->designActionCompile, SIGNAL(triggered()), this, SLOT(actionRenderCSG()));
#ifdef ENABLE_CGAL
connect(this->designActionCompileAndRender, SIGNAL(triggered()), this, SLOT(actionRenderCGAL()));
#else
@@ -580,7 +586,7 @@ void MainWindow::updateTVal()
double fps = this->e_fps->text().toDouble(&fps_ok);
if (fps_ok) {
if (fps <= 0) {
- actionCompile();
+ actionRenderCSG();
} else {
double s = this->e_fsteps->text().toDouble();
double t = this->e_tval->text().toDouble() + 1/s;
@@ -612,14 +618,96 @@ void MainWindow::refreshDocument()
}
/*!
- Parse and evaluate the design => this->root_node
-
- Returns true if something was compiled, false if nothing was changed
- and the root_node was left untouched.
+ compiles the design. Calls compileDone() if anything was compiled
*/
-bool MainWindow::compile(bool reload, bool procevents)
+void MainWindow::compile(bool reload, bool forcedone)
+{
+ bool shouldcompiletoplevel = false;
+ bool didcompile = false;
+
+ // Reload checks the timestamp of the toplevel file and refreshes if necessary,
+ if (reload) {
+ // Refresh files if it has changed on disk
+ if (fileChangedOnDisk() && checkEditorModified()) {
+ shouldcompiletoplevel = true;
+ refreshDocument();
+ }
+ // If the file hasn't changed, we might still need to compile it
+ // if we haven't yet compiled the current text.
+ else {
+ QString current_doc = editor->toPlainText();
+ if (current_doc != last_compiled_doc) shouldcompiletoplevel = true;
+ }
+ }
+ else {
+ shouldcompiletoplevel = true;
+ }
+
+ if (!shouldcompiletoplevel && this->root_module && this->root_module->includesChanged()) {
+ shouldcompiletoplevel = true;
+ }
+
+ if (shouldcompiletoplevel) {
+ console->clear();
+ compileTopLevelDocument();
+ didcompile = true;
+ }
+
+ if (this->root_module) {
+ if (this->root_module->handleDependencies()) {
+ PRINTB("Module cache size: %d modules", ModuleCache::instance()->size());
+ didcompile = true;
+ }
+ }
+
+ // If we're auto-reloading, listen for a cascade of changes by starting a timer
+ // if something changed _and_ there are any external dependencies
+ if (reload && didcompile && this->root_module) {
+ if (this->root_module->hasIncludes() ||
+ this->root_module->usesLibraries()) {
+ this->waitAfterReloadTimer->start();
+ return;
+ }
+ }
+ compileDone(didcompile | forcedone);
+}
+
+void MainWindow::waitAfterReload()
+{
+ if (this->root_module->handleDependencies()) {
+ this->waitAfterReloadTimer->start();
+ return;
+ }
+ else {
+ compile(true, true); // In case file itself or top-level includes changed during dependency updates
+ }
+}
+
+void MainWindow::compileDone(bool didchange)
+{
+ const char *callslot;
+ if (didchange) {
+ instantiateRoot();
+ callslot = afterCompileSlot;
+ }
+ else {
+ callslot = "compileEnded";
+ }
+
+ this->procevents = false;
+ QMetaObject::invokeMethod(this, callslot);
+}
+
+void MainWindow::compileEnded()
+{
+ clearCurrentOutput();
+ GuiLocker::unlock();
+ if (designActionAutoReload->isChecked()) autoReloadTimer->start();
+}
+
+void MainWindow::instantiateRoot()
{
- if (!compileTopLevelDocument(reload)) return false;
+ // Go on and instantiate root_node, then call the continuation slot
// Invalidate renderers before we kill the CSG tree
this->qglview->setRenderer(NULL);
@@ -652,7 +740,7 @@ bool MainWindow::compile(bool reload, bool procevents)
if (this->root_module) {
// Evaluate CSG tree
PRINT("Compiling design (CSG Tree generation)...");
- if (procevents) QApplication::processEvents();
+ if (this->procevents) QApplication::processEvents();
AbstractNode::resetIndexCounter();
@@ -681,10 +769,8 @@ bool MainWindow::compile(bool reload, bool procevents)
} else {
PRINT("ERROR: Compilation failed!");
}
- if (procevents) QApplication::processEvents();
+ if (this->procevents) QApplication::processEvents();
}
-
- return true;
}
/*!
@@ -1043,77 +1129,42 @@ bool MainWindow::fileChangedOnDisk()
}
/*!
- If reload is true, does a timestamp check on the document and tries to reload it.
- Otherwise, just reparses the current document and any dependencies, updates the
- GUI accordingly and populates this->root_module.
-
Returns true if anything was compiled.
*/
-bool MainWindow::compileTopLevelDocument(bool reload)
+void MainWindow::compileTopLevelDocument()
{
- bool shouldcompiletoplevel = !reload;
-
- if (this->root_module && this->root_module->includesChanged()) {
- shouldcompiletoplevel = true;
- }
-
- if (reload) {
- // Refresh file if it has changed on disk
- if (fileChangedOnDisk() && checkEditorModified()) {
- shouldcompiletoplevel = true;
- refreshDocument();
- }
- // If the file hasn't changed, we might still need to compile it
- // if we haven't yet compiled the current text.
- else if (!editor->isContentModified()) {
- QString current_doc = editor->toPlainText();
- if (current_doc != last_compiled_doc) shouldcompiletoplevel = true;
- }
- }
+ updateTemporalVariables();
- if (shouldcompiletoplevel) {
- console->clear();
-
- updateTemporalVariables();
-
- this->last_compiled_doc = editor->toPlainText();
- std::string fulltext =
- std::string(this->last_compiled_doc.toLocal8Bit().constData()) +
- "\n" + commandline_commands;
-
- delete this->root_module;
- this->root_module = NULL;
-
- this->root_module = parse(fulltext.c_str(),
- this->fileName.isEmpty() ?
- "" :
- QFileInfo(this->fileName).absolutePath().toLocal8Bit(),
- false);
-
- if (!animate_panel->isVisible()) {
- highlighter->unhighlightLastError();
- if (!this->root_module) {
- QTextCursor cursor = editor->textCursor();
- cursor.setPosition(parser_error_pos);
- editor->setTextCursor(cursor);
- highlighter->highlightError( parser_error_pos );
- }
+ this->last_compiled_doc = editor->toPlainText();
+ std::string fulltext =
+ std::string(this->last_compiled_doc.toLocal8Bit().constData()) +
+ "\n" + commandline_commands;
+
+ delete this->root_module;
+ this->root_module = NULL;
+
+ this->root_module = parse(fulltext.c_str(),
+ this->fileName.isEmpty() ?
+ "" :
+ QFileInfo(this->fileName).absolutePath().toLocal8Bit(),
+ false);
+
+ if (!animate_panel->isVisible()) {
+ highlighter->unhighlightLastError();
+ if (!this->root_module) {
+ QTextCursor cursor = editor->textCursor();
+ cursor.setPosition(parser_error_pos);
+ editor->setTextCursor(cursor);
+ highlighter->highlightError( parser_error_pos );
}
-
- }
-
- bool changed = shouldcompiletoplevel;
- if (this->root_module) {
- changed |= this->root_module->handleDependencies();
- if (changed) PRINTB("Module cache size: %d modules", ModuleCache::instance()->size());
}
-
- return changed;
}
void MainWindow::checkAutoReload()
{
- if (!this->fileName.isEmpty()) actionReloadCompile();
+ if (!this->fileName.isEmpty()) {
+ actionReloadRenderCSG();
+ }
}
void MainWindow::autoReloadSet(bool on)
@@ -1143,15 +1194,22 @@ bool MainWindow::checkEditorModified()
return true;
}
-void MainWindow::actionReloadCompile()
+void MainWindow::actionReloadRenderCSG()
{
if (GuiLocker::isLocked()) return;
- GuiLocker lock;
+ GuiLocker::lock();
+ autoReloadTimer->stop();
setCurrentOutput();
// PRINT("Parsing design (AST generation)...");
// QApplication::processEvents();
- if (!compile(true, true)) return;
+ this->afterCompileSlot = "csgReloadRender";
+ this->procevents = true;
+ compile(true);
+}
+
+void MainWindow::csgReloadRender()
+{
if (this->root_node) compileCSG(true);
// Go to non-CGAL view mode
@@ -1165,20 +1223,25 @@ void MainWindow::actionReloadCompile()
viewModeThrownTogether();
#endif
}
-
- clearCurrentOutput();
+ compileEnded();
}
-void MainWindow::actionCompile()
+void MainWindow::actionRenderCSG()
{
if (GuiLocker::isLocked()) return;
- GuiLocker lock;
+ GuiLocker::lock();
+ autoReloadTimer->stop();
setCurrentOutput();
- console->clear();
PRINT("Parsing design (AST generation)...");
QApplication::processEvents();
- compile(false, !viewActionAnimate->isChecked());
+ this->afterCompileSlot = "csgRender";
+ this->procevents = !viewActionAnimate->isChecked();
+ compile(false);
+}
+
+void MainWindow::csgRender()
+{
if (this->root_node) compileCSG(!viewActionAnimate->isChecked());
// Go to non-CGAL view mode
@@ -1202,7 +1265,7 @@ void MainWindow::actionCompile()
img.save(filename, "PNG");
}
- clearCurrentOutput();
+ compileEnded();
}
#ifdef ENABLE_CGAL
@@ -1210,15 +1273,19 @@ void MainWindow::actionCompile()
void MainWindow::actionRenderCGAL()
{
if (GuiLocker::isLocked()) return;
- GuiLocker lock;
-
+ GuiLocker::lock();
+ autoReloadTimer->stop();
setCurrentOutput();
- console->clear();
PRINT("Parsing design (AST generation)...");
QApplication::processEvents();
- compile(false, true);
+ this->afterCompileSlot = "cgalRender";
+ this->procevents = true;
+ compile(false);
+}
+void MainWindow::cgalRender()
+{
if (!this->root_module || !this->root_node) {
return;
}
@@ -1238,7 +1305,6 @@ void MainWindow::actionRenderCGAL()
progress_report_prep(this->root_node, report_func, this);
- GuiLocker::lock(); // Will be unlocked in actionRenderCGALDone()
this->cgalworker->start(this->tree);
}
@@ -1301,9 +1367,7 @@ void MainWindow::actionRenderCGALDone(CGAL_Nef_polyhedron *root_N)
this->statusBar()->removeWidget(this->progresswidget);
delete this->progresswidget;
this->progresswidget = NULL;
- clearCurrentOutput();
-
- GuiLocker::unlock();
+ compileEnded();
}
#endif /* ENABLE_CGAL */
@@ -1616,7 +1680,7 @@ void MainWindow::viewModeAnimate()
{
if (viewActionAnimate->isChecked()) {
animate_panel->show();
- actionCompile();
+ actionRenderCSG();
updatedFps();
} else {
animate_panel->hide();
diff --git a/src/module.h b/src/module.h
index 6027fe6..b5c58af 100644
--- a/src/module.h
+++ b/src/module.h
@@ -107,6 +107,7 @@ private:
};
bool include_modified(const IncludeFile &inc) const;
+
typedef boost::unordered_map<std::string, struct IncludeFile> IncludeContainer;
IncludeContainer includes;
bool is_handling_dependencies;
diff --git a/src/parsersettings.cc b/src/parsersettings.cc
index ab93b78..5ad30e1 100644
--- a/src/parsersettings.cc
+++ b/src/parsersettings.cc
@@ -35,19 +35,19 @@ fs::path search_libs(const fs::path &localpath)
static bool check_valid(const fs::path &p, const std::vector<std::string> *openfilenames)
{
if (p.empty()) {
-// PRINTB("WARNING: File path is blank: %s",p);
+ //PRINTB("WARNING: File path is blank: %s",p);
return false;
}
if (!p.has_parent_path()) {
-// PRINTB("WARNING: No parent path: %s",p);
+ //PRINTB("WARNING: No parent path: %s",p);
return false;
}
if (!fs::exists(p)) {
-// PRINTB("WARNING: File not found: %s",p);
+ //PRINTB("WARNING: File not found: %s",p);
return false;
}
if (fs::is_directory(p)) {
-// PRINTB("WARNING: %s invalid - points to a directory",p);
+ //PRINTB("WARNING: %s invalid - points to a directory",p);
return false;
}
std::string fullname = boosty::stringy(p);
diff --git a/src/svg.cc b/src/svg.cc
index c1231a5..a21e844 100644
--- a/src/svg.cc
+++ b/src/svg.cc
@@ -70,29 +70,29 @@ std::string svg_axes()
return out.str();
}
-CGAL_Point_2e project_svg_3to2( CGAL_Point_3 p, CGAL_Iso_cuboid_3 bbox )
+CGAL_Nef_polyhedron2::Explorer::Point project_svg_3to2( CGAL_Point_3 p, CGAL_Iso_cuboid_3 bbox )
{
- NT screenw(svg_px_width);
- NT screenh(svg_px_height);
- NT screenxc = screenw / 2;
- NT screenyc = screenh / 2;
- NT bboxx = ( bbox.xmax() - bbox.xmin() );
- NT bboxy = ( bbox.ymax() - bbox.ymin() );
- NT bboxz = ( bbox.zmax() - bbox.zmin() );
- NT largest_dim = CGAL::max( CGAL::max( bboxx, bboxy ), bboxz );
- NT bboxxc = bboxx / 2 + bbox.xmin();
- NT bboxyc = bboxy / 2 + bbox.ymin();
- NT bboxzc = bboxz / 2 + bbox.zmin();
- NT xinbox = ( p.x() - bboxxc ) / largest_dim;
- NT yinbox = ( p.y() - bboxyc ) / largest_dim;
- NT zinbox = ( p.z() - bboxzc ) / largest_dim;
+ CGAL_Kernel3::FT screenw(svg_px_width);
+ CGAL_Kernel3::FT screenh(svg_px_height);
+ CGAL_Kernel3::FT screenxc = screenw / 2;
+ CGAL_Kernel3::FT screenyc = screenh / 2;
+ CGAL_Kernel3::FT bboxx = ( bbox.xmax() - bbox.xmin() );
+ CGAL_Kernel3::FT bboxy = ( bbox.ymax() - bbox.ymin() );
+ CGAL_Kernel3::FT bboxz = ( bbox.zmax() - bbox.zmin() );
+ CGAL_Kernel3::FT largest_dim = CGAL::max( CGAL::max( bboxx, bboxy ), bboxz );
+ CGAL_Kernel3::FT bboxxc = bboxx / 2 + bbox.xmin();
+ CGAL_Kernel3::FT bboxyc = bboxy / 2 + bbox.ymin();
+ CGAL_Kernel3::FT bboxzc = bboxz / 2 + bbox.zmin();
+ CGAL_Kernel3::FT xinbox = ( p.x() - bboxxc ) / largest_dim;
+ CGAL_Kernel3::FT yinbox = ( p.y() - bboxyc ) / largest_dim;
+ CGAL_Kernel3::FT zinbox = ( p.z() - bboxzc ) / largest_dim;
// do simple fake paralell projection
- NT tx = screenxc + xinbox * screenw / 1.618 + yinbox * screenh / 3.2;
- NT ty = screenyc - zinbox * screenh / 1.618 - yinbox * screenh / 3.2;
- return CGAL_Point_2e( tx, ty );
+ CGAL_Kernel3::FT tx = screenxc + xinbox * screenw / 1.618 + yinbox * screenh / 3.2;
+ CGAL_Kernel3::FT ty = screenyc - zinbox * screenh / 1.618 - yinbox * screenh / 3.2;
+ return CGAL_Point_2e(CGAL::to_double(tx), CGAL::to_double(ty));
}
-CGAL_Point_2e project_svg_2to2( CGAL_Point_2e p, CGAL_Iso_rectangle_2e bbox )
+CGAL_Point_2e project_svg_2to2(const CGAL_Point_2e &p, const CGAL_Iso_rectangle_2e &bbox)
{
double screenw = svg_px_width;
double screenh = svg_px_height;
@@ -122,7 +122,7 @@ std::string dump_cgal_nef_polyhedron2_face_svg(
std::stringstream out;
CGAL_For_all(c1, c2) {
if ( explorer.is_standard( explorer.target(c1) ) ) {
- CGAL_Point_2e source = explorer.point( explorer.source( c1 ) );
+CGAL_Nef_polyhedron2::Explorer::Point source = explorer.point( explorer.source( c1 ) );
CGAL_Point_2e target = explorer.point( explorer.target( c1 ) );
out << " <!-- Halfedge. Mark: " << c1->mark() << " -->\n";
std::string he_mark = boost::lexical_cast<std::string>(c1->mark());
contact: Jan Huwald // Impressum