diff options
142 files changed, 227 insertions, 284 deletions
@@ -37,7 +37,7 @@ development. Other versions may or may not work as well..  * Qt4 (4.4 - 4.7):    http://www.qtsoftware.com/ -* CGAL (3.6 - 3.7): +* CGAL (3.6 - 3.9):    http://www.cgal.org/  * GMP (5.0.x): @@ -46,7 +46,7 @@ development. Other versions may or may not work as well..  * MPFR (3.0.x):    http://www.mpfr.org/ -* boost (1.35 - 1.44, required by CGAL) +* boost (1.35 - 1.47)    http://www.boost.org/  * cmake (2.6.x, required by CGAL) @@ -55,10 +55,10 @@ development. Other versions may or may not work as well..  * OpenCSG (1.3.0):    http://www.opencsg.org/ -* GLEW (1.5.x, also bundled with OpenCSG) +* GLEW (1.5.x, 1.6.x, also bundled with OpenCSG)    http://glew.sourceforge.net/ -* Eigen2 (2.0.11) +* Eigen2 (2.0.13->)    http://eigen.tuxfamily.org/  * GCC C++ Compiler (4.2, 4.3.1): diff --git a/RELEASE_NOTES b/RELEASE_NOTES index f8a10f0..a6a0855 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -10,14 +10,15 @@ o The color() statement now supports an alpha parameter, e.g. color(c=[1,0,0], a  o The color() statement now supports specifying colors as strings, e.g. color("Red")  o if() and else() can now take any value type as parameter. false, 0, empty string and empty vector or illegal value type will evaluate as false, everything else as true.  o Strings can now be lexographically compared using the <, <=, >, >= operators -o The version() function will return the OpenSCAD version as a string, e.g. "2011.10" +o The version() function will return the OpenSCAD version as a vector, e.g. [2011, 09] +o The version_num() function will return the OpenSCAD version as a number, e.g. 20110923  Bugfixes:  o square() crashed if any of the dimensions were zero  o Flush Caches didn't flush cached USE'd modules  o STL export should be a bit more robust  o Dropping a file into the editor under Windows didn't work (double C:/C:/ problem) - +o On some platforms it was possible to insertion rich text in the editor, causing confusion.  Deprecations:  o dxf_linear_extrude() and dxf_rotate_extrude() are now deprecated. diff --git a/doc/TODO.txt b/doc/TODO.txt index 97af30a..65534b8 100644 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -114,6 +114,8 @@ o Misc    - Save: Ask for confirmation if file has been externally changed    - Rename OpenCSG and CGAL to smth. not specific to the underlying libraries      (e.g Preview, Render) +  - If trying to export STL/DXF but source is newer than the CGAL rendering, ask +    for confirmation.  o Cmd-line    - Add verbose option (PRINT command from mainwin.cc and progress output) diff --git a/openscad.pro b/openscad.pro index 765ff6b..3a41800 100644 --- a/openscad.pro +++ b/openscad.pro @@ -13,6 +13,10 @@ win32 {  } else {    isEmpty(VERSION) VERSION = $$system(date "+%Y.%m.%d")  } +VERSION_SPLIT=$$split(VERSION, ".") +VERSION_YEAR=$$member(VERSION_SPLIT, 0) +VERSION_MONTH=$$member(VERSION_SPLIT, 1) +VERSION_DAY=$$member(VERSION_SPLIT, 2)  #configure lex / yacc  win32 { @@ -31,7 +35,8 @@ win32 {      INCLUDEPATH += $$(MPFRDIR)  } -DEFINES += OPENSCAD_VERSION=$$VERSION +DEFINES += OPENSCAD_VERSION=$$VERSION OPENSCAD_YEAR=$$VERSION_YEAR OPENSCAD_MONTH=$$VERSION_MONTH +!isEmpty(VERSION_DAY): DEFINES += OPENSCAD_DAY=$$VERSION_DAY  win32:DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS YY_NO_UNISTD_H  #disable warning about too long decorated names @@ -166,6 +171,8 @@ HEADERS += src/renderer.h \             src/Tree.h \             src/mathc99.h \             src/memory.h \ +           src/linalg.h \ +           src/system-gl.h \             src/stl-utils.h  SOURCES += src/openscad.cc \ diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index d950cb8..10160ae 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -11,6 +11,7 @@  #include "polyset.h"  #include "dxfdata.h"  #include "dxftess.h" +#include "Tree.h"  #include "CGALCache.h"  #include "cgal.h" @@ -205,8 +206,8 @@ Response CGALEvaluator::visit(State &state, const TransformNode &node)  				// tesselate it and create a new CGAL_Nef_polyhedron2 from it.. What a hack!  				CGAL_Aff_transformation2 t( -					node.matrix[0], node.matrix[4], node.matrix[12], -					node.matrix[1], node.matrix[5], node.matrix[13], node.matrix[15]); +					node.matrix(0,0), node.matrix(0,1), node.matrix(0,3), +					node.matrix(1,0), node.matrix(1,1), node.matrix(1,3), node.matrix(3,3));  				DxfData *dd = N.convertToDxfData();  				for (size_t i=0; i < dd->points.size(); i++) { @@ -225,9 +226,9 @@ Response CGALEvaluator::visit(State &state, const TransformNode &node)  			}  			else if (N.dim == 3) {  				CGAL_Aff_transformation t( -					node.matrix[0], node.matrix[4], node.matrix[ 8], node.matrix[12], -					node.matrix[1], node.matrix[5], node.matrix[ 9], node.matrix[13], -					node.matrix[2], node.matrix[6], node.matrix[10], node.matrix[14], node.matrix[15]); +					node.matrix(0,0), node.matrix(0,1), node.matrix(0,2), node.matrix(0,3), +					node.matrix(1,0), node.matrix(1,1), node.matrix(1,2), node.matrix(1,3), +					node.matrix(2,0), node.matrix(2,1), node.matrix(2,2), node.matrix(2,3), node.matrix(3,3));  				N.p3->transform(t);  			}  			CGALCache::instance()->insert(this->tree.getIdString(node), N); diff --git a/src/CGALEvaluator.h b/src/CGALEvaluator.h index c1b5ae8..0ac716c 100644 --- a/src/CGALEvaluator.h +++ b/src/CGALEvaluator.h @@ -3,7 +3,6 @@  #include "myqhash.h"  #include "visitor.h" -#include "Tree.h"  #include "CGAL_Nef_polyhedron.h"  #include "PolySetCGALEvaluator.h" @@ -11,16 +10,11 @@  #include <map>  #include <list> -using std::string; -using std::map; -using std::list; -using std::pair; -  class CGALEvaluator : public Visitor  {  public:  	enum CsgOp {CGE_UNION, CGE_INTERSECTION, CGE_DIFFERENCE, CGE_MINKOWSKI}; -	CGALEvaluator(const Tree &tree) : tree(tree), psevaluator(*this) {} +	CGALEvaluator(const class Tree &tree) : tree(tree), psevaluator(*this) {}    virtual ~CGALEvaluator() {}    virtual Response visit(State &state, const AbstractNode &node); @@ -42,9 +36,9 @@ private:  	CGAL_Nef_polyhedron applyToChildren(const AbstractNode &node, CGALEvaluator::CsgOp op);  	CGAL_Nef_polyhedron applyHull(const CgaladvNode &node); -  string currindent; -  typedef list<pair<const AbstractNode *, string> > ChildList; -  map<int, ChildList> visitedchildren; +	std::string currindent; +  typedef std::list<std::pair<const AbstractNode *, std::string> > ChildList; +	std::map<int, ChildList> visitedchildren;  	const Tree &tree;  public: diff --git a/src/CGALRenderer.h b/src/CGALRenderer.h index 5f854ea..9c19e5a 100644 --- a/src/CGALRenderer.h +++ b/src/CGALRenderer.h @@ -2,12 +2,11 @@  #define CGALRENDERER_H_  #include "renderer.h" -#include "CGAL_Nef_polyhedron.h"  class CGALRenderer : public Renderer  {  public: -	CGALRenderer(const CGAL_Nef_polyhedron &root); +	CGALRenderer(const class CGAL_Nef_polyhedron &root);  	~CGALRenderer();  	void draw(bool showfaces, bool showedges) const; diff --git a/src/CSGTermEvaluator.cc b/src/CSGTermEvaluator.cc index ebea89c..d1af987 100644 --- a/src/CSGTermEvaluator.cc +++ b/src/CSGTermEvaluator.cc @@ -86,8 +86,8 @@ Response CSGTermEvaluator::visit(State &state, const AbstractIntersectionNode &n  }  static CSGTerm *evaluate_csg_term_from_ps(const State &state,  -																					vector<CSGTerm*> &highlights,  -																					vector<CSGTerm*> &background,  +																					std::vector<CSGTerm*> &highlights,  +																					std::vector<CSGTerm*> &background,   																					const shared_ptr<PolySet> &ps,   																					const ModuleInstantiation *modinst,   																					const AbstractNode &node) @@ -147,18 +147,7 @@ Response CSGTermEvaluator::visit(State &state, const CsgNode &node)  Response CSGTermEvaluator::visit(State &state, const TransformNode &node)  {  	if (state.isPrefix()) { -		double m[16]; -		 -		for (int i = 0; i < 16; i++) -		{ -			int c_row = i%4; -			int m_col = i/4; -			m[i] = 0; -			for (int j = 0; j < 4; j++) { -				m[i] += state.matrix()[c_row + j*4] * node.matrix[m_col*4 + j]; -			} -		} -		state.setMatrix(m); +		state.setMatrix(state.matrix() * node.matrix);  	}  	if (state.isPostfix()) {  		applyToChildren(node, CSGT_UNION); diff --git a/src/CSGTermEvaluator.h b/src/CSGTermEvaluator.h index ac22906..cca6c91 100644 --- a/src/CSGTermEvaluator.h +++ b/src/CSGTermEvaluator.h @@ -1,39 +1,31 @@  #ifndef CSGTERMEVALUATOR_H_  #define CSGTERMEVALUATOR_H_ -#include <string>  #include <map>  #include <list>  #include <vector> -#include "Tree.h"  #include "visitor.h" -#include "node.h" - -using std::string; -using std::map; -using std::list; -using std::vector;  class CSGTermEvaluator : public Visitor  {  public: -	CSGTermEvaluator(const Tree &tree, class PolySetEvaluator *psevaluator = NULL) +	CSGTermEvaluator(const class Tree &tree, class PolySetEvaluator *psevaluator = NULL)  		: tree(tree), psevaluator(psevaluator) {  	}    virtual ~CSGTermEvaluator() {} -  virtual Response visit(State &state, const AbstractNode &node); - 	virtual Response visit(State &state, const AbstractIntersectionNode &node); - 	virtual Response visit(State &state, const AbstractPolyNode &node); - 	virtual Response visit(State &state, const CsgNode &node); - 	virtual Response visit(State &state, const TransformNode &node); -	virtual Response visit(State &state, const ColorNode &node); - 	virtual Response visit(State &state, const RenderNode &node); - 	virtual Response visit(State &state, const CgaladvNode &node); +  virtual Response visit(State &state, const class AbstractNode &node); + 	virtual Response visit(State &state, const class AbstractIntersectionNode &node); + 	virtual Response visit(State &state, const class AbstractPolyNode &node); + 	virtual Response visit(State &state, const class CsgNode &node); + 	virtual Response visit(State &state, const class TransformNode &node); +	virtual Response visit(State &state, const class ColorNode &node); + 	virtual Response visit(State &state, const class RenderNode &node); + 	virtual Response visit(State &state, const class CgaladvNode &node);  	class CSGTerm *evaluateCSGTerm(const AbstractNode &node, -																 vector<CSGTerm*> &highlights,  -																 vector<CSGTerm*> &background); +																 std::vector<CSGTerm*> &highlights,  +																 std::vector<CSGTerm*> &background);  private:  	enum CsgOp {CSGT_UNION, CSGT_INTERSECTION, CSGT_DIFFERENCE, CSGT_MINKOWSKI}; @@ -41,14 +33,14 @@ private:  	void applyToChildren(const AbstractNode &node, CSGTermEvaluator::CsgOp op);    const AbstractNode *root; -  typedef list<const AbstractNode *> ChildList; -  map<int, ChildList> visitedchildren; +  typedef std::list<const AbstractNode *> ChildList; +	std::map<int, ChildList> visitedchildren;  public: -  map<int, class CSGTerm*> stored_term; // The term evaluated from each node index +	std::map<int, class CSGTerm*> stored_term; // The term evaluated from each node index -	vector<CSGTerm*> highlights; -	vector<CSGTerm*> background; +	std::vector<CSGTerm*> highlights; +	std::vector<CSGTerm*> background;  	const Tree &tree;  	class PolySetEvaluator *psevaluator;  }; diff --git a/src/GLView.h b/src/GLView.h index 1001754..3a36a15 100644 --- a/src/GLView.h +++ b/src/GLView.h @@ -1,11 +1,7 @@  #ifndef GLVIEW_H_  #define GLVIEW_H_ -#ifdef ENABLE_OPENCSG -// this must be included before the GL headers -#  include <GL/glew.h> -#endif - +#include "system-gl.h"  #include <QGLWidget>  #include <QLabel> diff --git a/src/MainWindow.h b/src/MainWindow.h index 0ba3bd9..37a6a4c 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -6,9 +6,7 @@  #include "openscad.h"  #include "context.h"  #include "module.h" -#include "polyset.h"  #include "Tree.h" -#include <QPointer>  #include <vector>  class MainWindow : public QMainWindow, public Ui::MainWindow diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc index 4a86c5c..5d6b0da 100644 --- a/src/OpenCSGRenderer.cc +++ b/src/OpenCSGRenderer.cc @@ -24,7 +24,7 @@   *   */ -#include <GL/glew.h> +#include "system-gl.h"  #include "OpenCSGRenderer.h"  #include "polyset.h"  #include "csgterm.h" @@ -39,11 +39,11 @@ public:  	OpenCSGPrim(OpenCSG::Operation operation, unsigned int convexity) :  			OpenCSG::Primitive(operation, convexity) { }  	shared_ptr<PolySet> ps; -	double *m; +	Transform3d m;  	int csgmode;  	virtual void render() {  		glPushMatrix(); -		glMultMatrixd(m); +		glMultMatrixd(m.data());  		ps->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode), m);  		glPopMatrix();  	} @@ -85,10 +85,10 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo,  			}  			if (shaderinfo) glUseProgram(shaderinfo[0]);  			for (; j < i; j++) { -				double *m = chain->matrices[j]; +				const Transform3d &m = chain->matrices[j];  				double *c = chain->colors[j];  				glPushMatrix(); -				glMultMatrixd(m); +				glMultMatrixd(m.data());  				int csgmode = chain->types[j] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL;  				if (highlight) {  					chain->polysets[j]->render_surface(PolySet::COLORMODE_HIGHLIGHT, PolySet::csgmode_e(csgmode + 20), m, shaderinfo); diff --git a/src/OpenCSGRenderer.h b/src/OpenCSGRenderer.h index 95ffc8e..e6091aa 100644 --- a/src/OpenCSGRenderer.h +++ b/src/OpenCSGRenderer.h @@ -2,8 +2,7 @@  #define OPENCSGRENDERER_H_  #include "renderer.h" -#include <GL/glew.h> // this must be included before the GL headers -#include <qgl.h> +#include "system-gl.h"  class OpenCSGRenderer : public Renderer  { diff --git a/src/PolySetEvaluator.cc b/src/PolySetEvaluator.cc index 1f09127..b5075ba 100644 --- a/src/PolySetEvaluator.cc +++ b/src/PolySetEvaluator.cc @@ -2,6 +2,7 @@  #include "PolySetEvaluator.h"  #include "printutils.h"  #include "polyset.h" +#include "Tree.h"  /*!  	The task of PolySetEvaluator is to create, keep track of and cache PolySet instances. diff --git a/src/PolySetEvaluator.h b/src/PolySetEvaluator.h index 8d7d1a8..348cbba 100644 --- a/src/PolySetEvaluator.h +++ b/src/PolySetEvaluator.h @@ -1,19 +1,17 @@  #ifndef POLYSETEVALUATOR_H_  #define POLYSETEVALUATOR_H_ -#include "node.h" -#include "Tree.h"  #include "memory.h"  class PolySetEvaluator  {  public: -	PolySetEvaluator(const Tree &tree) : tree(tree) {} +	PolySetEvaluator(const class Tree &tree) : tree(tree) {}  	virtual ~PolySetEvaluator() {}  	const Tree &getTree() const { return this->tree; } -	virtual shared_ptr<PolySet> getPolySet(const class AbstractNode &, bool cache); +	virtual shared_ptr<class PolySet> getPolySet(const class AbstractNode &, bool cache);  	virtual PolySet *evaluatePolySet(const class ProjectionNode &) { return NULL; }  	virtual PolySet *evaluatePolySet(const class LinearExtrudeNode &) { return NULL; } diff --git a/src/ThrownTogetherRenderer.cc b/src/ThrownTogetherRenderer.cc index 956fc11..01c7513 100644 --- a/src/ThrownTogetherRenderer.cc +++ b/src/ThrownTogetherRenderer.cc @@ -28,8 +28,7 @@  #include "polyset.h"  #include "csgterm.h" -#include <GL/glew.h> // this must be included before the GL headers -#include <qgl.h> +#include "system-gl.h"  ThrownTogetherRenderer::ThrownTogetherRenderer(CSGChain *root_chain,   																							 CSGChain *highlights_chain, @@ -61,14 +60,14 @@ void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight,  																						bool fberror) const  {  	glDepthFunc(GL_LEQUAL); -	QHash<QPair<PolySet*,double*>,int> polySetVisitMark; +	QHash<QPair<PolySet*,Transform3d*>,int> polySetVisitMark;  	for (size_t i = 0; i < chain->polysets.size(); i++) { -		if (polySetVisitMark[QPair<PolySet*,double*>(chain->polysets[i].get(), chain->matrices[i])]++ > 0) +		if (polySetVisitMark[QPair<PolySet*,Transform3d*>(chain->polysets[i].get(), &chain->matrices[i])]++ > 0)  			continue; -		double *m = chain->matrices[i]; +		const Transform3d &m = chain->matrices[i];  		double *c = chain->colors[i];  		glPushMatrix(); -		glMultMatrixd(m); +		glMultMatrixd(m.data());  		int csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL;  		if (highlight) {  			chain->polysets[i]->render_surface(PolySet::COLORMODE_HIGHLIGHT, PolySet::csgmode_e(csgmode + 20), m); diff --git a/src/cgaladv.cc b/src/cgaladv.cc index 5014133..c83e18b 100644 --- a/src/cgaladv.cc +++ b/src/cgaladv.cc @@ -28,7 +28,6 @@  #include "module.h"  #include "context.h"  #include "builtin.h" -#include "printutils.h"  #include "PolySetEvaluator.h"  #include <sstream>  #include <assert.h> diff --git a/src/cgaladv_minkowski2.cc b/src/cgaladv_minkowski2.cc index f08e7d6..4ce684f 100644 --- a/src/cgaladv_minkowski2.cc +++ b/src/cgaladv_minkowski2.cc @@ -26,7 +26,6 @@  #ifdef ENABLE_CGAL -#include "node.h"  #include "printutils.h"  #include "grid.h"  #include "cgal.h" diff --git a/src/color.cc b/src/color.cc index a65a8e4..ee8f872 100644 --- a/src/color.cc +++ b/src/color.cc @@ -29,7 +29,6 @@  #include "context.h"  #include "builtin.h"  #include "printutils.h" -#include "visitor.h"  #include <sstream>  #include <assert.h>  #include <QColor> diff --git a/src/csgops.cc b/src/csgops.cc index 98d68c7..7b363f0 100644 --- a/src/csgops.cc +++ b/src/csgops.cc @@ -29,7 +29,6 @@  #include "module.h"  #include "csgterm.h"  #include "builtin.h" -#include "printutils.h"  #include <sstream>  #include <assert.h> diff --git a/src/csgterm.cc b/src/csgterm.cc index 5bccff8..0f56b82 100644 --- a/src/csgterm.cc +++ b/src/csgterm.cc @@ -47,10 +47,10 @@   */ -CSGTerm::CSGTerm(const shared_ptr<PolySet> &polyset, const double matrix[16], const double color[4], const std::string &label) +CSGTerm::CSGTerm(const shared_ptr<PolySet> &polyset, const Transform3d &matrix, const double color[4], const std::string &label)  	: type(TYPE_PRIMITIVE), polyset(polyset), label(label), left(NULL), right(NULL)  { -	for (int i = 0; i < 16; i++) this->m[i] = matrix[i]; +	this->m = matrix;  	for (int i = 0; i < 4; i++) this->color[i] = color[i];  	refcounter = 1;  } @@ -188,7 +188,7 @@ CSGChain::CSGChain()  {  } -void CSGChain::add(const shared_ptr<PolySet> &polyset, double *m, double *color, CSGTerm::type_e type, std::string label) +void CSGChain::add(const shared_ptr<PolySet> &polyset, const Transform3d &m, double *color, CSGTerm::type_e type, std::string label)  {  	polysets.push_back(polyset);  	matrices.push_back(m); @@ -256,11 +256,7 @@ BoundingBox CSGChain::getBoundingBox() const  			if (!psbox.isNull()) {  				Eigen::Transform3d t;  				// Column-major vs. Row-major -				t.matrix()	<<  -					matrices[i][0], matrices[i][4], matrices[i][8], matrices[i][12], -					matrices[i][1], matrices[i][5], matrices[i][9], matrices[i][13], -					matrices[i][2], matrices[i][6], matrices[i][10], matrices[i][14], -					matrices[i][3], matrices[i][7], matrices[i][11], matrices[i][15]; +				t = matrices[i];  				bbox.extend(t * psbox.min());  				bbox.extend(t * psbox.max());  			} diff --git a/src/csgterm.h b/src/csgterm.h index c4e88a6..b09b2d2 100644 --- a/src/csgterm.h +++ b/src/csgterm.h @@ -3,8 +3,10 @@  #include <string>  #include <vector> -#include "polyset.h"  #include "memory.h" +#include "linalg.h" + +class PolySet;  class CSGTerm  { @@ -21,11 +23,11 @@ public:  	std::string label;  	CSGTerm *left;  	CSGTerm *right; -	double m[16]; +	Transform3d m;  	double color[4];  	int refcounter; -	CSGTerm(const shared_ptr<PolySet> &polyset, const double matrix[16], const double color[4], const std::string &label); +	CSGTerm(const shared_ptr<PolySet> &polyset, const Transform3d &matrix, const double color[4], const std::string &label);  	CSGTerm(type_e type, CSGTerm *left, CSGTerm *right);  	CSGTerm *normalize(); @@ -40,14 +42,14 @@ class CSGChain  {  public:  	std::vector<shared_ptr<PolySet> > polysets; -	std::vector<double*> matrices; +	std::vector<Transform3d> matrices;  	std::vector<double*> colors;  	std::vector<CSGTerm::type_e> types;  	std::vector<std::string> labels;  	CSGChain(); -	void add(const shared_ptr<PolySet> &polyset, double *m, double *color, CSGTerm::type_e type, std::string label); +	void add(const shared_ptr<PolySet> &polyset, const Transform3d &m, double *color, CSGTerm::type_e type, std::string label);  	void import(CSGTerm *term, CSGTerm::type_e type = CSGTerm::TYPE_UNION);  	std::string dump();  	std::string fulldump(); diff --git a/src/dxftess-glu.cc b/src/dxftess-glu.cc index 23d8a45..4ad2051 100644 --- a/src/dxftess-glu.cc +++ b/src/dxftess-glu.cc @@ -4,13 +4,11 @@  #include "grid.h"  #include <stdio.h> -#ifdef ENABLE_OPENCSG -// this must be included before the GL headers -#  include <GL/glew.h> -#endif -#include <qgl.h> +#include "system-gl.h"  #include "mathc99.h" +#include <QVector> +  #ifdef WIN32  #  define STDCALL __stdcall  #else diff --git a/src/editor.h b/src/editor.h index c2f3333..3088d20 100644 --- a/src/editor.h +++ b/src/editor.h @@ -22,7 +22,7 @@ public slots:  	//void zoomOut() { zoom(-1); }   	void zoomOut(int n = 1) { zoom(-n); }   #else -	Editor(QWidget *parent) : QTextEdit(parent) {} +	Editor(QWidget *parent) : QTextEdit(parent) { setAcceptRichText(false); }  public slots:  	void setLineWrapping(bool on) { if(on) setWordWrapMode(QTextOption::WrapAnywhere); }  	void setContentModified(bool y) { document()->setModified(y); } diff --git a/src/export.h b/src/export.h index cba0b23..dd6e3e0 100644 --- a/src/export.h +++ b/src/export.h @@ -5,8 +5,7 @@  #include <iostream> -void cgal_nef3_to_polyset(class PolySet *ps, class CGAL_Nef_polyhedron *root_N); -void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, class QProgressDialog *pd); +void export_stl(class CGAL_Nef_polyhedron *root_N, std::ostream &output, class QProgressDialog *pd);  void export_off(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDialog *pd);  void export_dxf(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDialog *pd);  #endif diff --git a/src/func.cc b/src/func.cc index b58a1b7..b011a27 100644 --- a/src/func.cc +++ b/src/func.cc @@ -27,7 +27,6 @@  #include "function.h"  #include "expression.h"  #include "context.h" -#include "dxfdim.h"  #include "builtin.h"  #include <sstream>  #include <ctime> @@ -354,7 +353,26 @@ Value builtin_lookup(const Context *, const std::vector<std::string>&, const std  Value builtin_version(const Context *, const std::vector<std::string>&, const std::vector<Value> &)  { -	return Value(std::string(QUOTED(OPENSCAD_VERSION))); +	Value val; +	val.type = Value::VECTOR; +	val.append(new Value(double(OPENSCAD_YEAR))); +	val.append(new Value(double(OPENSCAD_MONTH))); +#ifdef OPENSCAD_DAY +	val.append(new Value(double(OPENSCAD_DAY))); +#endif +	return val; +} + +Value builtin_version_num(const Context *ctx, const std::vector<std::string>& call_argnames, const std::vector<Value> &args) +{ +	Value val = (args.size() == 0) ? builtin_version(ctx, call_argnames, args) : args[0]; +	double y, m, d = 0; +	if (!val.getv3(y, m, d)) { +		if (!val.getv2(y, m)) { +			return Value(); +		} +	} +	return Value(y * 10000 + m * 100 + d);  }  void initialize_builtin_functions() @@ -382,6 +400,7 @@ void initialize_builtin_functions()  	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();  } diff --git a/src/import.cc b/src/import.cc index f64a8f6..d86a60d 100644 --- a/src/import.cc +++ b/src/import.cc @@ -228,7 +228,6 @@ std::string ImportNode::toString() const  {  	std::stringstream stream; -	QString text;  	struct stat st;  	memset(&st, 0, sizeof(struct stat));  	stat(this->filename.c_str(), &st); diff --git a/src/linalg.h b/src/linalg.h new file mode 100644 index 0000000..06991cf --- /dev/null +++ b/src/linalg.h @@ -0,0 +1,13 @@ +#ifndef LINALG_H_ +#define LINALG_H_ + +#include <Eigen/Core> +#include <Eigen/Geometry> + +using Eigen::Vector3d; +typedef Eigen::AlignedBox<double, 3> BoundingBox; +using Eigen::Matrix3f; +using Eigen::Matrix3d; +using Eigen::Transform3d; + +#endif diff --git a/src/linearextrude.cc b/src/linearextrude.cc index 4ce87db..5c3b684 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -30,11 +30,6 @@  #include "context.h"  #include "printutils.h"  #include "builtin.h" -#include "dxfdata.h" -#include "dxftess.h" -#include "polyset.h" -#include "progress.h" -#include "visitor.h"  #include "PolySetEvaluator.h"  #include "openscad.h" // get_fragments_from_r() @@ -124,7 +119,7 @@ void register_builtin_dxf_linear_extrude()  	builtin_modules["linear_extrude"] = new LinearExtrudeModule();  } -PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const +class PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const  {  	if (!evaluator) {  		PRINTF("WARNING: No suitable PolySetEvaluator found for %s module!", this->name().c_str()); diff --git a/src/mainwin.cc b/src/mainwin.cc index e287f0d..fafe8ed 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -33,13 +33,10 @@  #include "polyset.h"  #include "csgterm.h"  #include "highlighter.h" -#include "grid.h" -#include "dxfdata.h" -#include "dxfdim.h"  #include "export.h"  #include "builtin.h" -#include "dxftess.h"  #include "progress.h" +#include "dxfdim.h"  #ifdef ENABLE_OPENCSG  #include "CSGTermEvaluator.h"  #include "OpenCSGRenderer.h" @@ -104,8 +101,7 @@ unsigned int GuiLocker::gui_locked = 0;  #define QUOTED(x__) QUOTE(x__)  static char helptitle[] = -	"OpenSCAD " QUOTED(OPENSCAD_VERSION) " (www.openscad.org)\n" -	"Visitor refactored version\n"; +	"OpenSCAD " QUOTED(OPENSCAD_VERSION) " (www.openscad.org)\n\n";  static char copyrighttext[] =  	"Copyright (C) 2009-2011 Marius Kintel <marius@kintel.net> and Clifford Wolf <clifford@clifford.at>\n"  	"\n" @@ -1087,12 +1083,14 @@ void MainWindow::pasteViewportRotation()  void MainWindow::checkAutoReload()  { -	QString new_stinfo; -	QFileInfo finfo(this->fileName); -	new_stinfo = QString::number(finfo.size()) + QString::number(finfo.lastModified().toTime_t()); -	if (new_stinfo != autoReloadInfo) -		actionReloadCompile(); -	autoReloadInfo = new_stinfo; +	if (!this->fileName.isEmpty()) { +		QString new_stinfo; +		QFileInfo finfo(this->fileName); +		new_stinfo = QString::number(finfo.size()) + QString::number(finfo.lastModified().toTime_t()); +		if (new_stinfo != autoReloadInfo) +			actionReloadCompile(); +		autoReloadInfo = new_stinfo; +	}  }  void MainWindow::autoReloadSet(bool on) diff --git a/src/node.cc b/src/node.cc index e2f3fa0..12a7ca4 100644 --- a/src/node.cc +++ b/src/node.cc @@ -24,17 +24,13 @@   *   */ -#include "printutils.h"  #include "node.h"  #include "module.h" -#include "csgterm.h"  #include "progress.h" -#include "polyset.h"  #include "visitor.h" -#include "nodedumper.h"  #include "stl-utils.h" -#include <sstream> +#include <iostream>  #include <algorithm>  size_t AbstractNode::idx_counter; @@ -3,7 +3,6 @@  #include <vector>  #include <string> -  #include "traverser.h"  extern int progress_report_count; diff --git a/src/nodedumper.cc b/src/nodedumper.cc index d75c703..4523bac 100644 --- a/src/nodedumper.cc +++ b/src/nodedumper.cc @@ -1,13 +1,8 @@  #include "nodedumper.h" -#include <string> -#include <map> -#include <list> -#include "visitor.h"  #include "state.h" -#include "nodecache.h" +#include <string>  #include <sstream> -#include <iostream>  #include <assert.h>  /*! @@ -42,7 +37,7 @@ void NodeDumper::handleIndent(const State &state)  	including braces and indentation.  	All children are assumed to be cached already.   */ -string NodeDumper::dumpChildren(const AbstractNode &node) +std::string NodeDumper::dumpChildren(const AbstractNode &node)  {  	std::stringstream dump;  	if (!this->visitedchildren[node.index()].empty()) { diff --git a/src/openscad.h b/src/openscad.h index 9d97bac..e6b9b9f 100644 --- a/src/openscad.h +++ b/src/openscad.h @@ -27,11 +27,6 @@  #ifndef OPENSCAD_H  #define OPENSCAD_H -#ifdef ENABLE_OPENCSG -// this must be included before the GL headers -#  include <GL/glew.h> -#endif -  // for win32 and maybe others..  #ifndef M_PI  #  define M_PI 3.14159265358979323846 diff --git a/src/polyset.cc b/src/polyset.cc index 23b9876..1d31005 100644 --- a/src/polyset.cc +++ b/src/polyset.cc @@ -25,14 +25,13 @@   */  #include "polyset.h" -#include "printutils.h"  // FIXME: Reenable/rewrite - don't be dependant on GUI  // #include "Preferences.h"  #ifdef ENABLE_CGAL  #include <CGAL/assertions_behaviour.h>  #include <CGAL/exceptions.h>  #endif -#include <Eigen/Core> +#include "linalg.h"  #include <Eigen/LU>  #include <QColor> @@ -113,13 +112,9 @@ static void gl_draw_triangle(GLint *shaderinfo, const Vector3d &p0, const Vector  	}  } -void PolySet::render_surface(colormode_e colormode, csgmode_e csgmode, double *m, GLint *shaderinfo) const +void PolySet::render_surface(colormode_e colormode, csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo) const  { -	Eigen::Matrix3f m3f; -	m3f << m[0], m[4], m[8], -		m[1], m[5], m[9], -		m[2], m[6], m[10]; -	bool mirrored = m3f.determinant() < 0; +	bool mirrored = m.matrix().determinant() < 0;  	if (colormode == COLORMODE_MATERIAL) {  // FIXME: Reenable/rewrite - don't be dependant on GUI diff --git a/src/polyset.h b/src/polyset.h index 3cfb21a..57f5057 100644 --- a/src/polyset.h +++ b/src/polyset.h @@ -1,20 +1,11 @@  #ifndef POLYSET_H_  #define POLYSET_H_ -#ifndef __APPLE__ -#define EIGEN_DONT_VECTORIZE 1 -#define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT 1 -#endif - -#include <GL/glew.h> +#include "system-gl.h"  #include "grid.h" -#include <Eigen/Core> -#include <Eigen/Geometry> +#include "linalg.h"  #include <vector> -using Eigen::Vector3d; -typedef Eigen::AlignedBox<double, 3> BoundingBox; -  class PolySet  {  public: @@ -54,7 +45,7 @@ public:  		CSGMODE_HIGHLIGHT_DIFFERENCE = 22  	}; -	void render_surface(colormode_e colormode, csgmode_e csgmode, double *m, GLint *shaderinfo = NULL) const; +	void render_surface(colormode_e colormode, csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo = NULL) const;  	void render_edges(colormode_e colormode, csgmode_e csgmode) const;  }; diff --git a/src/primitives.cc b/src/primitives.cc index 08b9c62..a651ff8 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -32,7 +32,6 @@  #include "dxftess.h"  #include "builtin.h"  #include "printutils.h" -#include <assert.h>  #include "visitor.h"  #include <sstream>  #include <assert.h> diff --git a/src/printutils.cc b/src/printutils.cc index 01fa06b..a315ab3 100644 --- a/src/printutils.cc +++ b/src/printutils.cc @@ -1,5 +1,6 @@  #include "printutils.h"  #include <stdio.h> +#include <QDate>  QList<QString> print_messages_stack;  OutputHandlerFunc *outputhandler = NULL; diff --git a/src/printutils.h b/src/printutils.h index 0432622..60cd12a 100644 --- a/src/printutils.h +++ b/src/printutils.h @@ -5,7 +5,6 @@  #include <QList>  #include <iostream>  #include <QFileInfo> -#include <QDateTime>  typedef void (OutputHandlerFunc)(const QString &msg, void *userdata);  extern OutputHandlerFunc *outputhandler; diff --git a/src/projection.cc b/src/projection.cc index 2c9d821..1333d19 100644 --- a/src/projection.cc +++ b/src/projection.cc @@ -29,19 +29,9 @@  #include "context.h"  #include "printutils.h"  #include "builtin.h" -#include "dxfdata.h" -#include "dxftess.h" -#include "polyset.h" -#include "export.h" -#include "progress.h"  #include "visitor.h"  #include "PolySetEvaluator.h" -#ifdef ENABLE_CGAL -#  include <CGAL/assertions_behaviour.h> -#  include <CGAL/exceptions.h> -#endif -  #include <assert.h>  #include <sstream>  #include <boost/assign/std/vector.hpp> diff --git a/src/render.cc b/src/render.cc index f08423a..b79fa56 100644 --- a/src/render.cc +++ b/src/render.cc @@ -28,9 +28,6 @@  #include "module.h"  #include "context.h"  #include "builtin.h" -#include "printutils.h" -#include "progress.h" -#include "visitor.h"  #include "PolySetEvaluator.h"  #include <sstream> diff --git a/src/rotateextrude.cc b/src/rotateextrude.cc index 3a6eb55..4d6de73 100644 --- a/src/rotateextrude.cc +++ b/src/rotateextrude.cc @@ -30,8 +30,6 @@  #include "printutils.h"  #include "builtin.h"  #include "polyset.h" -#include "dxfdata.h" -#include "progress.h"  #include "visitor.h"  #include "PolySetEvaluator.h"  #include "openscad.h" // get_fragments_from_r() diff --git a/src/state.h b/src/state.h index 69aee87..5dc74df 100644 --- a/src/state.h +++ b/src/state.h @@ -2,13 +2,14 @@  #define STATE_H_  #include <cstring> +#include "linalg.h"  class State  {  public:    State(const class AbstractNode *parent)       : parentnode(parent), isprefix(false), ispostfix(false), numchildren(0) { -		for (int i=0;i<16;i++) this->m[i] = i % 5 == 0 ? 1.0 : 0.0; +		m = Transform3d::Identity();  		for (int i=0;i<4;i++) this->c[i] = -1.0;  	}    virtual ~State() {} @@ -17,14 +18,14 @@ public:    void setPostfix(bool on) { this->ispostfix = on; }    void setNumChildren(unsigned int numc) { this->numchildren = numc; }    void setParent(const AbstractNode *parent) { this->parentnode = parent; } -	void setMatrix(const double m[16]) { memcpy(this->m, m, 16*sizeof(double)); } +	void setMatrix(const Transform3d &m) { this->m = m; }  	void setColor(const double c[4]) { memcpy(this->c, c, 4*sizeof(double)); }    bool isPrefix() const { return this->isprefix; }    bool isPostfix() const { return this->ispostfix; }    unsigned int numChildren() const { return this->numchildren; }    const AbstractNode *parent() const { return this->parentnode; } -	const double *matrix() const { return this->m; } +	const Transform3d &matrix() const { return this->m; }  	const double *color() const { return this->c; }  private: @@ -34,7 +35,7 @@ private:    unsigned int numchildren;  	// Transformation matrix and color. FIXME: Generalize such state variables? -	double m[16]; +	Transform3d m;  	double c[4];  }; diff --git a/src/surface.cc b/src/surface.cc index 35449ed..8349afd 100644 --- a/src/surface.cc +++ b/src/surface.cc @@ -29,7 +29,6 @@  #include "polyset.h"  #include "context.h"  #include "builtin.h" -#include "dxftess.h"  #include "printutils.h"  #include "handle_dep.h" // handle_dep()  #include "visitor.h" diff --git a/src/system-gl.h b/src/system-gl.h new file mode 100644 index 0000000..cdbf3dc --- /dev/null +++ b/src/system-gl.h @@ -0,0 +1,11 @@ +#ifndef SYSTEMGL_H_ +#define SYSTEMGL_H_ + +#include <GL/glew.h> +#ifdef __APPLE__ +#include <OpenGL/OpenGL.h> +#else +#include <GL/gl.h> +#endif + +#endif diff --git a/src/transform.cc b/src/transform.cc index f473f6a..eda69c2 100644 --- a/src/transform.cc +++ b/src/transform.cc @@ -27,13 +27,8 @@  #include "transformnode.h"  #include "module.h"  #include "context.h" -#include "dxfdata.h" -#include "csgterm.h"  #include "polyset.h" -#include "dxftess.h"  #include "builtin.h" -#include "printutils.h" -#include "visitor.h"  #include <sstream>  #include <vector>  #include <assert.h> @@ -60,8 +55,7 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti  {  	TransformNode *node = new TransformNode(inst); -	for (int i = 0; i < 16; i++) -		node->matrix[i] = i % 5 == 0 ? 1.0 : 0.0; +	node->matrix = Transform3d::Identity();  	std::vector<std::string> argnames;  	std::vector<Expression*> argexpr; @@ -91,82 +85,50 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti  	if (this->type == SCALE)  	{ +		Vector3d scalevec(1,1,1);  		Value v = c.lookup_variable("v"); -		v.getnum(node->matrix[0]); -		v.getnum(node->matrix[5]); -		v.getnum(node->matrix[10]); -		v.getv3(node->matrix[0], node->matrix[5], node->matrix[10]); -		if (node->matrix[10] <= 0) -			node->matrix[10] = 1; +		v.getnum(scalevec[0]); +		v.getnum(scalevec[1]); +		v.getnum(scalevec[2]); +		v.getv3(scalevec[0], scalevec[1], scalevec[2]); +		if (scalevec[2] == 0) scalevec[2] = 1; +		node->matrix.scale(scalevec);  	}  	else if (this->type == ROTATE)  	{  		Value val_a = c.lookup_variable("a");  		if (val_a.type == Value::VECTOR)  		{ -			for (size_t i = 0; i < 3 && i < val_a.vec.size(); i++) { -				double a; -				val_a.vec[i]->getnum(a); -				double c = cos(a*M_PI/180.0); -				double s = sin(a*M_PI/180.0); -				double x = i == 0, y = i == 1, z = i == 2; -				double mr[16] = { -					x*x*(1-c)+c, -					y*x*(1-c)+z*s, -					z*x*(1-c)-y*s, -					0, -					x*y*(1-c)-z*s, -					y*y*(1-c)+c, -					z*y*(1-c)+x*s, -					0, -					x*z*(1-c)+y*s, -					y*z*(1-c)-x*s, -					z*z*(1-c)+c, -					0, -					0, 0, 0, 1 -				}; -				double m[16]; -				for (int x = 0; x < 4; x++) -				for (int y = 0; y < 4; y++) -				{ -					m[x+y*4] = 0; -					for (int i = 0; i < 4; i++) -						m[x+y*4] += node->matrix[i+y*4] * mr[x+i*4]; -				} -				for (int i = 0; i < 16; i++) -					node->matrix[i] = m[i]; +			Eigen::AngleAxisd rotx, roty, rotz; +			double a; +			if (val_a.vec.size() > 0) { +				val_a.vec[0]->getnum(a); +				rotx = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitX());  			} +			if (val_a.vec.size() > 1) { +				val_a.vec[1]->getnum(a); +				roty = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitY()); +			} +			if (val_a.vec.size() > 2) { +				val_a.vec[2]->getnum(a); +				rotz = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitZ()); +			} +			node->matrix.rotate(rotz * roty * rotx);  		}  		else  		{  			Value val_v = c.lookup_variable("v"); -			double a = 0, x = 0, y = 0, z = 1; +			double a = 0;  			val_a.getnum(a); -			if (val_v.getv3(x, y, z)) { -				if (x != 0.0 || y != 0.0 || z != 0.0) { -					double sn = 1.0 / sqrt(x*x + y*y + z*z); -					x *= sn, y *= sn, z *= sn; -				} +			Vector3d axis(0,0,1); +			if (val_v.getv3(axis[0], axis[1], axis[2])) { +				if (axis.squaredNorm() > 0) axis.normalize();  			} -			if (x != 0.0 || y != 0.0 || z != 0.0) -			{ -				double c = cos(a*M_PI/180.0); -				double s = sin(a*M_PI/180.0); - -				node->matrix[ 0] = x*x*(1-c)+c; -				node->matrix[ 1] = y*x*(1-c)+z*s; -				node->matrix[ 2] = z*x*(1-c)-y*s; - -				node->matrix[ 4] = x*y*(1-c)-z*s; -				node->matrix[ 5] = y*y*(1-c)+c; -				node->matrix[ 6] = z*y*(1-c)+x*s; - -				node->matrix[ 8] = x*z*(1-c)+y*s; -				node->matrix[ 9] = y*z*(1-c)-x*s; -				node->matrix[10] = z*z*(1-c)+c; +			if (axis.squaredNorm() > 0) { +				node->matrix = Eigen::AngleAxisd(a*M_PI/180, axis);  			}  		}  	} @@ -184,23 +146,20 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti  		if (x != 0.0 || y != 0.0 || z != 0.0)  		{ -			node->matrix[ 0] = 1-2*x*x; -			node->matrix[ 1] = -2*y*x; -			node->matrix[ 2] = -2*z*x; - -			node->matrix[ 4] = -2*x*y; -			node->matrix[ 5] = 1-2*y*y; -			node->matrix[ 6] = -2*z*y; - -			node->matrix[ 8] = -2*x*z; -			node->matrix[ 9] = -2*y*z; -			node->matrix[10] = 1-2*z*z; +			Eigen::Matrix4d m; +			m << 1-2*x*x, -2*y*x, -2*z*x, 0, +				-2*x*y, 1-2*y*y, -2*z*y, 0, +				-2*x*z, -2*y*z, 1-2*z*z, 0, +				0, 0, 0, 1; +			node->matrix = m;  		}  	}  	else if (this->type == TRANSLATE)  	{  		Value v = c.lookup_variable("v"); -		v.getv3(node->matrix[12], node->matrix[13], node->matrix[14]); +		Vector3d translatevec(0,0,0); +		v.getv3(translatevec[0], translatevec[1], translatevec[2]); +		node->matrix.translate(translatevec);  	}  	else if (this->type == MULTMATRIX)  	{ @@ -209,7 +168,7 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti  			for (int i = 0; i < 16; i++) {  				size_t x = i / 4, y = i % 4;  				if (y < v.vec.size() && v.vec[y]->type == Value::VECTOR && x < v.vec[y]->vec.size()) -					v.vec[y]->vec[x]->getnum(node->matrix[i]); +					v.vec[y]->vec[x]->getnum(node->matrix(y, x));  			}  		}  	} @@ -229,7 +188,7 @@ std::string TransformNode::toString() const  		stream << "[";  		for (int i=0;i<4;i++) {  			// FIXME: The 0 test is to avoid a leading minus before a single 0 (cosmetics) -			stream << ((this->matrix[i*4+j]==0)?0:this->matrix[i*4+j]); +			stream << ((this->matrix(j, i)==0)?0:this->matrix(j, i));  			if (i != 3) stream << ", ";  		}  		stream << "]"; diff --git a/src/transformnode.h b/src/transformnode.h index 9d822cb..29c6d43 100644 --- a/src/transformnode.h +++ b/src/transformnode.h @@ -3,6 +3,7 @@  #include "node.h"  #include "visitor.h" +#include "linalg.h"  class TransformNode : public AbstractNode  { @@ -14,7 +15,7 @@ public:  	virtual std::string toString() const;  	virtual std::string name() const; -	double matrix[16]; +	Transform3d matrix;  };  #endif diff --git a/testdata/scad/minimal/transform-insert.dxf b/testdata/dxf/transform-insert.dxf index 40064c2..40064c2 100644 --- a/testdata/scad/minimal/transform-insert.dxf +++ b/testdata/dxf/transform-insert.dxf diff --git a/testdata/scad/dxf/arc.scad b/testdata/scad/dxf/arc.scad new file mode 100644 index 0000000..fff70a3 --- /dev/null +++ b/testdata/scad/dxf/arc.scad @@ -0,0 +1 @@ +import("../../dxf/arc.dxf"); diff --git a/testdata/scad/dxf/circle-advanced.scad b/testdata/scad/dxf/circle-advanced.scad new file mode 100644 index 0000000..801ea05 --- /dev/null +++ b/testdata/scad/dxf/circle-advanced.scad @@ -0,0 +1 @@ +import("../../dxf/circle-advanced.dxf"); diff --git a/testdata/scad/dxf/circle-double.scad b/testdata/scad/dxf/circle-double.scad new file mode 100644 index 0000000..095c785 --- /dev/null +++ b/testdata/scad/dxf/circle-double.scad @@ -0,0 +1 @@ +import("../../dxf/circle-double.dxf"); diff --git a/testdata/scad/dxf/circle-small.scad b/testdata/scad/dxf/circle-small.scad new file mode 100644 index 0000000..94f5fa4 --- /dev/null +++ b/testdata/scad/dxf/circle-small.scad @@ -0,0 +1 @@ +import("../../dxf/circle-small.dxf"); diff --git a/testdata/scad/dxf/circle.scad b/testdata/scad/dxf/circle.scad new file mode 100644 index 0000000..8b5d132 --- /dev/null +++ b/testdata/scad/dxf/circle.scad @@ -0,0 +1 @@ +import("../../dxf/circle.dxf"); diff --git a/testdata/scad/dxf/ellipse-arc-rot.scad b/testdata/scad/dxf/ellipse-arc-rot.scad new file mode 100644 index 0000000..4b3b603 --- /dev/null +++ b/testdata/scad/dxf/ellipse-arc-rot.scad @@ -0,0 +1 @@ +import("../../dxf/ellipse-arc-rot.dxf"); diff --git a/testdata/scad/dxf/ellipse-arc.scad b/testdata/scad/dxf/ellipse-arc.scad new file mode 100644 index 0000000..4a43a16 --- /dev/null +++ b/testdata/scad/dxf/ellipse-arc.scad @@ -0,0 +1 @@ +import("../../dxf/ellipse-arc.dxf"); diff --git a/testdata/scad/dxf/ellipse-reverse.scad b/testdata/scad/dxf/ellipse-reverse.scad new file mode 100644 index 0000000..646a74a --- /dev/null +++ b/testdata/scad/dxf/ellipse-reverse.scad @@ -0,0 +1 @@ +import("../../dxf/ellipse-reverse.dxf"); diff --git a/testdata/scad/dxf/ellipse-rot.scad b/testdata/scad/dxf/ellipse-rot.scad new file mode 100644 index 0000000..f2c872f --- /dev/null +++ b/testdata/scad/dxf/ellipse-rot.scad @@ -0,0 +1 @@ +import("../../dxf/ellipse-rot.dxf"); diff --git a/testdata/scad/dxf/ellipse.scad b/testdata/scad/dxf/ellipse.scad new file mode 100644 index 0000000..5b56d35 --- /dev/null +++ b/testdata/scad/dxf/ellipse.scad @@ -0,0 +1 @@ +import("../../dxf/ellipse.dxf"); diff --git a/testdata/scad/dxf/lwpolyline-closed.scad b/testdata/scad/dxf/lwpolyline-closed.scad new file mode 100644 index 0000000..8408ac8 --- /dev/null +++ b/testdata/scad/dxf/lwpolyline-closed.scad @@ -0,0 +1 @@ +import("../../dxf/lwpolyline-closed.dxf"); diff --git a/testdata/scad/dxf/lwpolyline.scad b/testdata/scad/dxf/lwpolyline.scad new file mode 100644 index 0000000..0a50787 --- /dev/null +++ b/testdata/scad/dxf/lwpolyline.scad @@ -0,0 +1 @@ +import("../../dxf/lwpolyline.dxf"); diff --git a/testdata/scad/dxf/lwpolyline2.scad b/testdata/scad/dxf/lwpolyline2.scad new file mode 100644 index 0000000..c0bf16c --- /dev/null +++ b/testdata/scad/dxf/lwpolyline2.scad @@ -0,0 +1 @@ +import("../../dxf/lwpolyline2.dxf"); diff --git a/testdata/scad/dxf/multiple-layers.scad b/testdata/scad/dxf/multiple-layers.scad new file mode 100644 index 0000000..f32fdb1 --- /dev/null +++ b/testdata/scad/dxf/multiple-layers.scad @@ -0,0 +1 @@ +import("../../dxf/multiple-layers.dxf"); diff --git a/testdata/scad/dxf/polygon-concave-hole.scad b/testdata/scad/dxf/polygon-concave-hole.scad new file mode 100644 index 0000000..65ee56f --- /dev/null +++ b/testdata/scad/dxf/polygon-concave-hole.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-concave-hole.dxf"); diff --git a/testdata/scad/dxf/polygon-concave-simple.scad b/testdata/scad/dxf/polygon-concave-simple.scad new file mode 100644 index 0000000..8f9ad18 --- /dev/null +++ b/testdata/scad/dxf/polygon-concave-simple.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-concave-simple.dxf"); diff --git a/testdata/scad/dxf/polygon-concave.scad b/testdata/scad/dxf/polygon-concave.scad new file mode 100644 index 0000000..13db93c --- /dev/null +++ b/testdata/scad/dxf/polygon-concave.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-concave.dxf"); diff --git a/testdata/scad/dxf/polygon-holes-touch.scad b/testdata/scad/dxf/polygon-holes-touch.scad new file mode 100644 index 0000000..f716bb9 --- /dev/null +++ b/testdata/scad/dxf/polygon-holes-touch.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-holes-touch.dxf"); diff --git a/testdata/scad/dxf/polygon-intersect.scad b/testdata/scad/dxf/polygon-intersect.scad new file mode 100644 index 0000000..a1060fa --- /dev/null +++ b/testdata/scad/dxf/polygon-intersect.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-intersect.dxf"); diff --git a/testdata/scad/dxf/polygon-many-holes.scad b/testdata/scad/dxf/polygon-many-holes.scad new file mode 100644 index 0000000..0ea3324 --- /dev/null +++ b/testdata/scad/dxf/polygon-many-holes.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-many-holes.dxf"); diff --git a/testdata/scad/dxf/polygon-mesh.scad b/testdata/scad/dxf/polygon-mesh.scad new file mode 100644 index 0000000..af3e372 --- /dev/null +++ b/testdata/scad/dxf/polygon-mesh.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-mesh.dxf"); diff --git a/testdata/scad/dxf/polygon-overlap.scad b/testdata/scad/dxf/polygon-overlap.scad new file mode 100644 index 0000000..2958f5a --- /dev/null +++ b/testdata/scad/dxf/polygon-overlap.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-overlap.dxf"); diff --git a/testdata/scad/dxf/polygon-riser.scad b/testdata/scad/dxf/polygon-riser.scad new file mode 100644 index 0000000..7607258 --- /dev/null +++ b/testdata/scad/dxf/polygon-riser.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-riser.dxf"); diff --git a/testdata/scad/dxf/polygon-self-intersect.scad b/testdata/scad/dxf/polygon-self-intersect.scad new file mode 100644 index 0000000..e4764b3 --- /dev/null +++ b/testdata/scad/dxf/polygon-self-intersect.scad @@ -0,0 +1 @@ +import("../../dxf/polygon-self-intersect.dxf"); diff --git a/testdata/scad/dxf/polygon8.scad b/testdata/scad/dxf/polygon8.scad new file mode 100644 index 0000000..d17a77a --- /dev/null +++ b/testdata/scad/dxf/polygon8.scad @@ -0,0 +1 @@ +import("../../dxf/polygon8.dxf"); diff --git a/testdata/scad/dxf/polygons.scad b/testdata/scad/dxf/polygons.scad new file mode 100644 index 0000000..90fe14b --- /dev/null +++ b/testdata/scad/dxf/polygons.scad @@ -0,0 +1 @@ +import("../../dxf/polygons.dxf"); diff --git a/testdata/scad/dxf/transform-insert.scad b/testdata/scad/dxf/transform-insert.scad new file mode 100644 index 0000000..22a0132 --- /dev/null +++ b/testdata/scad/dxf/transform-insert.scad @@ -0,0 +1 @@ +import("../../dxf/transform-insert.dxf"); diff --git a/testdata/scad/dxf/triangle-with-duplicate-vertex.scad b/testdata/scad/dxf/triangle-with-duplicate-vertex.scad new file mode 100644 index 0000000..d7dfe74 --- /dev/null +++ b/testdata/scad/dxf/triangle-with-duplicate-vertex.scad @@ -0,0 +1 @@ +import("../../dxf/triangle-with-duplicate-vertex.dxf"); diff --git a/testdata/scad/features/transform-tests.scad b/testdata/scad/features/transform-tests.scad index a591695..e2dd71e 100644 --- a/testdata/scad/features/transform-tests.scad +++ b/testdata/scad/features/transform-tests.scad @@ -5,6 +5,7 @@ module mycyl() {  translate([25,0,0]) scale([1,2,0.5]) mycyl();  translate([20,-30,0]) scale(0.5) mycyl();  translate([0,-20,0]) rotate([90,0,0]) mycyl(); +translate([0,-40,0]) rotate([90,0,45]) mycyl();  rotate(v=[-1,0,0], a=45) mycyl();  multmatrix([[1,0,0,-25],              [0,1,0,0], @@ -15,4 +16,4 @@ multmatrix([[1,0.4,0.1,-25],              [0.2,0.2,0.5,0],              [0,0,0,1]]) mycyl(); -//FIXME: mirror()
\ No newline at end of file +//FIXME: mirror() and scale()
\ No newline at end of file diff --git a/testdata/scad/minimal/allfunctions.scad b/testdata/scad/minimal/allfunctions.scad index c33b43c..ef21a90 100644 --- a/testdata/scad/minimal/allfunctions.scad +++ b/testdata/scad/minimal/allfunctions.scad @@ -23,3 +23,4 @@ a = lookup();  a = dxf_dim();  a = dxf_cross();  a = version(); +a = version_num(); diff --git a/testdata/scad/minimal/transform-insert.scad b/testdata/scad/minimal/transform-insert.scad deleted file mode 100644 index 1237bb2..0000000 --- a/testdata/scad/minimal/transform-insert.scad +++ /dev/null @@ -1 +0,0 @@ -import_dxf("transform-insert.dxf"); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9e6ae0a..4ef7bf3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -93,7 +93,7 @@ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/parser_yacc.c PROPERTIES  # Internal includes  include_directories(../src) -add_definitions(-DOPENSCAD_VERSION=test) +add_definitions(-DOPENSCAD_VERSION=test -DOPENSCAD_YEAR=2011 -DOPENSCAD_MONTH=10)  set(COMMON_SOURCES    ../src/handle_dep.cc  @@ -241,6 +241,7 @@ enable_testing()  file(GLOB MINIMAL_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/*.scad)  file(GLOB FEATURES_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/*.scad)  file(GLOB BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/*.scad) +file(GLOB SCAD_DXF_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/dxf/*.scad)  # Add dumptest tests to CTest  add_cmdline_test(dumptest txt ${MINIMAL_FILES}) @@ -287,6 +288,7 @@ LIST(APPEND CGALPNGTEST_FILES              ${CMAKE_SOURCE_DIR}/../testdata/scad/features/include-tests.scad              ${CMAKE_SOURCE_DIR}/../testdata/scad/features/child-tests.scad              ${CMAKE_SOURCE_DIR}/../testdata/scad/features/ifelse-tests.scad) +LIST(APPEND CGALPNGTEST_FILES ${SCAD_DXF_FILES})  #LIST(APPEND CGALPNGTEST_FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)  add_cmdline_test(cgalpngtest png ${CGALPNGTEST_FILES}) @@ -295,6 +297,7 @@ LIST(APPEND OPENCSGTEST_FILES ${CGALPNGTEST_FILES})  LIST(APPEND OPENCSGTEST_FILES               ${CMAKE_SOURCE_DIR}/../testdata/scad/features/highlight-and-background-modifier.scad              ${CMAKE_SOURCE_DIR}/../testdata/scad/features/child-background.scad) +LIST(APPEND OPENCSGTEST_FILES ${SCAD_DXF_FILES})  add_cmdline_test(opencsgtest png ${OPENCSGTEST_FILES})  # Add throwntogether tests to CTest diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc index eec5d4b..7688fc7 100644 --- a/tests/csgtermtest.cc +++ b/tests/csgtermtest.cc @@ -26,7 +26,6 @@  #include "myqhash.h"  #include "PolySetEvaluator.h"  #include "CSGTermEvaluator.h" -#include "CSGTextCache.h"  #include "openscad.h"  #include "handle_dep.h"  #include "node.h" @@ -144,8 +143,8 @@ int main(int argc, char **argv)  //	cout << tree.getString(*root_node) << "\n"; -	vector<CSGTerm*> highlights; -	vector<CSGTerm*> background; +	std::vector<CSGTerm*> highlights; +	std::vector<CSGTerm*> background;  	PolySetEvaluator psevaluator(tree);  	CSGTermEvaluator evaluator(tree, &psevaluator);  	CSGTerm *root_term = evaluator.evaluateCSGTerm(*root_node, highlights, background); diff --git a/tests/regression/cgalpngtest/arc-expected.png b/tests/regression/cgalpngtest/arc-expected.png Binary files differnew file mode 100644 index 0000000..2f555c4 --- /dev/null +++ b/tests/regression/cgalpngtest/arc-expected.png diff --git a/tests/regression/cgalpngtest/circle-advanced-expected.png b/tests/regression/cgalpngtest/circle-advanced-expected.png Binary files differnew file mode 100644 index 0000000..3b31c78 --- /dev/null +++ b/tests/regression/cgalpngtest/circle-advanced-expected.png diff --git a/tests/regression/cgalpngtest/circle-double-expected.png b/tests/regression/cgalpngtest/circle-double-expected.png Binary files differnew file mode 100644 index 0000000..17e6b39 --- /dev/null +++ b/tests/regression/cgalpngtest/circle-double-expected.png diff --git a/tests/regression/cgalpngtest/circle-expected.png b/tests/regression/cgalpngtest/circle-expected.png Binary files differnew file mode 100644 index 0000000..aacf12d --- /dev/null +++ b/tests/regression/cgalpngtest/circle-expected.png diff --git a/tests/regression/cgalpngtest/circle-small-expected.png b/tests/regression/cgalpngtest/circle-small-expected.png Binary files differnew file mode 100644 index 0000000..bc2a75b --- /dev/null +++ b/tests/regression/cgalpngtest/circle-small-expected.png diff --git a/tests/regression/cgalpngtest/ellipse-arc-expected.png b/tests/regression/cgalpngtest/ellipse-arc-expected.png Binary files differnew file mode 100644 index 0000000..561619b --- /dev/null +++ b/tests/regression/cgalpngtest/ellipse-arc-expected.png diff --git a/tests/regression/cgalpngtest/ellipse-arc-rot-expected.png b/tests/regression/cgalpngtest/ellipse-arc-rot-expected.png Binary files differnew file mode 100644 index 0000000..7a2ef89 --- /dev/null +++ b/tests/regression/cgalpngtest/ellipse-arc-rot-expected.png diff --git a/tests/regression/cgalpngtest/ellipse-expected.png b/tests/regression/cgalpngtest/ellipse-expected.png Binary files differnew file mode 100644 index 0000000..384cb6b --- /dev/null +++ b/tests/regression/cgalpngtest/ellipse-expected.png diff --git a/tests/regression/cgalpngtest/ellipse-reverse-expected.png b/tests/regression/cgalpngtest/ellipse-reverse-expected.png Binary files differnew file mode 100644 index 0000000..e5a7b10 --- /dev/null +++ b/tests/regression/cgalpngtest/ellipse-reverse-expected.png diff --git a/tests/regression/cgalpngtest/ellipse-rot-expected.png b/tests/regression/cgalpngtest/ellipse-rot-expected.png Binary files differnew file mode 100644 index 0000000..2c68ae2 --- /dev/null +++ b/tests/regression/cgalpngtest/ellipse-rot-expected.png diff --git a/tests/regression/cgalpngtest/lwpolyline-closed-expected.png b/tests/regression/cgalpngtest/lwpolyline-closed-expected.png Binary files differnew file mode 100644 index 0000000..d0376c9 --- /dev/null +++ b/tests/regression/cgalpngtest/lwpolyline-closed-expected.png diff --git a/tests/regression/cgalpngtest/lwpolyline-expected.png b/tests/regression/cgalpngtest/lwpolyline-expected.png Binary files differnew file mode 100644 index 0000000..d0376c9 --- /dev/null +++ b/tests/regression/cgalpngtest/lwpolyline-expected.png diff --git a/tests/regression/cgalpngtest/lwpolyline2-expected.png b/tests/regression/cgalpngtest/lwpolyline2-expected.png Binary files differnew file mode 100644 index 0000000..f01f339 --- /dev/null +++ b/tests/regression/cgalpngtest/lwpolyline2-expected.png diff --git a/tests/regression/cgalpngtest/multiple-layers-expected.png b/tests/regression/cgalpngtest/multiple-layers-expected.png Binary files differnew file mode 100644 index 0000000..680729b --- /dev/null +++ b/tests/regression/cgalpngtest/multiple-layers-expected.png diff --git a/tests/regression/cgalpngtest/polygon-concave-expected.png b/tests/regression/cgalpngtest/polygon-concave-expected.png Binary files differnew file mode 100644 index 0000000..e1c68ef --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-concave-expected.png diff --git a/tests/regression/cgalpngtest/polygon-concave-hole-expected.png b/tests/regression/cgalpngtest/polygon-concave-hole-expected.png Binary files differnew file mode 100644 index 0000000..eb11557 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-concave-hole-expected.png diff --git a/tests/regression/cgalpngtest/polygon-concave-simple-expected.png b/tests/regression/cgalpngtest/polygon-concave-simple-expected.png Binary files differnew file mode 100644 index 0000000..14808ca --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-concave-simple-expected.png diff --git a/tests/regression/cgalpngtest/polygon-holes-touch-expected.png b/tests/regression/cgalpngtest/polygon-holes-touch-expected.png Binary files differnew file mode 100644 index 0000000..ef2507c --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-holes-touch-expected.png diff --git a/tests/regression/cgalpngtest/polygon-intersect-expected.png b/tests/regression/cgalpngtest/polygon-intersect-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-intersect-expected.png diff --git a/tests/regression/cgalpngtest/polygon-many-holes-expected.png b/tests/regression/cgalpngtest/polygon-many-holes-expected.png Binary files differnew file mode 100644 index 0000000..2527af9 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-many-holes-expected.png diff --git a/tests/regression/cgalpngtest/polygon-mesh-expected.png b/tests/regression/cgalpngtest/polygon-mesh-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-mesh-expected.png diff --git a/tests/regression/cgalpngtest/polygon-overlap-expected.png b/tests/regression/cgalpngtest/polygon-overlap-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-overlap-expected.png diff --git a/tests/regression/cgalpngtest/polygon-riser-expected.png b/tests/regression/cgalpngtest/polygon-riser-expected.png Binary files differnew file mode 100644 index 0000000..ce9ca69 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-riser-expected.png diff --git a/tests/regression/cgalpngtest/polygon-self-intersect-expected.png b/tests/regression/cgalpngtest/polygon-self-intersect-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon-self-intersect-expected.png diff --git a/tests/regression/cgalpngtest/polygon8-expected.png b/tests/regression/cgalpngtest/polygon8-expected.png Binary files differnew file mode 100644 index 0000000..8b480c0 --- /dev/null +++ b/tests/regression/cgalpngtest/polygon8-expected.png diff --git a/tests/regression/cgalpngtest/polygons-expected.png b/tests/regression/cgalpngtest/polygons-expected.png Binary files differnew file mode 100644 index 0000000..a30fcb6 --- /dev/null +++ b/tests/regression/cgalpngtest/polygons-expected.png diff --git a/tests/regression/cgalpngtest/transform-insert-expected.png b/tests/regression/cgalpngtest/transform-insert-expected.png Binary files differnew file mode 100644 index 0000000..12867cc --- /dev/null +++ b/tests/regression/cgalpngtest/transform-insert-expected.png diff --git a/tests/regression/cgalpngtest/transform-tests-expected.png b/tests/regression/cgalpngtest/transform-tests-expected.png Binary files differindex 08cfce8..77c52e7 100644 --- a/tests/regression/cgalpngtest/transform-tests-expected.png +++ b/tests/regression/cgalpngtest/transform-tests-expected.png diff --git a/tests/regression/cgalpngtest/triangle-with-duplicate-vertex-expected.png b/tests/regression/cgalpngtest/triangle-with-duplicate-vertex-expected.png Binary files differnew file mode 100644 index 0000000..8dd4de0 --- /dev/null +++ b/tests/regression/cgalpngtest/triangle-with-duplicate-vertex-expected.png diff --git a/tests/regression/csgtermtest/transform-insert-expected.txt b/tests/regression/csgtermtest/transform-insert-expected.txt deleted file mode 100644 index 847d6c3..0000000 --- a/tests/regression/csgtermtest/transform-insert-expected.txt +++ /dev/null @@ -1 +0,0 @@ -import2 diff --git a/tests/regression/csgtexttest/transform-insert-expected.txt b/tests/regression/csgtexttest/transform-insert-expected.txt deleted file mode 100644 index a673ddb..0000000 --- a/tests/regression/csgtexttest/transform-insert-expected.txt +++ /dev/null @@ -1 +0,0 @@ -group1(import) diff --git a/tests/regression/dumptest/transform-insert-expected.txt b/tests/regression/dumptest/transform-insert-expected.txt deleted file mode 100644 index 758c9e1..0000000 --- a/tests/regression/dumptest/transform-insert-expected.txt +++ /dev/null @@ -1,3 +0,0 @@ -group() { -	import_dxf(file = "/Users/kintel/code/OpenSCAD/openscad-visitor/testdata/scad/minimal/transform-insert.dxf", cache = "4e39fca1.4329", layer = "", origin = [ 0 0 ], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 1); -} diff --git a/tests/regression/opencsgtest/arc-expected.png b/tests/regression/opencsgtest/arc-expected.png Binary files differnew file mode 100644 index 0000000..a930c0e --- /dev/null +++ b/tests/regression/opencsgtest/arc-expected.png diff --git a/tests/regression/opencsgtest/circle-advanced-expected.png b/tests/regression/opencsgtest/circle-advanced-expected.png Binary files differnew file mode 100644 index 0000000..9dfbd61 --- /dev/null +++ b/tests/regression/opencsgtest/circle-advanced-expected.png diff --git a/tests/regression/opencsgtest/circle-double-expected.png b/tests/regression/opencsgtest/circle-double-expected.png Binary files differnew file mode 100644 index 0000000..81caba5 --- /dev/null +++ b/tests/regression/opencsgtest/circle-double-expected.png diff --git a/tests/regression/opencsgtest/circle-expected.png b/tests/regression/opencsgtest/circle-expected.png Binary files differnew file mode 100644 index 0000000..7bc63b1 --- /dev/null +++ b/tests/regression/opencsgtest/circle-expected.png diff --git a/tests/regression/opencsgtest/circle-small-expected.png b/tests/regression/opencsgtest/circle-small-expected.png Binary files differnew file mode 100644 index 0000000..9813b20 --- /dev/null +++ b/tests/regression/opencsgtest/circle-small-expected.png diff --git a/tests/regression/opencsgtest/ellipse-arc-expected.png b/tests/regression/opencsgtest/ellipse-arc-expected.png Binary files differnew file mode 100644 index 0000000..551630d --- /dev/null +++ b/tests/regression/opencsgtest/ellipse-arc-expected.png diff --git a/tests/regression/opencsgtest/ellipse-arc-rot-expected.png b/tests/regression/opencsgtest/ellipse-arc-rot-expected.png Binary files differnew file mode 100644 index 0000000..6b2a8e6 --- /dev/null +++ b/tests/regression/opencsgtest/ellipse-arc-rot-expected.png diff --git a/tests/regression/opencsgtest/ellipse-expected.png b/tests/regression/opencsgtest/ellipse-expected.png Binary files differnew file mode 100644 index 0000000..70ccad2 --- /dev/null +++ b/tests/regression/opencsgtest/ellipse-expected.png diff --git a/tests/regression/opencsgtest/ellipse-reverse-expected.png b/tests/regression/opencsgtest/ellipse-reverse-expected.png Binary files differnew file mode 100644 index 0000000..56c4710 --- /dev/null +++ b/tests/regression/opencsgtest/ellipse-reverse-expected.png diff --git a/tests/regression/opencsgtest/ellipse-rot-expected.png b/tests/regression/opencsgtest/ellipse-rot-expected.png Binary files differnew file mode 100644 index 0000000..598caa1 --- /dev/null +++ b/tests/regression/opencsgtest/ellipse-rot-expected.png diff --git a/tests/regression/opencsgtest/lwpolyline-closed-expected.png b/tests/regression/opencsgtest/lwpolyline-closed-expected.png Binary files differnew file mode 100644 index 0000000..c29d554 --- /dev/null +++ b/tests/regression/opencsgtest/lwpolyline-closed-expected.png diff --git a/tests/regression/opencsgtest/lwpolyline-expected.png b/tests/regression/opencsgtest/lwpolyline-expected.png Binary files differnew file mode 100644 index 0000000..c29d554 --- /dev/null +++ b/tests/regression/opencsgtest/lwpolyline-expected.png diff --git a/tests/regression/opencsgtest/lwpolyline2-expected.png b/tests/regression/opencsgtest/lwpolyline2-expected.png Binary files differnew file mode 100644 index 0000000..bdcb048 --- /dev/null +++ b/tests/regression/opencsgtest/lwpolyline2-expected.png diff --git a/tests/regression/opencsgtest/multiple-layers-expected.png b/tests/regression/opencsgtest/multiple-layers-expected.png Binary files differnew file mode 100644 index 0000000..1ba71bf --- /dev/null +++ b/tests/regression/opencsgtest/multiple-layers-expected.png diff --git a/tests/regression/opencsgtest/polygon-concave-expected.png b/tests/regression/opencsgtest/polygon-concave-expected.png Binary files differnew file mode 100644 index 0000000..130a5e6 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-concave-expected.png diff --git a/tests/regression/opencsgtest/polygon-concave-hole-expected.png b/tests/regression/opencsgtest/polygon-concave-hole-expected.png Binary files differnew file mode 100644 index 0000000..22f035c --- /dev/null +++ b/tests/regression/opencsgtest/polygon-concave-hole-expected.png diff --git a/tests/regression/opencsgtest/polygon-concave-simple-expected.png b/tests/regression/opencsgtest/polygon-concave-simple-expected.png Binary files differnew file mode 100644 index 0000000..cf0569c --- /dev/null +++ b/tests/regression/opencsgtest/polygon-concave-simple-expected.png diff --git a/tests/regression/opencsgtest/polygon-holes-touch-expected.png b/tests/regression/opencsgtest/polygon-holes-touch-expected.png Binary files differnew file mode 100644 index 0000000..f72a36d --- /dev/null +++ b/tests/regression/opencsgtest/polygon-holes-touch-expected.png diff --git a/tests/regression/opencsgtest/polygon-intersect-expected.png b/tests/regression/opencsgtest/polygon-intersect-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-intersect-expected.png diff --git a/tests/regression/opencsgtest/polygon-many-holes-expected.png b/tests/regression/opencsgtest/polygon-many-holes-expected.png Binary files differnew file mode 100644 index 0000000..cdbeae4 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-many-holes-expected.png diff --git a/tests/regression/opencsgtest/polygon-mesh-expected.png b/tests/regression/opencsgtest/polygon-mesh-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-mesh-expected.png diff --git a/tests/regression/opencsgtest/polygon-overlap-expected.png b/tests/regression/opencsgtest/polygon-overlap-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-overlap-expected.png diff --git a/tests/regression/opencsgtest/polygon-riser-expected.png b/tests/regression/opencsgtest/polygon-riser-expected.png Binary files differnew file mode 100644 index 0000000..3513481 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-riser-expected.png diff --git a/tests/regression/opencsgtest/polygon-self-intersect-expected.png b/tests/regression/opencsgtest/polygon-self-intersect-expected.png Binary files differnew file mode 100644 index 0000000..6f4f437 --- /dev/null +++ b/tests/regression/opencsgtest/polygon-self-intersect-expected.png diff --git a/tests/regression/opencsgtest/polygon8-expected.png b/tests/regression/opencsgtest/polygon8-expected.png Binary files differnew file mode 100644 index 0000000..5ee7c85 --- /dev/null +++ b/tests/regression/opencsgtest/polygon8-expected.png diff --git a/tests/regression/opencsgtest/polygons-expected.png b/tests/regression/opencsgtest/polygons-expected.png Binary files differnew file mode 100644 index 0000000..3ad971f --- /dev/null +++ b/tests/regression/opencsgtest/polygons-expected.png diff --git a/tests/regression/opencsgtest/transform-insert-expected.png b/tests/regression/opencsgtest/transform-insert-expected.png Binary files differnew file mode 100644 index 0000000..1d88a08 --- /dev/null +++ b/tests/regression/opencsgtest/transform-insert-expected.png diff --git a/tests/regression/opencsgtest/transform-tests-expected.png b/tests/regression/opencsgtest/transform-tests-expected.png Binary files differindex 9c763ba..dc43942 100644 --- a/tests/regression/opencsgtest/transform-tests-expected.png +++ b/tests/regression/opencsgtest/transform-tests-expected.png diff --git a/tests/regression/opencsgtest/triangle-with-duplicate-vertex-expected.png b/tests/regression/opencsgtest/triangle-with-duplicate-vertex-expected.png Binary files differnew file mode 100644 index 0000000..393de76 --- /dev/null +++ b/tests/regression/opencsgtest/triangle-with-duplicate-vertex-expected.png  | 
