diff options
| author | Marius Kintel <marius@kintel.net> | 2013-06-20 04:11:16 (GMT) | 
|---|---|---|
| committer | Marius Kintel <marius@kintel.net> | 2013-06-20 04:11:16 (GMT) | 
| commit | 1c719371cc83911cbd1758a695ed59fa7901fef4 (patch) | |
| tree | cb903ecbad54e720d2ea91202b6be392d3cd0278 /src | |
| parent | bac587363ab9ecbbec61616c35c0a9f3000ec5a3 (diff) | |
| parent | c75d19555256c5daceb9aea2c3e45010a7a75e88 (diff) | |
Merge remote-tracking branch 'origin/epec-kernel'
Diffstat (limited to 'src')
| -rw-r--r-- | src/AppleEvents.cc | 2 | ||||
| -rw-r--r-- | src/CGALEvaluator.cc | 13 | ||||
| -rw-r--r-- | src/CGAL_Nef_polyhedron.h | 2 | ||||
| -rw-r--r-- | src/CSGTermEvaluator.cc | 3 | ||||
| -rw-r--r-- | src/MainWindow.h | 20 | ||||
| -rw-r--r-- | src/ModuleCache.cc | 1 | ||||
| -rw-r--r-- | src/cgal.h | 10 | ||||
| -rw-r--r-- | src/cgalutils.cc | 3 | ||||
| -rw-r--r-- | src/cgalutils.h | 2 | ||||
| -rw-r--r-- | src/lexer.l | 2 | ||||
| -rw-r--r-- | src/mainwin.cc | 252 | ||||
| -rw-r--r-- | src/module.h | 1 | ||||
| -rw-r--r-- | src/parsersettings.cc | 8 | ||||
| -rw-r--r-- | src/svg.cc | 40 | 
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; @@ -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); @@ -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());  | 
