From 94fd976bad360ca0d43cd5021fe6fd1f02520727 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 13 Jul 2014 18:43:44 +0200 Subject: [PATCH 01/37] Add chr() function to convert numbers to unicode characters. --- src/func.cc | 12 ++++++++++++ src/value.cc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/value.h | 2 ++ 3 files changed, 66 insertions(+) diff --git a/src/func.cc b/src/func.cc index e481cc1e..f26f44c5 100644 --- a/src/func.cc +++ b/src/func.cc @@ -527,6 +527,17 @@ Value builtin_str(const Context *, const EvalContext *evalctx) return Value(stream.str()); } +Value builtin_chr(const Context *, const EvalContext *evalctx) +{ + std::stringstream stream; + + for (size_t i = 0; i < evalctx->numArgs(); i++) { + const Value v = evalctx->getArgValue(i); + stream << v.chrString(); + } + return Value(stream.str()); +} + Value builtin_concat(const Context *, const EvalContext *evalctx) { Value::VectorType result; @@ -928,6 +939,7 @@ void register_builtin_functions() Builtins::init("log", new BuiltinFunction(&builtin_log)); Builtins::init("ln", new BuiltinFunction(&builtin_ln)); Builtins::init("str", new BuiltinFunction(&builtin_str)); + Builtins::init("chr", new BuiltinFunction(&builtin_chr)); Builtins::init("concat", new BuiltinFunction(&builtin_concat)); Builtins::init("lookup", new BuiltinFunction(&builtin_lookup)); Builtins::init("search", new BuiltinFunction(&builtin_search)); diff --git a/src/value.cc b/src/value.cc index f3f6189e..56c591be 100644 --- a/src/value.cc +++ b/src/value.cc @@ -248,6 +248,58 @@ std::string Value::toString() const return boost::apply_visitor(tostring_visitor(), this->value); } +class chr_visitor : public boost::static_visitor { +public: + template std::string operator()(const S &) const + { + return ""; + } + + std::string operator()(const double &v) const + { + char buf[8]; + memset(buf, 0, 8); + if (v > 0) { + const gunichar c = v; + if (g_unichar_validate(c) && (c != 0)) { + g_unichar_to_utf8(c, buf); + } + } + return std::string(buf); + } + + std::string operator()(const Value::VectorType &v) const + { + std::stringstream stream; + for (size_t i = 0; i < v.size(); i++) { + stream << v[i].chrString(); + } + return stream.str(); + } + + std::string operator()(const Value::RangeType &v) const + { + const boost::uint32_t steps = v.nbsteps(); + if (steps >= 10000) { + PRINTB("WARNING: Bad range parameter in for statement: too many elements (%lu).", steps); + return ""; + } + + std::stringstream stream; + Value::RangeType range = v; + for (Value::RangeType::iterator it = range.begin();it != range.end();it++) { + const Value value(*it); + stream << value.chrString(); + } + return stream.str(); + } +}; + +std::string Value::chrString() const +{ + return boost::apply_visitor(chr_visitor(), this->value); +} + const Value::VectorType &Value::toVector() const { static VectorType empty; diff --git a/src/value.h b/src/value.h index d3204d31..6c59ef2c 100644 --- a/src/value.h +++ b/src/value.h @@ -87,6 +87,7 @@ public: /// return number of steps, max uint32_t value if step is 0 boost::uint32_t nbsteps() const; + friend class chr_visitor; friend class tostring_visitor; friend class bracket_visitor; }; @@ -121,6 +122,7 @@ public: bool getDouble(double &v) const; bool toBool() const; std::string toString() const; + std::string chrString() const; const VectorType &toVector() const; bool getVec2(double &x, double &y) const; bool getVec3(double &x, double &y, double &z, double defaultval = 0.0) const; From 1269ef49c35628317dabf3790d80a5dc3af78c32 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 13 Jul 2014 19:18:48 +0200 Subject: [PATCH 02/37] Add test cases for chr(). --- testdata/scad/misc/chr-tests.scad | 24 +++++++++++++++++++ tests/CMakeLists.txt | 1 + .../echotest/chr-tests-expected.echo | 7 ++++++ 3 files changed, 32 insertions(+) create mode 100644 testdata/scad/misc/chr-tests.scad create mode 100644 tests/regression/echotest/chr-tests-expected.echo diff --git a/testdata/scad/misc/chr-tests.scad b/testdata/scad/misc/chr-tests.scad new file mode 100644 index 00000000..d8a6f983 --- /dev/null +++ b/testdata/scad/misc/chr-tests.scad @@ -0,0 +1,24 @@ +function f(x) = x; +s = "string"; +smiley = 9786; + +// empty, inf, -inf, nan +echo(chr(), chr(1/0), chr(-1/0), chr(0/0)); + +// invalid values +echo(chr(0), chr(-0), chr(0.5), chr(-0.9), chr(-100), chr(2097152), chr(1e10), chr(-2e10)); + +// valid values +echo(chr(f(33)), chr(49), chr(65), chr(97), chr(smiley), chr(128512)); + +// multiple values +echo(chr(90, 89, 88), chr(65, "test", false, -5, 0, 66, [67:69], [70, 71, 72, 73], smiley)); + +// ranges +echo(chr([48:57]), chr([70 : 2 : 80])); + +// vectors +echo(chr([65, 66, 67, 97, 98, 99]), chr([49, "test", true, -1, 50])); + +// other (not supported) types +echo(chr(undef), chr(true), chr("test"), chr(s)); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index aa7c1502..e196e226 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -924,6 +924,7 @@ list(APPEND ECHO_FILES ${FUNCTION_FILES} ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/string-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/string-indexing.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/string-unicode.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/chr-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/vector-values.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/search-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/search-tests-unicode.scad diff --git a/tests/regression/echotest/chr-tests-expected.echo b/tests/regression/echotest/chr-tests-expected.echo new file mode 100644 index 00000000..d2536c1e --- /dev/null +++ b/tests/regression/echotest/chr-tests-expected.echo @@ -0,0 +1,7 @@ +ECHO: "", "", "", "" +ECHO: "", "", "", "", "", "", "", "" +ECHO: "!", "1", "A", "a", "☺", "😀" +ECHO: "ZYX", "ABCDEFGHI☺" +ECHO: "0123456789", "FHJLNP" +ECHO: "ABCabc", "12" +ECHO: "", "", "", "" From c5050b03b7459ea19b6ded9369d098d3b08573ed Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 13 Aug 2014 23:32:27 -0400 Subject: [PATCH 03/37] fontconfig check by Don Bright --- scripts/check-dependencies.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/check-dependencies.sh b/scripts/check-dependencies.sh index c8ef5225..fad0026b 100755 --- a/scripts/check-dependencies.sh +++ b/scripts/check-dependencies.sh @@ -96,10 +96,10 @@ fontconfig_sysver() { fcpath=$1/include/fontconfig/fontconfig.h if [ ! -e $fcpath ]; then return; fi - fcmajor=`grep "define *FC_MAJOR *[0-9.]*" $fcpath | awk '{print $3}'` - fcminor=`grep "define *FC_MINOR *[0-9.]*" $fcpath | awk '{print $3}'` - fcrevison=`grep "define *FC_REVISION *[0-9.]*" $fcpath | awk '{print $3}'` - fontconfig_sysver="${fcmajor}.${fcminor}.${fcrevision}" + fcmajor=`grep "define *FC_MAJOR.*[0-9.]*" $fcpath | awk '{print $3}'` + fcminor=`grep "define *FC_MINOR.*[0-9.]*" $fcpath | awk '{print $3}'` + fcrevison=`grep "define *FC_REVISION.*[0-9.]*" $fcpath | awk '{print $3}'` + fontconfig_sysver_result="${fcmajor}.${fcminor}.${fcrevision}" } freetype2_sysver() From e70bc04197092892b83a2654624b906ab5c30c6b Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 14 Aug 2014 17:16:24 -0400 Subject: [PATCH 04/37] Colormap functionality from pull request #816, mostly by Don Bright, includes new colormaps by shaina --- openscad.pro | 2 + src/CGALRenderer.cc | 77 ++++--- src/CGALRenderer.h | 12 +- src/CGAL_renderer.h | 51 +++-- src/Camera.cc | 5 + src/GLView.cc | 33 ++- src/GLView.h | 6 + src/MainWindow.h | 1 + src/OGL_helper.h | 75 +++++-- src/Preferences.cc | 43 +--- src/Preferences.h | 6 +- src/Preferences.ui | 31 ++- src/ThrownTogetherRenderer.cc | 3 + src/color.cc | 10 +- src/colormap.h | 192 ++++-------------- src/export_png.cc | 2 + src/linalg.h | 2 +- src/mainwin.cc | 19 +- src/openscad.cc | 17 +- src/polyset.cc | 1 + src/renderer.cc | 81 +++++--- src/renderer.h | 10 +- src/rendersettings.cc | 23 +-- src/rendersettings.h | 20 +- src/typedefs.h | 5 +- tests/CMakeLists.txt | 63 +++++- .../logo_and_text-expected.png | Bin 27067 -> 22349 bytes 27 files changed, 446 insertions(+), 344 deletions(-) diff --git a/openscad.pro b/openscad.pro index 2b2d1a0e..e16020e8 100644 --- a/openscad.pro +++ b/openscad.pro @@ -221,6 +221,7 @@ HEADERS += src/typedefs.h \ src/parsersettings.h \ src/renderer.h \ src/rendersettings.h \ + src/colormap.h \ src/ThrownTogetherRenderer.h \ src/CGAL_renderer.h \ src/OGL_helper.h \ @@ -378,6 +379,7 @@ SOURCES += src/version_check.cc \ src/export_png.cc \ src/import.cc \ src/renderer.cc \ + src/colormap.cc \ src/ThrownTogetherRenderer.cc \ src/CSGTermEvaluator.cc \ src/svg.cc \ diff --git a/src/CGALRenderer.cc b/src/CGALRenderer.cc index c59df6bc..b42dd307 100644 --- a/src/CGALRenderer.cc +++ b/src/CGALRenderer.cc @@ -32,6 +32,7 @@ // dxfdata.h must come first for Eigen SIMD alignment issues #include "dxfdata.h" #include "polyset.h" +#include "printutils.h" #include "CGALRenderer.h" #include "CGAL_renderer.h" @@ -51,19 +52,7 @@ CGALRenderer::CGALRenderer(shared_ptr geom) else if (shared_ptr new_N = dynamic_pointer_cast(geom)) { assert(new_N->getDimension() == 3); if (!new_N->isEmpty()) { - this->polyhedron.reset(new Polyhedron()); - // FIXME: Make independent of Preferences - // this->polyhedron->setColor(Polyhedron::CGAL_NEF3_MARKED_FACET_COLOR, - // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).red(), - // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).green(), - // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).blue()); - // this->polyhedron->setColor(Polyhedron::CGAL_NEF3_UNMARKED_FACET_COLOR, - // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).red(), - // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).green(), - // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).blue()); - - CGAL::OGL::Nef3_Converter::convert_to_OGLPolyhedron(*new_N->p3, this->polyhedron.get()); - this->polyhedron->init(); + this->N = new_N; } } } @@ -72,9 +61,37 @@ CGALRenderer::~CGALRenderer() { } +shared_ptr CGALRenderer::getPolyhedron() const +{ + if (this->N && !this->polyhedron) buildPolyhedron(); + return this->polyhedron; +} + +void CGALRenderer::buildPolyhedron() const +{ + PRINTD("buildPolyhedron"); + this->polyhedron.reset(new Polyhedron(*this->colorscheme)); + CGAL::OGL::Nef3_Converter::convert_to_OGLPolyhedron(*this->N->p3, this->polyhedron.get()); + // CGAL_NEF3_MARKED_FACET_COLOR <- CGAL_FACE_BACK_COLOR + // CGAL_NEF3_UNMARKED_FACET_COLOR <- CGAL_FACE_FRONT_COLOR + this->polyhedron->init(); + PRINTD("buildPolyhedron() end"); +} + +// Overridden from Renderer +void CGALRenderer::setColorScheme(const ColorScheme &cs) +{ + PRINTD("setColorScheme"); + Renderer::setColorScheme(cs); + this->polyhedron.reset(); // Mark as dirty + PRINTD("setColorScheme done"); +} + void CGALRenderer::draw(bool showfaces, bool showedges) const { + PRINTD("draw()"); if (this->polyset) { + PRINTD("draw() polyset"); if (this->polyset->getDimension() == 2) { // Draw 2D polygons glDisable(GL_LIGHTING); @@ -106,27 +123,33 @@ void CGALRenderer::draw(bool showfaces, bool showedges) const this->polyset->render_surface(CSGMODE_NORMAL, Transform3d::Identity(), NULL); } } - else if (this->polyhedron) { - if (showfaces) this->polyhedron->set_style(SNC_BOUNDARY); - else this->polyhedron->set_style(SNC_SKELETON); - - this->polyhedron->draw(showfaces && showedges); - } + else { + shared_ptr polyhedron = getPolyhedron(); + if (polyhedron) { + PRINTD("draw() polyhedron"); + if (showfaces) polyhedron->set_style(SNC_BOUNDARY); + else polyhedron->set_style(SNC_SKELETON); + polyhedron->draw(showfaces && showedges); + } + } + PRINTD("draw() end"); } BoundingBox CGALRenderer::getBoundingBox() const { BoundingBox bbox; - if (this->polyhedron) { - CGAL::Bbox_3 cgalbbox = this->polyhedron->bbox(); - bbox = BoundingBox( - Vector3d(cgalbbox.xmin(), cgalbbox.ymin(), cgalbbox.zmin()), - Vector3d(cgalbbox.xmax(), cgalbbox.ymax(), cgalbbox.zmax()) ); - } - else if (this->polyset) { + if (this->polyset) { bbox = this->polyset->getBoundingBox(); } - + else { + shared_ptr polyhedron = getPolyhedron(); + if (polyhedron) { + CGAL::Bbox_3 cgalbbox = polyhedron->bbox(); + bbox = BoundingBox( + Vector3d(cgalbbox.xmin(), cgalbbox.ymin(), cgalbbox.zmin()), + Vector3d(cgalbbox.xmax(), cgalbbox.ymax(), cgalbbox.zmax())); + } + } return bbox; } diff --git a/src/CGALRenderer.h b/src/CGALRenderer.h index 5a5b3ac6..4bb2c673 100644 --- a/src/CGALRenderer.h +++ b/src/CGALRenderer.h @@ -1,16 +1,22 @@ #pragma once #include "renderer.h" +#include "CGAL_Nef_polyhedron.h" class CGALRenderer : public Renderer { public: CGALRenderer(shared_ptr geom); - virtual ~CGALRenderer(); + ~CGALRenderer(); virtual void draw(bool showfaces, bool showedges) const; + virtual void setColorScheme(const ColorScheme &cs); virtual BoundingBox getBoundingBox() const; -public: - shared_ptr polyhedron; +private: + shared_ptr getPolyhedron() const; + void buildPolyhedron() const; + + mutable shared_ptr polyhedron; + shared_ptr N; shared_ptr polyset; }; diff --git a/src/CGAL_renderer.h b/src/CGAL_renderer.h index c66337e3..433eb7d6 100644 --- a/src/CGAL_renderer.h +++ b/src/CGAL_renderer.h @@ -27,14 +27,11 @@ #pragma once #ifndef NULLGL -#include "OGL_helper.h" -#undef CGAL_NEF3_MARKED_VERTEX_COLOR -#undef CGAL_NEF3_MARKED_EDGE_COLOR -#undef CGAL_NEF3_MARKED_FACET_COLOR -#undef CGAL_NEF3_UNMARKED_VERTEX_COLOR -#undef CGAL_NEF3_UNMARKED_EDGE_COLOR -#undef CGAL_NEF3_UNMARKED_FACET_COLOR +#include "colormap.h" +#include "rendersettings.h" +#include "OGL_helper.h" +#include "printutils.h" using CGAL::OGL::SNC_BOUNDARY; using CGAL::OGL::SNC_SKELETON; @@ -53,16 +50,18 @@ public: NUM_COLORS }; - Polyhedron() { + Polyhedron(const ColorScheme &cs) { + PRINTD("Polyhedron()"); + // Set default colors. setColor(CGAL_NEF3_MARKED_VERTEX_COLOR,0xb7,0xe8,0x5c); - setColor(CGAL_NEF3_MARKED_EDGE_COLOR,0xab,0xd8,0x56); - setColor(CGAL_NEF3_MARKED_FACET_COLOR,0x9d,0xcb,0x51); setColor(CGAL_NEF3_UNMARKED_VERTEX_COLOR,0xff,0xf6,0x7c); - setColor(CGAL_NEF3_UNMARKED_EDGE_COLOR,0xff,0xec,0x5e); - setColor(CGAL_NEF3_UNMARKED_FACET_COLOR,0xf9,0xd7,0x2c); + // Face and Edge colors are taken from default colorscheme + setColorScheme(cs); + PRINTD("Polyhedron() end"); } void draw(bool showedges) const { + PRINTD("draw()"); if(this->style == SNC_BOUNDARY) { glCallList(this->object_list_+2); if(showedges) { @@ -75,27 +74,51 @@ public: glCallList(this->object_list_+1); glCallList(this->object_list_); } + PRINTD("draw() end"); } + + // overrides function in OGL_helper.h CGAL::Color getVertexColor(Vertex_iterator v) const { + PRINTD("getVertexColor"); CGAL::Color c = v->mark() ? colors[CGAL_NEF3_UNMARKED_VERTEX_COLOR] : colors[CGAL_NEF3_MARKED_VERTEX_COLOR]; return c; } + // overrides function in OGL_helper.h CGAL::Color getEdgeColor(Edge_iterator e) const { + PRINTD("getEdgeColor"); CGAL::Color c = e->mark() ? colors[CGAL_NEF3_UNMARKED_EDGE_COLOR] : colors[CGAL_NEF3_MARKED_EDGE_COLOR]; return c; } - CGAL::Color getFacetColor(Halffacet_iterator f) const { + // overrides function in OGL_helper.h + CGAL::Color getFacetColor(Halffacet_iterator f, bool is_back_facing) const { + PRINTD("getFacetColor"); CGAL::Color c = f->mark() ? colors[CGAL_NEF3_UNMARKED_FACET_COLOR] : colors[CGAL_NEF3_MARKED_FACET_COLOR]; return c; } + void setColor(Polyhedron::RenderColor color_index, const Color4f &c) { + PRINTDB("setColor %i %f %f %f",color_index%c[0]%c[1]%c[2]); + this->colors[color_index] = CGAL::Color(c[0]*255,c[1]*255,c[2]*255); + } + void setColor(Polyhedron::RenderColor color_index, unsigned char r, unsigned char g, unsigned char b) { - assert(color_index < Polyhedron::NUM_COLORS); + PRINTDB("setColor %i %i %i %i",color_index%r%g%b); this->colors[color_index] = CGAL::Color(r,g,b); } + + // set this->colors based on the given colorscheme. vertex colors + // are not set here as colorscheme doesnt yet hold vertex colors. + void setColorScheme(const ColorScheme &cs) { + PRINTD("setColorScheme"); + setColor(CGAL_NEF3_MARKED_FACET_COLOR, ColorMap::getColor(cs, CGAL_FACE_BACK_COLOR)); + setColor(CGAL_NEF3_UNMARKED_FACET_COLOR, ColorMap::getColor(cs, CGAL_FACE_FRONT_COLOR)); + setColor(CGAL_NEF3_MARKED_EDGE_COLOR, ColorMap::getColor(cs, CGAL_EDGE_BACK_COLOR)); + setColor(CGAL_NEF3_UNMARKED_EDGE_COLOR, ColorMap::getColor(cs, CGAL_EDGE_FRONT_COLOR)); + } + private: CGAL::Color colors[NUM_COLORS]; diff --git a/src/Camera.cc b/src/Camera.cc index 7f4d3c12..29ecc013 100644 --- a/src/Camera.cc +++ b/src/Camera.cc @@ -5,6 +5,7 @@ Camera::Camera(enum CameraType camtype) : type(camtype), projection(Camera::PERSPECTIVE), fov(45), height(60), viewall(false) { + PRINTD("Camera()"); if (this->type == Camera::GIMBAL) { object_trans << 0,0,0; object_rot << 35,0,25; @@ -92,6 +93,10 @@ void Camera::viewAll(const BoundingBox &bbox, float scalefactor) } break; } + PRINTDB("modified center x y z %f %f %f",center.x() % center.y() % center.z()); + PRINTDB("modified eye x y z %f %f %f",eye.x() % eye.y() % eye.z()); + PRINTDB("modified obj trans x y z %f %f %f",object_trans.x() % object_trans.y() % object_trans.z()); + PRINTDB("modified obj rot x y z %f %f %f",object_rot.x() % object_rot.y() % object_rot.z()); } void Camera::zoom(int delta) diff --git a/src/GLView.cc b/src/GLView.cc index 60589a18..a75e41fc 100644 --- a/src/GLView.cc +++ b/src/GLView.cc @@ -1,8 +1,10 @@ #include "GLView.h" #include "stdio.h" +#include "colormap.h" #include "rendersettings.h" #include "mathc99.h" +#include "printutils.h" #include "renderer.h" #ifdef _WIN32 @@ -22,6 +24,7 @@ GLView::GLView() showaxes = false; showcrosshairs = false; renderer = NULL; + colorscheme = &ColorMap::inst()->defaultColorScheme(); cam = Camera(); far_far_away = RenderSettings::inst()->far_gl_clip_limit; #ifdef ENABLE_OPENCSG @@ -39,6 +42,32 @@ void GLView::setRenderer(Renderer* r) renderer = r; } +/* update the color schemes of the Renderer attached to this GLView +to match the colorscheme of this GLView.*/ +void GLView::updateColorScheme() +{ + if (this->renderer) this->renderer->setColorScheme(*this->colorscheme); +} + +/* change this GLView's colorscheme to the one given, and update the +Renderer attached to this GLView as well. */ +void GLView::setColorScheme(const ColorScheme &cs) +{ + this->colorscheme = &cs; + this->updateColorScheme(); +} + +void GLView::setColorScheme(const std::string &cs) +{ + const ColorScheme *colorscheme = ColorMap::inst()->findColorScheme(cs); + if (colorscheme) { + setColorScheme(*colorscheme); + } + else { + PRINTB("WARNING: GLView: unknown colorscheme %s", cs); + } +} + void GLView::resizeGL(int w, int h) { #ifdef ENABLE_OPENCSG @@ -125,7 +154,7 @@ void GLView::paintGL() setupCamera(); - Color4f bgcol = RenderSettings::inst()->color(RenderSettings::BACKGROUND_COLOR); + Color4f bgcol = ColorMap::getColor(*this->colorscheme, BACKGROUND_COLOR); glClearColor(bgcol[0], bgcol[1], bgcol[2], 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); @@ -440,7 +469,7 @@ void GLView::showCrosshairs() // FIXME: Crosshairs and axes are lighted, this doesn't make sense and causes them // to change color based on view orientation. glLineWidth(3); - Color4f col = RenderSettings::inst()->color(RenderSettings::CROSSHAIR_COLOR); + Color4f col = ColorMap::getColor(*this->colorscheme, CROSSHAIR_COLOR); glColor3f(col[0], col[1], col[2]); glBegin(GL_LINES); for (double xf = -1; xf <= +1; xf += 2) diff --git a/src/GLView.h b/src/GLView.h index 83559aff..f3f98ae2 100644 --- a/src/GLView.h +++ b/src/GLView.h @@ -26,6 +26,7 @@ Some actions (showCrossHairs) only work properly on Gimbal Camera. #include "system-gl.h" #include #include "Camera.h" +#include "colormap.h" class GLView { @@ -45,11 +46,16 @@ public: void showAxes(); void showSmallaxes(); + void setColorScheme(const ColorScheme &cs); + void setColorScheme(const std::string &cs); + void updateColorScheme(); + virtual bool save(const char *filename) = 0; virtual std::string getRendererInfo() const = 0; virtual float getDPI() { return 1.0f; } Renderer *renderer; + const ColorScheme *colorscheme; Camera cam; double far_far_away; size_t width; diff --git a/src/MainWindow.h b/src/MainWindow.h index af347b1f..be4e338b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -79,6 +79,7 @@ private slots: void updateUndockMode(bool undockMode); void setFileName(const QString &filename); void setFont(const QString &family, uint size); + void setColorScheme(const QString &cs); void showProgress(); void openCSGSettingsChanged(); diff --git a/src/OGL_helper.h b/src/OGL_helper.h index 1c7ba2c1..488ee133 100644 --- a/src/OGL_helper.h +++ b/src/OGL_helper.h @@ -17,6 +17,8 @@ // // Author(s) : Peter Hachenberger +// Modified for OpenSCAD + #pragma once #include @@ -25,16 +27,18 @@ #include "system-gl.h" #include -#define CGAL_NEF3_MARKED_VERTEX_COLOR 183,232,92 -#define CGAL_NEF3_MARKED_EDGE_COLOR 171,216,86 -#define CGAL_NEF3_MARKED_FACET_COLOR 157,203,81 -#define CGAL_NEF3_MARKED_BACK_FACET_COLOR 157,103,181 - -#define CGAL_NEF3_UNMARKED_VERTEX_COLOR 255,246,124 -#define CGAL_NEF3_UNMARKED_EDGE_COLOR 255,236,94 -#define CGAL_NEF3_UNMARKED_FACET_COLOR 249,215,44 -#define CGAL_NEF3_UNMARKED_BACK_FACET_COLOR 249,115,144 +// Overridden in CGAL_renderer +/* +#define CGAL_NEF3_OGL_MARKED_VERTEX_COLOR 183,232,92 +#define CGAL_NEF3_OGL_MARKED_EDGE_COLOR 171,216,86 +#define CGAL_NEF3_OGL_MARKED_FACET_COLOR 157,203,81 +#define CGAL_NEF3_OGL_MARKED_BACK_FACET_COLOR 157,103,181 +#define CGAL_NEF3_OGL_UNMARKED_VERTEX_COLOR 255,246,124 +#define CGAL_NEF3_OGL_UNMARKED_EDGE_COLOR 255,236,94 +#define CGAL_NEF3_OGL_UNMARKED_FACET_COLOR 249,215,44 +#define CGAL_NEF3_OGL_UNMARKED_BACK_FACET_COLOR 249,115,144 +*/ const bool cull_backfaces = false; const bool color_backfaces = false; @@ -362,18 +366,24 @@ namespace OGL { Bbox_3 bbox() const { return bbox_; } Bbox_3& bbox() { return bbox_; } + // Overridden in CGAL_renderer virtual CGAL::Color getVertexColor(Vertex_iterator v) const { - CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), - ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish - CGAL::Color c = v->mark() ? ct : cf; + PRINTD("getVertexColor()"); + (void)v; +// CGAL::Color cf(CGAL_NEF3_OGL_MARKED_VERTEX_COLOR), +// ct(CGAL_NEF3_OGL_UNMARKED_VERTEX_COLOR); // more blue-ish +// CGAL::Color c = v->mark() ? ct : cf; + CGAL::Color c(0,0,200); return c; } void draw(Vertex_iterator v) const { + PRINTD("draw( Vertex_iterator )"); // CGAL_NEF_TRACEN("drawing vertex "<<*v); CGAL::Color c = getVertexColor(v); glPointSize(10); + //glPointSize(1); glColor3ub(c.red(), c.green(), c.blue()); glBegin(GL_POINTS); glVertex3d(v->x(),v->y(),v->z()); @@ -384,19 +394,26 @@ namespace OGL { glEnd(); } + // Overridden in CGAL_renderer virtual CGAL::Color getEdgeColor(Edge_iterator e) const { - CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), - ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish - CGAL::Color c = e->mark() ? ct : cf; + PRINTD("getEdgeColor)"); + (void)e; +// CGAL::Color cf(CGAL_NEF3_OGL_MARKED_EDGE_COLOR), +// ct(CGAL_NEF3_OGL_UNMARKED_EDGE_COLOR); // more blue-ish +// CGAL::Color c = e->mark() ? ct : cf; + // Overridden in CGAL_renderer + CGAL::Color c(200,0,0); return c; } void draw(Edge_iterator e) const { + PRINTD("draw(Edge_iterator)"); // CGAL_NEF_TRACEN("drawing edge "<<*e); Double_point p = e->source(), q = e->target(); CGAL::Color c = getEdgeColor(e); glLineWidth(5); + //glLineWidth(1); glColor3ub(c.red(),c.green(),c.blue()); glBegin(GL_LINE_STRIP); glVertex3d(p.x(), p.y(), p.z()); @@ -404,18 +421,32 @@ namespace OGL { glEnd(); } + + // Overridden in CGAL_renderer virtual CGAL::Color getFacetColor(Halffacet_iterator f, bool is_back_facing) const { + PRINTD("getFacetColor"); +/* + (void)f; +// CGAL::Color cf(CGAL_NEF3_OGL_MARKED_FACET_COLOR), +// ct(CGAL_NEF3_OGL_UNMARKED_FACET_COLOR); // more blue-ish +// CGAL::Color c = (f->mark() ? ct : cf); +*/ + CGAL::Color c(0,200,0); + return c; +/* if (is_back_facing) return !f->mark() - ? CGAL::Color(CGAL_NEF3_MARKED_BACK_FACET_COLOR) - : CGAL::Color(CGAL_NEF3_UNMARKED_BACK_FACET_COLOR); + ? CGAL::Color(CGAL_NEF3_OGL_MARKED_BACK_FACET_COLOR) + : CGAL::Color(CGAL_NEF3_OGL_UNMARKED_BACK_FACET_COLOR); else return !f->mark() - ? CGAL::Color(CGAL_NEF3_MARKED_FACET_COLOR) - : CGAL::Color(CGAL_NEF3_UNMARKED_FACET_COLOR); + ? CGAL::Color(CGAL_NEF3_OGL_MARKED_FACET_COLOR) + : CGAL::Color(CGAL_NEF3_OGL_UNMARKED_FACET_COLOR); +*/ } void draw(Halffacet_iterator f, bool is_back_facing) const { + PRINTD("draw(Halffacet_iterator)"); // CGAL_NEF_TRACEN("drawing facet "<<(f->debug(),"")); GLUtesselator* tess_ = gluNewTess(); gluTessCallback(tess_, GLenum(GLU_TESS_VERTEX_DATA), @@ -458,6 +489,7 @@ namespace OGL { void construct_axes() const { + PRINTD("construct_axes"); glLineWidth(2.0); // red x-axis glColor3f(1.0,0.0,0.0); @@ -491,6 +523,7 @@ namespace OGL { void fill_display_lists() { + PRINTD("fill_display_lists"); glNewList(object_list_, GL_COMPILE); Vertex_iterator v; for(v=vertices_.begin();v!=vertices_.end();++v) @@ -528,6 +561,7 @@ namespace OGL { } void init() { + PRINTD("init()"); if (init_) return; init_ = true; switches[SNC_AXES] = false; @@ -535,11 +569,13 @@ namespace OGL { object_list_ = glGenLists(4); CGAL_assertion(object_list_); fill_display_lists(); + PRINTD("init() end"); } void draw() const { + PRINTD("draw()"); if (!is_initialized()) const_cast(*this).init(); double l = (std::max)( (std::max)( bbox().xmax() - bbox().xmin(), bbox().ymax() - bbox().ymin()), @@ -562,6 +598,7 @@ namespace OGL { glCallList(object_list_+1); // edges glCallList(object_list_); // vertices if (switches[SNC_AXES]) glCallList(object_list_+3); // axis + PRINTD("draw() end"); } void debug(std::ostream& os = std::cerr) const diff --git a/src/Preferences.cc b/src/Preferences.cc index 94df31b3..a0bf5b49 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -37,6 +37,8 @@ #ifdef ENABLE_CGAL #include "CGALCache.h" #endif +#include "colormap.h" +#include "rendersettings.h" Preferences *Preferences::instance = NULL; @@ -87,7 +89,6 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) this->fontSize->setEditText( QString("%1").arg( savedsize ) ); // Setup default settings - this->defaultmap["3dview/colorscheme"] = this->colorSchemeChooser->currentItem()->text(); this->defaultmap["advanced/opencsg_show_warning"] = true; this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; this->defaultmap["advanced/polysetCacheSize"] = uint(GeometryCache::instance()->maxSize()); @@ -120,38 +121,7 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) this->actionTriggered(this->prefsAction3DView); // 3D View pane - this->colorschemes["Cornfield"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xff, 0xff, 0xe5); - this->colorschemes["Cornfield"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); - this->colorschemes["Cornfield"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); - this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); - this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); - this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); - this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Cornfield"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); - - this->colorschemes["Metallic"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xaa, 0xaa, 0xff); - this->colorschemes["Metallic"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xdd, 0xdd, 0xff); - this->colorschemes["Metallic"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0xdd, 0x22, 0xdd); - this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xdd, 0xdd, 0xff); - this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0xdd, 0x22, 0xdd); - this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); - this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Metallic"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); - - this->colorschemes["Sunset"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xaa, 0x44, 0x44); - this->colorschemes["Sunset"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xff, 0xaa, 0xaa); - this->colorschemes["Sunset"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0x88, 0x22, 0x33); - this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xff, 0xaa, 0xaa); - this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0x88, 0x22, 0x33); - this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); - this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colorschemes["Sunset"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); + this->defaultmap["3dview/colorscheme"] = "Cornfield"; // Advanced pane QValidator *validator = new QIntValidator(this); @@ -163,8 +133,6 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) setupFeaturesPage(); updateGUI(); - - RenderSettings::inst()->setColors(this->colorschemes[getValue("3dview/colorscheme").toString()]); } Preferences::~Preferences() @@ -275,10 +243,7 @@ void Preferences::on_colorSchemeChooser_itemSelectionChanged() QString scheme = this->colorSchemeChooser->currentItem()->text(); QSettings settings; settings.setValue("3dview/colorscheme", scheme); - - RenderSettings::inst()->setColors(this->colorschemes[scheme]); - - emit requestRedraw(); + emit colorSchemeChanged( scheme ); } void Preferences::on_fontChooser_activated(const QString &family) diff --git a/src/Preferences.h b/src/Preferences.h index 102ddf15..4aad048d 100644 --- a/src/Preferences.h +++ b/src/Preferences.h @@ -3,9 +3,7 @@ #include #include #include "ui_Preferences.h" -#include "rendersettings.h" -#include "linalg.h" -#include +#include "colormap.h" class Preferences : public QMainWindow, public Ui::Preferences { @@ -43,6 +41,7 @@ signals: void updateMdiMode(bool mdi) const; void updateUndockMode(bool mdi) const; void fontChanged(const QString &family, uint size) const; + void colorSchemeChanged(const QString &scheme) const; void openCSGSettingsChanged() const; void syntaxHighlightChanged(const QString &s); @@ -55,7 +54,6 @@ private: void addPrefPage(QActionGroup *group, QAction *action, QWidget *widget); QSettings::SettingsMap defaultmap; - QHash > colorschemes; QHash prefPages; static Preferences *instance; diff --git a/src/Preferences.ui b/src/Preferences.ui index 2eb1b129..80cff0cf 100644 --- a/src/Preferences.ui +++ b/src/Preferences.ui @@ -44,6 +44,12 @@ + + + 0 + 0 + + false @@ -65,6 +71,26 @@ Sunset + + + Starnight + + + + + BeforeDawn + + + + + Nature + + + + + DeepOcean + + @@ -89,6 +115,9 @@ Qt::Vertical + + QSizePolicy::Expanding + 20 @@ -170,7 +199,7 @@ 0 - + 75 diff --git a/src/ThrownTogetherRenderer.cc b/src/ThrownTogetherRenderer.cc index d95e7afe..4b114041 100644 --- a/src/ThrownTogetherRenderer.cc +++ b/src/ThrownTogetherRenderer.cc @@ -27,6 +27,7 @@ #include "ThrownTogetherRenderer.h" #include "polyset.h" #include "csgterm.h" +#include "printutils.h" #include "system-gl.h" @@ -43,6 +44,7 @@ ThrownTogetherRenderer::ThrownTogetherRenderer(CSGChain *root_chain, void ThrownTogetherRenderer::draw(bool /*showfaces*/, bool showedges) const { + PRINTD("Thrown draw"); if (this->root_chain) { glEnable(GL_CULL_FACE); glCullFace(GL_BACK); @@ -62,6 +64,7 @@ void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight, bool background, bool showedges, bool fberror) const { + PRINTD("Thrown renderCSGChain"); glDepthFunc(GL_LEQUAL); boost::unordered_map,int> geomVisitMark; BOOST_FOREACH(const CSGChainObject &obj, chain->objects) { diff --git a/src/color.cc b/src/color.cc index b91fed15..390a11d4 100644 --- a/src/color.cc +++ b/src/color.cc @@ -35,18 +35,18 @@ #include #include using namespace boost::assign; // bring 'operator+=()' into scope +#include "colormap.h" class ColorModule : public AbstractModule { public: - ColorModule() { } + ColorModule() : webcolors(ColorMap::inst()->webColors()) { } virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const; private: - static boost::unordered_map colormap; + const boost::unordered_map &webcolors; }; -#include "colormap.h" AbstractNode *ColorModule::instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const { ColorNode *node = new ColorNode(inst); @@ -72,8 +72,8 @@ AbstractNode *ColorModule::instantiate(const Context *ctx, const ModuleInstantia std::string colorname = v.toString(); boost::algorithm::to_lower(colorname); Color4f color; - if (colormap.find(colorname) != colormap.end()) { - node->color = colormap[colorname]; + if (webcolors.find(colorname) != webcolors.end()) { + node->color = webcolors.at(colorname); } else { PRINTB_NOCACHE("WARNING: Color name \"%s\" unknown. Please see", colorname); PRINT_NOCACHE("WARNING: http://en.wikipedia.org/wiki/Web_colors"); diff --git a/src/colormap.h b/src/colormap.h index 7c0652ca..9f305efd 100644 --- a/src/colormap.h +++ b/src/colormap.h @@ -1,149 +1,43 @@ -boost::unordered_map ColorModule::colormap = map_list_of - ("aliceblue", Color4f(240, 248, 255)) - ("antiquewhite", Color4f(250, 235, 215)) - ("aqua", Color4f(0, 255, 255)) - ("aquamarine", Color4f(127, 255, 212)) - ("azure", Color4f(240, 255, 255)) - ("beige", Color4f(245, 245, 220)) - ("bisque", Color4f(255, 228, 196)) - ("black", Color4f(0, 0, 0)) - ("blanchedalmond", Color4f(255, 235, 205)) - ("blue", Color4f(0, 0, 255)) - ("blueviolet", Color4f(138, 43, 226)) - ("brown", Color4f(165, 42, 42)) - ("burlywood", Color4f(222, 184, 135)) - ("cadetblue", Color4f(95, 158, 160)) - ("chartreuse", Color4f(127, 255, 0)) - ("chocolate", Color4f(210, 105, 30)) - ("coral", Color4f(255, 127, 80)) - ("cornflowerblue", Color4f(100, 149, 237)) - ("cornsilk", Color4f(255, 248, 220)) - ("crimson", Color4f(220, 20, 60)) - ("cyan", Color4f(0, 255, 255)) - ("darkblue", Color4f(0, 0, 139)) - ("darkcyan", Color4f(0, 139, 139)) - ("darkgoldenrod", Color4f(184, 134, 11)) - ("darkgray", Color4f(169, 169, 169)) - ("darkgreen", Color4f(0, 100, 0)) - ("darkgrey", Color4f(169, 169, 169)) - ("darkkhaki", Color4f(189, 183, 107)) - ("darkmagenta", Color4f(139, 0, 139)) - ("darkolivegreen", Color4f(85, 107, 47)) - ("darkorange", Color4f(255, 140, 0)) - ("darkorchid", Color4f(153, 50, 204)) - ("darkred", Color4f(139, 0, 0)) - ("darksalmon", Color4f(233, 150, 122)) - ("darkseagreen", Color4f(143, 188, 143)) - ("darkslateblue", Color4f(72, 61, 139)) - ("darkslategray", Color4f(47, 79, 79)) - ("darkslategrey", Color4f(47, 79, 79)) - ("darkturquoise", Color4f(0, 206, 209)) - ("darkviolet", Color4f(148, 0, 211)) - ("deeppink", Color4f(255, 20, 147)) - ("deepskyblue", Color4f(0, 191, 255)) - ("dimgray", Color4f(105, 105, 105)) - ("dimgrey", Color4f(105, 105, 105)) - ("dodgerblue", Color4f(30, 144, 255)) - ("firebrick", Color4f(178, 34, 34)) - ("floralwhite", Color4f(255, 250, 240)) - ("forestgreen", Color4f(34, 139, 34)) - ("fuchsia", Color4f(255, 0, 255)) - ("gainsboro", Color4f(220, 220, 220)) - ("ghostwhite", Color4f(248, 248, 255)) - ("gold", Color4f(255, 215, 0)) - ("goldenrod", Color4f(218, 165, 32)) - ("gray", Color4f(128, 128, 128)) - ("green", Color4f(0, 128, 0)) - ("greenyellow", Color4f(173, 255, 47)) - ("grey", Color4f(128, 128, 128)) - ("honeydew", Color4f(240, 255, 240)) - ("hotpink", Color4f(255, 105, 180)) - ("indianred", Color4f(205, 92, 92)) - ("indigo", Color4f(75, 0, 130)) - ("ivory", Color4f(255, 255, 240)) - ("khaki", Color4f(240, 230, 140)) - ("lavender", Color4f(230, 230, 250)) - ("lavenderblush", Color4f(255, 240, 245)) - ("lawngreen", Color4f(124, 252, 0)) - ("lemonchiffon", Color4f(255, 250, 205)) - ("lightblue", Color4f(173, 216, 230)) - ("lightcoral", Color4f(240, 128, 128)) - ("lightcyan", Color4f(224, 255, 255)) - ("lightgoldenrodyellow", Color4f(250, 250, 210)) - ("lightgray", Color4f(211, 211, 211)) - ("lightgreen", Color4f(144, 238, 144)) - ("lightgrey", Color4f(211, 211, 211)) - ("lightpink", Color4f(255, 182, 193)) - ("lightsalmon", Color4f(255, 160, 122)) - ("lightseagreen", Color4f(32, 178, 170)) - ("lightskyblue", Color4f(135, 206, 250)) - ("lightslategray", Color4f(119, 136, 153)) - ("lightslategrey", Color4f(119, 136, 153)) - ("lightsteelblue", Color4f(176, 196, 222)) - ("lightyellow", Color4f(255, 255, 224)) - ("lime", Color4f(0, 255, 0)) - ("limegreen", Color4f(50, 205, 50)) - ("linen", Color4f(250, 240, 230)) - ("magenta", Color4f(255, 0, 255)) - ("maroon", Color4f(128, 0, 0)) - ("mediumaquamarine", Color4f(102, 205, 170)) - ("mediumblue", Color4f(0, 0, 205)) - ("mediumorchid", Color4f(186, 85, 211)) - ("mediumpurple", Color4f(147, 112, 219)) - ("mediumseagreen", Color4f(60, 179, 113)) - ("mediumslateblue", Color4f(123, 104, 238)) - ("mediumspringgreen", Color4f(0, 250, 154)) - ("mediumturquoise", Color4f(72, 209, 204)) - ("mediumvioletred", Color4f(199, 21, 133)) - ("midnightblue", Color4f(25, 25, 112)) - ("mintcream", Color4f(245, 255, 250)) - ("mistyrose", Color4f(255, 228, 225)) - ("moccasin", Color4f(255, 228, 181)) - ("navajowhite", Color4f(255, 222, 173)) - ("navy", Color4f(0, 0, 128)) - ("oldlace", Color4f(253, 245, 230)) - ("olive", Color4f(128, 128, 0)) - ("olivedrab", Color4f(107, 142, 35)) - ("orange", Color4f(255, 165, 0)) - ("orangered", Color4f(255, 69, 0)) - ("orchid", Color4f(218, 112, 214)) - ("palegoldenrod", Color4f(238, 232, 170)) - ("palegreen", Color4f(152, 251, 152)) - ("paleturquoise", Color4f(175, 238, 238)) - ("palevioletred", Color4f(219, 112, 147)) - ("papayawhip", Color4f(255, 239, 213)) - ("peachpuff", Color4f(255, 218, 185)) - ("peru", Color4f(205, 133, 63)) - ("pink", Color4f(255, 192, 203)) - ("plum", Color4f(221, 160, 221)) - ("powderblue", Color4f(176, 224, 230)) - ("purple", Color4f(128, 0, 128)) - ("red", Color4f(255, 0, 0)) - ("rosybrown", Color4f(188, 143, 143)) - ("royalblue", Color4f(65, 105, 225)) - ("saddlebrown", Color4f(139, 69, 19)) - ("salmon", Color4f(250, 128, 114)) - ("sandybrown", Color4f(244, 164, 96)) - ("seagreen", Color4f(46, 139, 87)) - ("seashell", Color4f(255, 245, 238)) - ("sienna", Color4f(160, 82, 45)) - ("silver", Color4f(192, 192, 192)) - ("skyblue", Color4f(135, 206, 235)) - ("slateblue", Color4f(106, 90, 205)) - ("slategray", Color4f(112, 128, 144)) - ("slategrey", Color4f(112, 128, 144)) - ("snow", Color4f(255, 250, 250)) - ("springgreen", Color4f(0, 255, 127)) - ("steelblue", Color4f(70, 130, 180)) - ("tan", Color4f(210, 180, 140)) - ("teal", Color4f(0, 128, 128)) - ("thistle", Color4f(216, 191, 216)) - ("tomato", Color4f(255, 99, 71)) - ("transparent", Color4f(0, 0, 0, 0)) - ("turquoise", Color4f(64, 224, 208)) - ("violet", Color4f(238, 130, 238)) - ("wheat", Color4f(245, 222, 179)) - ("white", Color4f(255, 255, 255)) - ("whitesmoke", Color4f(245, 245, 245)) - ("yellow", Color4f(255, 255, 0)) - ("yellowgreen", Color4f(154, 205, 50)); +#pragma once + +#include +#include +#include +#include "linalg.h" +#include + +enum RenderColor { + BACKGROUND_COLOR, + OPENCSG_FACE_FRONT_COLOR, + OPENCSG_FACE_BACK_COLOR, + CGAL_FACE_FRONT_COLOR, + CGAL_FACE_2D_COLOR, + CGAL_FACE_BACK_COLOR, + CGAL_EDGE_FRONT_COLOR, + CGAL_EDGE_BACK_COLOR, + CGAL_EDGE_2D_COLOR, + CROSSHAIR_COLOR +}; + +typedef std::map ColorScheme; + +class ColorMap +{ +public: + static ColorMap *inst(bool erase = false); + + const ColorScheme &defaultColorScheme() const; + + const boost::unordered_map &webColors() const { return webcolors; } + const ColorScheme *findColorScheme(const std::string &name) const; + std::list colorSchemeNames() const; + + static Color4f getColor(const ColorScheme &cs, const RenderColor rc); + +private: + ColorMap(); + ~ColorMap() {} + + boost::unordered_map webcolors; + boost::unordered_map colorschemes; +}; diff --git a/src/export_png.cc b/src/export_png.cc index befdda4e..fad2a42f 100644 --- a/src/export_png.cc +++ b/src/export_png.cc @@ -38,6 +38,7 @@ void export_png(const Geometry *root_geom, Camera &cam, std::ostream &output) glview->setCamera(cam); glview->setRenderer(&cgalRenderer); + glview->setColorScheme(RenderSettings::inst()->colorscheme); glview->paintGL(); glview->save(output); } @@ -85,6 +86,7 @@ void export_png_preview_common(Tree &tree, Camera &cam, std::ostream &output, Pr OpenCSG::setContext(0); OpenCSG::setOption(OpenCSG::OffscreenSetting, OpenCSG::FrameBufferObject); #endif + csgInfo.glview->setColorScheme(RenderSettings::inst()->colorscheme); csgInfo.glview->paintGL(); csgInfo.glview->save(output); } diff --git a/src/linalg.h b/src/linalg.h index d43a28a5..69fe316f 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -3,7 +3,7 @@ #include #include #include -#include +#include EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Vector2d) using Eigen::Vector2d; diff --git a/src/mainwin.cc b/src/mainwin.cc index d166f6a3..a2e9f4ad 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -28,6 +28,7 @@ #include "ModuleCache.h" #include "MainWindow.h" #include "parsersettings.h" +#include "rendersettings.h" #include "Preferences.h" #include "printutils.h" #include "node.h" @@ -409,8 +410,13 @@ MainWindow::MainWindow(const QString &filename) this, SLOT(openCSGSettingsChanged())); connect(Preferences::inst(), SIGNAL(syntaxHighlightChanged(const QString&)), editor, SLOT(setHighlightScheme(const QString&))); + connect(Preferences::inst(), SIGNAL(colorSchemeChanged(const QString&)), + this, SLOT(setColorScheme(const QString&))); Preferences::inst()->apply(); + QString cs = Preferences::inst()->getValue("3dview/colorscheme").toString(); + this->setColorScheme(cs); + connect(this->findTypeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectFindType(int))); connect(this->findInputField, SIGNAL(returnPressed()), this->nextButton, SLOT(animateClick())); find_panel->installEventFilter(this); @@ -1917,7 +1923,7 @@ void MainWindow::actionExportCSG() return; } - std::ofstream fstream(csg_filename.toUtf8()); + std::ofstream fstream(csg_filename.toLocal8Bit()); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", csg_filename.toLocal8Bit().constData()); } @@ -1979,6 +1985,7 @@ void MainWindow::viewModePreview() viewModeActionsUncheck(); viewActionPreview->setChecked(true); this->qglview->setRenderer(this->opencsgRenderer ? (Renderer *)this->opencsgRenderer : (Renderer *)this->thrownTogetherRenderer); + this->qglview->updateColorScheme(); this->qglview->updateGL(); } else { viewModeThrownTogether(); @@ -1995,6 +2002,7 @@ void MainWindow::viewModeSurface() viewActionSurfaces->setChecked(true); this->qglview->setShowFaces(true); this->qglview->setRenderer(this->cgalRenderer); + this->qglview->updateColorScheme(); this->qglview->updateGL(); } @@ -2004,6 +2012,7 @@ void MainWindow::viewModeWireframe() viewActionWireframe->setChecked(true); this->qglview->setShowFaces(false); this->qglview->setRenderer(this->cgalRenderer); + this->qglview->updateColorScheme(); this->qglview->updateGL(); } @@ -2014,6 +2023,7 @@ void MainWindow::viewModeThrownTogether() viewModeActionsUncheck(); viewActionThrownTogether->setChecked(true); this->qglview->setRenderer(this->thrownTogetherRenderer); + this->qglview->updateColorScheme(); this->qglview->updateGL(); } @@ -2352,6 +2362,13 @@ MainWindow::preferences() Preferences::inst()->raise(); } +void MainWindow::setColorScheme(const QString &scheme) +{ + RenderSettings::inst()->colorscheme = scheme.toStdString(); + this->qglview->setColorScheme(scheme.toStdString()); + this->qglview->updateGL(); +} + void MainWindow::setFont(const QString &family, uint size) { QFont font; diff --git a/src/openscad.cc b/src/openscad.cc index 9c0fc6b6..1b860030 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -114,6 +114,7 @@ static void help(const char *progname) "%2%[ --viewall ] \\\n" "%2%[ --imgsize=width,height ] [ --projection=(o)rtho|(p)ersp] \\\n" "%2%[ --render | --preview[=throwntogether] ] \\\n" + "%2%[ --colorscheme=[Cornfield|Sunset|Metallic|Starnight|BeforeDawn|Nature|DeepOcean] ] \\\n" "%2%[ --csglimit=num ]" #ifdef ENABLE_EXPERIMENTAL " [ --enable= ]" @@ -152,7 +153,7 @@ static void info() exit(0); } -Camera get_camera( po::variables_map vm ) +Camera get_camera(po::variables_map vm) { Camera camera; @@ -623,6 +624,7 @@ int main(int argc, char **argv) ("viewall", "adjust camera to fit object") ("imgsize", po::value(), "=width,height for exporting png") ("projection", po::value(), "(o)rtho or (p)erspective when exporting png") + ("colorscheme", po::value(), "colorscheme") ("debug", po::value(), "special debug info") ("o,o", po::value(), "out-file") ("s,s", po::value(), "stl-file") @@ -723,6 +725,19 @@ int main(int argc, char **argv) } #endif + if (vm.count("colorscheme")) { + std::string colorscheme = vm["colorscheme"].as(); + if (ColorMap::inst()->findColorScheme(colorscheme)) { + RenderSettings::inst()->colorscheme = colorscheme; + } else { + PRINT("Unknown color scheme. Valid schemes:"); + BOOST_FOREACH (const std::string &name, ColorMap::inst()->colorSchemeNames()) { + PRINT(name); + } + exit(1); + } + } + currentdir = boosty::stringy(fs::current_path()); Camera camera = get_camera(vm); diff --git a/src/polyset.cc b/src/polyset.cc index 0d811e4a..222bfcb2 100644 --- a/src/polyset.cc +++ b/src/polyset.cc @@ -239,6 +239,7 @@ static void gl_draw_triangle(GLint *shaderinfo, const Vector3d &p0, const Vector void PolySet::render_surface(Renderer::csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo) const { + PRINTD("Polyset render"); bool mirrored = m.matrix().determinant() < 0; #ifdef ENABLE_OPENCSG if (shaderinfo) { diff --git a/src/renderer.cc b/src/renderer.cc index 2f64999b..3b7a2a8a 100644 --- a/src/renderer.cc +++ b/src/renderer.cc @@ -3,47 +3,46 @@ #include "Geometry.h" #include "polyset.h" #include "Polygon2d.h" +#include "colormap.h" +#include "printutils.h" bool Renderer::getColor(Renderer::ColorMode colormode, Color4f &col) const { - switch (colormode) { - case COLORMODE_NONE: - return false; - break; - case COLORMODE_MATERIAL: - col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_FRONT_COLOR); - break; - case COLORMODE_CUTOUT: - col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_BACK_COLOR); - break; - case COLORMODE_HIGHLIGHT: - col.setRgb(255, 81, 81, 128); - break; - case COLORMODE_BACKGROUND: - col.setRgb(180, 180, 180, 128); - break; - case COLORMODE_MATERIAL_EDGES: - col.setRgb(255, 236, 94); - break; - case COLORMODE_CUTOUT_EDGES: - col.setRgb(171, 216, 86); - break; - case COLORMODE_HIGHLIGHT_EDGES: - col.setRgb(255, 171, 86, 128); - break; - case COLORMODE_BACKGROUND_EDGES: - col.setRgb(150, 150, 150, 128); - break; - default: - return false; - break; + if (colormode==COLORMODE_NONE) return false; + if (colormap.count(colormode) > 0) { + col = colormap.at(colormode); + return true; } - return true; + return false; +} + +Renderer::Renderer() : colorscheme(NULL) +{ + PRINTD("Renderer() start"); + // Setup default colors + // The main colors, MATERIAL and CUTOUT, come from this object's + // colorscheme. Colorschemes don't currently hold information + // for Highlight/Background colors + // but it wouldn't be too hard to make them do so. + + // MATERIAL is set by this object's colorscheme + // CUTOUT is set by this object's colorscheme + colormap[COLORMODE_HIGHLIGHT] = Color4f(255, 81, 81, 128); + colormap[COLORMODE_BACKGROUND] = Color4f(180, 180, 180, 128); + // MATERIAL_EDGES is set by this object's colorscheme + // CUTOUT_EDGES is set by this object's colorscheme + colormap[COLORMODE_HIGHLIGHT_EDGES] = Color4f(255, 171, 86, 128); + colormap[COLORMODE_BACKGROUND_EDGES] = Color4f(150, 150, 150, 128); + + setColorScheme(ColorMap::inst()->defaultColorScheme()); + PRINTD("Renderer() end"); } void Renderer::setColor(const float color[4], GLint *shaderinfo) const { - Color4f col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_FRONT_COLOR); + PRINTD("setColor a"); + Color4f col; + getColor(COLORMODE_MATERIAL,col); float c[4] = {color[0], color[1], color[2], color[3]}; if (c[0] < 0) c[0] = col[0]; if (c[1] < 0) c[1] = col[1]; @@ -60,6 +59,7 @@ void Renderer::setColor(const float color[4], GLint *shaderinfo) const void Renderer::setColor(ColorMode colormode, const float color[4], GLint *shaderinfo) const { + PRINTD("setColor b"); Color4f basecol; if (getColor(colormode, basecol)) { if (colormode == COLORMODE_BACKGROUND) { @@ -80,10 +80,25 @@ void Renderer::setColor(ColorMode colormode, const float color[4], GLint *shader void Renderer::setColor(ColorMode colormode, GLint *shaderinfo) const { + PRINTD("setColor c"); float c[4] = {-1,-1,-1,-1}; setColor(colormode, c, shaderinfo); } +/* fill this->colormap with matching entries from the colorscheme. note +this does not change Highlight or Background colors as they are not +represented in the colorscheme (yet). Also edgecolors are currently the +same for CGAL & OpenCSG */ +void Renderer::setColorScheme(const ColorScheme &cs) { + PRINTD("setColorScheme"); + colormap[COLORMODE_MATERIAL] = ColorMap::getColor(cs, OPENCSG_FACE_FRONT_COLOR); + colormap[COLORMODE_CUTOUT] = ColorMap::getColor(cs, OPENCSG_FACE_BACK_COLOR); + colormap[COLORMODE_MATERIAL_EDGES] = ColorMap::getColor(cs, CGAL_EDGE_FRONT_COLOR); + colormap[COLORMODE_CUTOUT_EDGES] = ColorMap::getColor(cs, CGAL_EDGE_BACK_COLOR); + colormap[COLORMODE_EMPTY_SPACE] = ColorMap::getColor(cs, BACKGROUND_COLOR); + this->colorscheme = &cs; +} + void Renderer::render_surface(shared_ptr geom, csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo) { shared_ptr ps; diff --git a/src/renderer.h b/src/renderer.h index 992ef347..d8498607 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -3,6 +3,7 @@ #include "system-gl.h" #include "linalg.h" #include "memory.h" +#include "colormap.h" #ifdef _MSC_VER // NULL #include @@ -11,6 +12,7 @@ class Renderer { public: + Renderer(); virtual ~Renderer() {} virtual void draw(bool showfaces, bool showedges) const = 0; virtual BoundingBox getBoundingBox() const = 0; @@ -35,14 +37,20 @@ public: COLORMODE_MATERIAL_EDGES, COLORMODE_CUTOUT_EDGES, COLORMODE_HIGHLIGHT_EDGES, - COLORMODE_BACKGROUND_EDGES + COLORMODE_BACKGROUND_EDGES, + COLORMODE_EMPTY_SPACE }; virtual bool getColor(ColorMode colormode, Color4f &col) const; virtual void setColor(const float color[4], GLint *shaderinfo = NULL) const; virtual void setColor(ColorMode colormode, GLint *shaderinfo = NULL) const; virtual void setColor(ColorMode colormode, const float color[4], GLint *shaderinfo = NULL) const; + virtual void setColorScheme(const ColorScheme &cs); static void render_surface(shared_ptr geom, csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo = NULL); static void render_edges(shared_ptr geom, csgmode_e csgmode); + +protected: + std::map colormap; + const ColorScheme *colorscheme; }; diff --git a/src/rendersettings.cc b/src/rendersettings.cc index ba68dc5d..b3eb86b2 100644 --- a/src/rendersettings.cc +++ b/src/rendersettings.cc @@ -1,4 +1,6 @@ #include "rendersettings.h" +#include "colormap.h" +#include "printutils.h" RenderSettings *RenderSettings::inst(bool erase) { @@ -16,24 +18,5 @@ RenderSettings::RenderSettings() far_gl_clip_limit = 100000.0; img_width = 512; img_height = 512; - this->colors[BACKGROUND_COLOR] = Color4f(0xff, 0xff, 0xe5); - this->colors[OPENCSG_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); - this->colors[OPENCSG_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); - this->colors[CGAL_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); - this->colors[CGAL_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); - this->colors[CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); - this->colors[CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colors[CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colors[CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); - this->colors[CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); -} - -Color4f RenderSettings::color(RenderColor idx) -{ - return this->colors[idx]; -} - -void RenderSettings::setColors(const std::map &colors) -{ - this->colors = colors; + colorscheme = "Cornfield"; } diff --git a/src/rendersettings.h b/src/rendersettings.h index e0be8174..09be9ded 100644 --- a/src/rendersettings.h +++ b/src/rendersettings.h @@ -2,33 +2,17 @@ #include #include "linalg.h" +#include "colormap.h" class RenderSettings { public: static RenderSettings *inst(bool erase = false); - enum RenderColor { - BACKGROUND_COLOR, - OPENCSG_FACE_FRONT_COLOR, - OPENCSG_FACE_BACK_COLOR, - CGAL_FACE_FRONT_COLOR, - CGAL_FACE_2D_COLOR, - CGAL_FACE_BACK_COLOR, - CGAL_EDGE_FRONT_COLOR, - CGAL_EDGE_BACK_COLOR, - CGAL_EDGE_2D_COLOR, - CROSSHAIR_COLOR - }; - - void setColors(const std::map &colors); - Color4f color(RenderColor idx); - unsigned int openCSGTermLimit, img_width, img_height; double far_gl_clip_limit; + std::string colorscheme; private: RenderSettings(); ~RenderSettings() {} - - std::map colors; }; diff --git a/src/typedefs.h b/src/typedefs.h index a7516ca6..56cd5e8a 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -2,13 +2,14 @@ #include #include +#include #include class Assignment : public std::pair > { public: - Assignment(std::string name) : pair(name, boost::shared_ptr()) {} - Assignment(std::string name, boost::shared_ptr expr) : pair(name, expr) {} + Assignment(std::string name) { first = name; second = boost::shared_ptr(); } + Assignment(std::string name, boost::shared_ptr expr) { first = name; second = expr; } }; typedef std::vector AssignmentList; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 24a4e3ac..0e48957a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -622,6 +622,7 @@ set(CORE_SOURCES ../src/parsersettings.cc ../src/mathc99.cc ../src/linalg.cc + ../src/colormap.cc ../src/Camera.cc ../src/handle_dep.cc ../src/value.cc @@ -905,6 +906,18 @@ function(add_cmdline_test TESTCMD_BASENAME) if (${DISABLED} EQUAL -1) + set(EXPERIMENTAL_OPTION "") + string(REGEX MATCH "csgtexttest" match_result1 ${TEST_FULLNAME}) + string(REGEX MATCH "cgalstlsanity" match_result2 ${TEST_FULLNAME}) + string(REGEX MATCH "dumptest" match_result3 ${TEST_FULLNAME}) + if( "${match_result1}" STREQUAL "" ) + if( "${match_result2}" STREQUAL "" ) + if( "${match_result3}" STREQUAL "" ) + set(EXPERIMENTAL_OPTION "--enable=text") + endif() + endif() + endif() + # 2D tests should be viewed from the top, not an angle. set(CAMERA_OPTION "") foreach(test2d IN LISTS TESTS_2D) @@ -933,7 +946,7 @@ function(add_cmdline_test TESTCMD_BASENAME) set(FILENAME_OPTION -f ${FILE_BASENAME}) endif() - add_test(NAME ${TEST_FULLNAME} ${CONFARG} ${CONFVAL} COMMAND ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py --comparator=${COMPARATOR} -c ${IMAGE_COMPARE_EXECUTABLE} -s ${TESTCMD_SUFFIX} ${EXTRA_OPTIONS} ${TESTNAME_OPTION} ${FILENAME_OPTION} ${TESTCMD_EXE} ${TESTCMD_SCRIPT} "${SCADFILE}" ${CAMERA_OPTION} ${TESTCMD_ARGS}) + add_test(NAME ${TEST_FULLNAME} ${CONFARG} ${CONFVAL} COMMAND ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py --comparator=${COMPARATOR} -c ${IMAGE_COMPARE_EXECUTABLE} -s ${TESTCMD_SUFFIX} ${EXTRA_OPTIONS} ${TESTNAME_OPTION} ${FILENAME_OPTION} ${TESTCMD_EXE} ${TESTCMD_SCRIPT} "${SCADFILE}" ${CAMERA_OPTION} ${EXPERIMENTAL_OPTION} ${TESTCMD_ARGS}) set_property(TEST ${TEST_FULLNAME} PROPERTY ENVIRONMENT "${CTEST_ENVIRONMENT}") endif() endforeach() @@ -1028,6 +1041,8 @@ disable_tests( offpngtest_iteration stlpngtest_fractal offpngtest_fractal + stlpngtest_logo_and_text + offpngtest_logo_and_text ) # mark which tests are 2d (regex match inside add_cmdline_test) @@ -1085,7 +1100,23 @@ set_test_config(Heavy cgalpngtest_rotate_extrude-tests cgalpngtest_linear_extrude-scale-zero-tests csgpngtest_linear_extrude-scale-zero-tests cgalpngtest_sphere-tests - csgpngtest_resize-tests) + csgpngtest_resize-tests + csgpngtest_resize-tests + stlpngtest_fence + stlpngtest_surface + stlpngtest_demo_cut + stlpngtest_search + stlpngtest_rounded_box + stlpngtest_difference + stlpngtest_translation + offpngtest_fence + offpngtest_surface + offpngtest_demo_cut + offpngtest_search + offpngtest_rounded_box + offpngtest_difference + offpngtest_translation +) # Bugs @@ -1313,11 +1344,35 @@ add_cmdline_test(openscad-cameyeortho-viewall EXE ${OPENSCAD_BINPATH} SUFFIX png FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) - +# Colorscheme tests +add_cmdline_test(openscad-colorscheme-cornfield EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Cornfield -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) +add_cmdline_test(openscad-colorscheme-metallic EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Metallic -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) +add_cmdline_test(openscad-colorscheme-metallic-render EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Metallic --render -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) +add_cmdline_test(openscad-colorscheme-sunset EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Sunset -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) +add_cmdline_test(openscad-colorscheme-starnight EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Starnight -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) +add_cmdline_test(openscad-colorscheme-monotone EXE ${OPENSCAD_BINPATH} + ARGS --colorscheme=Monotone -o + SUFFIX png + FILES ${CMAKE_SOURCE_DIR}/../examples/Basics/difference_cube.scad) #message("Available test configurations: ${TEST_CONFIGS}") #foreach(CONF ${TEST_CONFIGS}) # message("${CONF}: ${${CONF}_TEST_CONFIG}") #endforeach() -message("CPPFLAGS: ${CMAKE_CXX_FLAGS}") +message(STATUS "CPPFLAGS: ${CMAKE_CXX_FLAGS}") diff --git a/tests/regression/throwntogethertest/logo_and_text-expected.png b/tests/regression/throwntogethertest/logo_and_text-expected.png index 279f2a9e3d4778fb0af78fa66b6d8628996cf47f..cb13d2a23cb3a02cd32ca1218cf5afb81090b78c 100644 GIT binary patch literal 22349 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 From 5133984202b3c12ffd67e6333befe42bda945066 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 14 Aug 2014 17:17:18 -0400 Subject: [PATCH 05/37] new test results --- .../difference_cube-expected.png | Bin 0 -> 12275 bytes .../difference_cube-expected.png | Bin 0 -> 10996 bytes .../difference_cube-expected.png | Bin 0 -> 12239 bytes .../difference_cube-expected.png | Bin 0 -> 12199 bytes .../difference_cube-expected.png | Bin 0 -> 11073 bytes .../difference_cube-expected.png | Bin 0 -> 12259 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/regression/openscad-colorscheme-cornfield/difference_cube-expected.png create mode 100644 tests/regression/openscad-colorscheme-metallic-render/difference_cube-expected.png create mode 100644 tests/regression/openscad-colorscheme-metallic/difference_cube-expected.png create mode 100644 tests/regression/openscad-colorscheme-monotone/difference_cube-expected.png create mode 100644 tests/regression/openscad-colorscheme-starnight/difference_cube-expected.png create mode 100644 tests/regression/openscad-colorscheme-sunset/difference_cube-expected.png diff --git a/tests/regression/openscad-colorscheme-cornfield/difference_cube-expected.png b/tests/regression/openscad-colorscheme-cornfield/difference_cube-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd164ae51b9724de1f457e5ef57ca5fc339a665 GIT binary patch literal 12275 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 literal 0 HcmV?d00001 diff --git a/tests/regression/openscad-colorscheme-starnight/difference_cube-expected.png b/tests/regression/openscad-colorscheme-starnight/difference_cube-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a1053f328658c309470c4b3e607963051a008e GIT binary patch literal 11073 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 OnHU?G>zC;{ME@VZ(uI8h literal 0 HcmV?d00001 diff --git a/tests/regression/openscad-colorscheme-sunset/difference_cube-expected.png b/tests/regression/openscad-colorscheme-sunset/difference_cube-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..93990c66c84e3ea9c2ee674a00cc2b1c456de4fe GIT binary patch literal 12259 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 T&NM+^-UlW|riR7(_7VRFxpdaD literal 0 HcmV?d00001 From 717ff3b1ef5a49ad0ea21a595db38823aea3c4cb Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 14 Aug 2014 17:19:41 -0400 Subject: [PATCH 06/37] forgot to add colormap class --- src/colormap.cc | 318 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 src/colormap.cc diff --git a/src/colormap.cc b/src/colormap.cc new file mode 100644 index 00000000..0ec7c460 --- /dev/null +++ b/src/colormap.cc @@ -0,0 +1,318 @@ +#include "colormap.h" +#include +#include "printutils.h" +using namespace boost::assign; // bring map_list_of() into scope + +ColorMap *ColorMap::inst(bool erase) +{ + static ColorMap *instance = new ColorMap; + if (erase) { + delete instance; + instance = NULL; + } + return instance; +} + +ColorMap::ColorMap() { + webcolors = map_list_of + ("aliceblue", Color4f(240, 248, 255)) + ("antiquewhite", Color4f(250, 235, 215)) + ("aqua", Color4f(0, 255, 255)) + ("aquamarine", Color4f(127, 255, 212)) + ("azure", Color4f(240, 255, 255)) + ("beige", Color4f(245, 245, 220)) + ("bisque", Color4f(255, 228, 196)) + ("black", Color4f(0, 0, 0)) + ("blanchedalmond", Color4f(255, 235, 205)) + ("blue", Color4f(0, 0, 255)) + ("blueviolet", Color4f(138, 43, 226)) + ("brown", Color4f(165, 42, 42)) + ("burlywood", Color4f(222, 184, 135)) + ("cadetblue", Color4f(95, 158, 160)) + ("chartreuse", Color4f(127, 255, 0)) + ("chocolate", Color4f(210, 105, 30)) + ("coral", Color4f(255, 127, 80)) + ("cornflowerblue", Color4f(100, 149, 237)) + ("cornsilk", Color4f(255, 248, 220)) + ("crimson", Color4f(220, 20, 60)) + ("cyan", Color4f(0, 255, 255)) + ("darkblue", Color4f(0, 0, 139)) + ("darkcyan", Color4f(0, 139, 139)) + ("darkgoldenrod", Color4f(184, 134, 11)) + ("darkgray", Color4f(169, 169, 169)) + ("darkgreen", Color4f(0, 100, 0)) + ("darkgrey", Color4f(169, 169, 169)) + ("darkkhaki", Color4f(189, 183, 107)) + ("darkmagenta", Color4f(139, 0, 139)) + ("darkolivegreen", Color4f(85, 107, 47)) + ("darkorange", Color4f(255, 140, 0)) + ("darkorchid", Color4f(153, 50, 204)) + ("darkred", Color4f(139, 0, 0)) + ("darksalmon", Color4f(233, 150, 122)) + ("darkseagreen", Color4f(143, 188, 143)) + ("darkslateblue", Color4f(72, 61, 139)) + ("darkslategray", Color4f(47, 79, 79)) + ("darkslategrey", Color4f(47, 79, 79)) + ("darkturquoise", Color4f(0, 206, 209)) + ("darkviolet", Color4f(148, 0, 211)) + ("deeppink", Color4f(255, 20, 147)) + ("deepskyblue", Color4f(0, 191, 255)) + ("dimgray", Color4f(105, 105, 105)) + ("dimgrey", Color4f(105, 105, 105)) + ("dodgerblue", Color4f(30, 144, 255)) + ("firebrick", Color4f(178, 34, 34)) + ("floralwhite", Color4f(255, 250, 240)) + ("forestgreen", Color4f(34, 139, 34)) + ("fuchsia", Color4f(255, 0, 255)) + ("gainsboro", Color4f(220, 220, 220)) + ("ghostwhite", Color4f(248, 248, 255)) + ("gold", Color4f(255, 215, 0)) + ("goldenrod", Color4f(218, 165, 32)) + ("gray", Color4f(128, 128, 128)) + ("green", Color4f(0, 128, 0)) + ("greenyellow", Color4f(173, 255, 47)) + ("grey", Color4f(128, 128, 128)) + ("honeydew", Color4f(240, 255, 240)) + ("hotpink", Color4f(255, 105, 180)) + ("indianred", Color4f(205, 92, 92)) + ("indigo", Color4f(75, 0, 130)) + ("ivory", Color4f(255, 255, 240)) + ("khaki", Color4f(240, 230, 140)) + ("lavender", Color4f(230, 230, 250)) + ("lavenderblush", Color4f(255, 240, 245)) + ("lawngreen", Color4f(124, 252, 0)) + ("lemonchiffon", Color4f(255, 250, 205)) + ("lightblue", Color4f(173, 216, 230)) + ("lightcoral", Color4f(240, 128, 128)) + ("lightcyan", Color4f(224, 255, 255)) + ("lightgoldenrodyellow", Color4f(250, 250, 210)) + ("lightgray", Color4f(211, 211, 211)) + ("lightgreen", Color4f(144, 238, 144)) + ("lightgrey", Color4f(211, 211, 211)) + ("lightpink", Color4f(255, 182, 193)) + ("lightsalmon", Color4f(255, 160, 122)) + ("lightseagreen", Color4f(32, 178, 170)) + ("lightskyblue", Color4f(135, 206, 250)) + ("lightslategray", Color4f(119, 136, 153)) + ("lightslategrey", Color4f(119, 136, 153)) + ("lightsteelblue", Color4f(176, 196, 222)) + ("lightyellow", Color4f(255, 255, 224)) + ("lime", Color4f(0, 255, 0)) + ("limegreen", Color4f(50, 205, 50)) + ("linen", Color4f(250, 240, 230)) + ("magenta", Color4f(255, 0, 255)) + ("maroon", Color4f(128, 0, 0)) + ("mediumaquamarine", Color4f(102, 205, 170)) + ("mediumblue", Color4f(0, 0, 205)) + ("mediumorchid", Color4f(186, 85, 211)) + ("mediumpurple", Color4f(147, 112, 219)) + ("mediumseagreen", Color4f(60, 179, 113)) + ("mediumslateblue", Color4f(123, 104, 238)) + ("mediumspringgreen", Color4f(0, 250, 154)) + ("mediumturquoise", Color4f(72, 209, 204)) + ("mediumvioletred", Color4f(199, 21, 133)) + ("midnightblue", Color4f(25, 25, 112)) + ("mintcream", Color4f(245, 255, 250)) + ("mistyrose", Color4f(255, 228, 225)) + ("moccasin", Color4f(255, 228, 181)) + ("navajowhite", Color4f(255, 222, 173)) + ("navy", Color4f(0, 0, 128)) + ("oldlace", Color4f(253, 245, 230)) + ("olive", Color4f(128, 128, 0)) + ("olivedrab", Color4f(107, 142, 35)) + ("orange", Color4f(255, 165, 0)) + ("orangered", Color4f(255, 69, 0)) + ("orchid", Color4f(218, 112, 214)) + ("palegoldenrod", Color4f(238, 232, 170)) + ("palegreen", Color4f(152, 251, 152)) + ("paleturquoise", Color4f(175, 238, 238)) + ("palevioletred", Color4f(219, 112, 147)) + ("papayawhip", Color4f(255, 239, 213)) + ("peachpuff", Color4f(255, 218, 185)) + ("peru", Color4f(205, 133, 63)) + ("pink", Color4f(255, 192, 203)) + ("plum", Color4f(221, 160, 221)) + ("powderblue", Color4f(176, 224, 230)) + ("purple", Color4f(128, 0, 128)) + ("red", Color4f(255, 0, 0)) + ("rosybrown", Color4f(188, 143, 143)) + ("royalblue", Color4f(65, 105, 225)) + ("saddlebrown", Color4f(139, 69, 19)) + ("salmon", Color4f(250, 128, 114)) + ("sandybrown", Color4f(244, 164, 96)) + ("seagreen", Color4f(46, 139, 87)) + ("seashell", Color4f(255, 245, 238)) + ("sienna", Color4f(160, 82, 45)) + ("silver", Color4f(192, 192, 192)) + ("skyblue", Color4f(135, 206, 235)) + ("slateblue", Color4f(106, 90, 205)) + ("slategray", Color4f(112, 128, 144)) + ("slategrey", Color4f(112, 128, 144)) + ("snow", Color4f(255, 250, 250)) + ("springgreen", Color4f(0, 255, 127)) + ("steelblue", Color4f(70, 130, 180)) + ("tan", Color4f(210, 180, 140)) + ("teal", Color4f(0, 128, 128)) + ("thistle", Color4f(216, 191, 216)) + ("tomato", Color4f(255, 99, 71)) + ("transparent", Color4f(0, 0, 0, 0)) + ("turquoise", Color4f(64, 224, 208)) + ("violet", Color4f(238, 130, 238)) + ("wheat", Color4f(245, 222, 179)) + ("white", Color4f(255, 255, 255)) + ("whitesmoke", Color4f(245, 245, 245)) + ("yellow", Color4f(255, 255, 0)) + ("yellowgreen", Color4f(154, 205, 50)); + + ColorScheme cornfield = map_list_of + (BACKGROUND_COLOR, Color4f(0xff, 0xff, 0xe5)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0x9d, 0xcb, 0x51)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (CGAL_FACE_BACK_COLOR, Color4f(0x9d, 0xcb, 0x51)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0xec, 0x5e)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xab, 0xd8, 0x56)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0x80, 0x00, 0x00)); + + ColorScheme metallic = map_list_of + (BACKGROUND_COLOR, Color4f(0xaa, 0xaa, 0xff)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xdd, 0xdd, 0xff)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0xdd, 0x22, 0xdd)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xdd, 0xdd, 0xff)) + (CGAL_FACE_BACK_COLOR, Color4f(0xdd, 0x22, 0xdd)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0x80, 0x00, 0x00)); + + ColorScheme sunset = map_list_of + (BACKGROUND_COLOR, Color4f(0xaa, 0x44, 0x44)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xff, 0xaa, 0xaa)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0x88, 0x22, 0x33)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xff, 0xaa, 0xaa)) + (CGAL_FACE_BACK_COLOR, Color4f(0x88, 0x22, 0x33)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0x80, 0x00, 0x00)); + + ColorScheme starnight = map_list_of + (BACKGROUND_COLOR, webcolors["black"]) + (OPENCSG_FACE_FRONT_COLOR, webcolors["lightyellow"]) + (OPENCSG_FACE_BACK_COLOR, webcolors["cyan"]) + (CGAL_FACE_FRONT_COLOR, webcolors["lightyellow"]) + (CGAL_FACE_BACK_COLOR, webcolors["cyan"]) + (CGAL_FACE_2D_COLOR, webcolors["mediumpurple"]) + (CGAL_EDGE_FRONT_COLOR, Color4f(0x00, 0x00, 0xff)) + (CGAL_EDGE_BACK_COLOR, Color4f(0x00, 0x00, 0xff)) + (CGAL_EDGE_2D_COLOR, webcolors["magenta"]) + (CROSSHAIR_COLOR, Color4f(0xf0, 0xf0, 0xf0)); + + ColorScheme beforedawn = map_list_of + (BACKGROUND_COLOR, Color4f(0x33, 0x33, 0x33)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xcc, 0xcc, 0xcc)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0x55, 0x63, 0xdd)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xcc, 0xcc, 0xcc)) + (CGAL_FACE_BACK_COLOR, Color4f(0x55, 0x63, 0xdd)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0xf0, 0xf0, 0xf0)); + + ColorScheme nature = map_list_of + (BACKGROUND_COLOR, Color4f(0xfa, 0xfa, 0xfa)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0x16, 0xa0, 0x85)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0xdb, 0xf4, 0xda)) + (CGAL_FACE_FRONT_COLOR, Color4f(0x16, 0xa0, 0x85)) + (CGAL_FACE_BACK_COLOR, Color4f(0xdb, 0xf4, 0xda)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0x11, 0x11, 0x11)); + + ColorScheme deepocean = map_list_of + (BACKGROUND_COLOR, Color4f(0x33, 0x33, 0x33)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xee, 0xee, 0xee)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0x0b, 0xab, 0xc8)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xee, 0xee, 0xee)) + (CGAL_FACE_BACK_COLOR, Color4f(0x0b, 0xab, 0xc8)) + (CGAL_FACE_2D_COLOR, webcolors["mediumpurple"]) + (CGAL_EDGE_FRONT_COLOR, Color4f(0x00, 0x00, 0xff)) + (CGAL_EDGE_BACK_COLOR, Color4f(0x00, 0x00, 0xff)) + (CGAL_EDGE_2D_COLOR, webcolors["magenta"]) + (CROSSHAIR_COLOR, Color4f(0xf0, 0xf0, 0xf0)); + + // Monotone - no difference between 'back face' and 'front face' + ColorScheme monotone = map_list_of + (BACKGROUND_COLOR, Color4f(0xff, 0xff, 0xe5)) + (OPENCSG_FACE_FRONT_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (OPENCSG_FACE_BACK_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (CGAL_FACE_FRONT_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (CGAL_FACE_BACK_COLOR, Color4f(0xf9, 0xd7, 0x2c)) + (CGAL_FACE_2D_COLOR, Color4f(0x00, 0xbf, 0x99)) + (CGAL_EDGE_FRONT_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_BACK_COLOR, Color4f(0xff, 0x00, 0x00)) + (CGAL_EDGE_2D_COLOR, Color4f(0xff, 0x00, 0x00)) + (CROSSHAIR_COLOR, Color4f(0x80, 0x00, 0x00)); + + colorschemes = map_list_of + ("Cornfield", cornfield) + ("Metallic", metallic) + ("Sunset", sunset) + ("Starnight", starnight) + ("BeforeDawn", beforedawn) + ("Nature", nature) + ("DeepOcean", deepocean) + ("Monotone", monotone); // Hidden, not in GUI + +} + +const ColorScheme &ColorMap::defaultColorScheme() const +{ + return colorschemes.at("Cornfield"); +} + +const ColorScheme *ColorMap::findColorScheme(const std::string &name) const +{ + if (colorschemes.find(name) != colorschemes.end()) return &colorschemes.at(name); + return NULL; +} + +std::list ColorMap::colorSchemeNames() const +{ + std::list names; + for (boost::unordered_map::const_iterator iter=colorschemes.begin(); iter!=colorschemes.end(); iter++) { + names.push_back(iter->first); + } + return names; +} + +Color4f ColorMap::getColor(const ColorScheme &cs, const RenderColor rc) +{ + if (cs.count(rc)) return cs.at(rc); + if (ColorMap::inst()->defaultColorScheme().count(rc)) return ColorMap::inst()->defaultColorScheme().at(rc); + return Color4f(0, 0, 0, 127); +} + +/* + void printcolorscheme(const ColorScheme &cs) + { + for (ColorScheme::const_iterator j=cs.begin();j!=cs.end();j++) + PRINTB("%i %s",j->first % j->second.transpose()); + } + + void printcolorschemes() + { + for (boost::unordered_map::const_iterator i=colorschemes.begin();i!=colorschemes.end();i++) { + PRINTB("-- %s --", i->first); + for (ColorScheme::const_iterator j=i->second.begin();j!=i->second.end();j++) + PRINTB("%i %s",j->first % j->second.transpose()); + } + } +*/ From 134a1b97067a604dec6562733ff62c773935637d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 12:12:50 -0400 Subject: [PATCH 07/37] Removed duplicate DIFFPNG section --- tests/CMakeLists.txt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0e48957a..21acca15 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -553,15 +553,6 @@ else() endif() endif() -if (DIFFPNG) - # How to set cflags to optimize the executable regardless of CMAKE_BUILD_TYPE? - set(IMAGE_COMPARE_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/diffpng) - set(COMPARATOR "diffpng") - add_executable(diffpng diffpng.cpp ../src/lodepng.cpp) - message(STATUS "Image comparison program: diffpng") -endif() - - # Internal includes include_directories(../src) From 99e41df4dba3b890793feee00440eaea0f4608fa Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 12:13:04 -0400 Subject: [PATCH 08/37] doc --- src/Polygon2d.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Polygon2d.h b/src/Polygon2d.h index 1a8bb78e..4477a8f0 100644 --- a/src/Polygon2d.h +++ b/src/Polygon2d.h @@ -4,6 +4,10 @@ #include "linalg.h" #include +/*! + A single contour. + positive is (optionally) used to distinguish between polygon contours and hold contours. +*/ struct Outline2d { Outline2d() : positive(true) {} std::vector vertices; From 49749da7dd92dba475884930f10fdf9ecdbfacd2 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 13:01:23 -0400 Subject: [PATCH 09/37] Updated expected image to pass DIFFPNG tests --- .../intersection_for-tests-expected.png | Bin 634 -> 5841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/regression/opencsgtest/intersection_for-tests-expected.png b/tests/regression/opencsgtest/intersection_for-tests-expected.png index a3f046376228268b8d10501c60be7b41c5271bd1..4a3907beaad48dbf2d6a60f22d1cab4a707a0205 100644 GIT binary patch literal 5841 zcmeHL`&Scp7M~dsNTNI>NC1HZmB&&LDk|Y28ITnp2xzIa7|VZy^iz+}JdIr~TK+59wf?)}dF-tYH* z?!BKoB{5ME<_rf01VQGzcZDB-AOyT35N+j=>#(B^f@~{xhlj>y!~c5fBiZ=bMJj2p z|I2<1?qKwKIx0zfTH%Fr4WZ&szNgVlDRyCDzII!Zv8}h?n559?rm9=(5H5N=Ealkd z-M?mCs;{4}4a~pQKlAdd%G$|ORpVLe`71Z33(Mt6ZF4{KC^RchgF9K-b|F0ygJ49& zih-tK7@_Q>+Th2?f4ZR&s}0Z9Jatat;1qjNE39^FDeq!F z1S${9uIvEu2GMk~gb zkx|6txPD3$ojdwVGqooFuzV*mis)$*qt}ueJ|UV6xr$RCwy$Z4Mq!ovsOG2(F|Kbc z9<+A1CGGK&(6)p~qQVlI}tb@6|?81e!`_Qinh0VlbIaBM=0$0Ml<0`&l^u;=WefeYq|EgcQF&u`wi4I zX3fUa67nJPy2wB#`Ur+7!-oaK8OtFsq6U4Z{~&SC*M2X|g zO9J{bXqkX0^(91}l;Ay*pA17YQKZ3S?jGHF(M4Rfr0sa|Y}J|=h-LlF`+WN4TPF2M zx-Nf8gkGf`#`uTF{P$38(7*aV2;`9Lr_YJX(e!$M&>)Y3VwM2yu}x zvjM-%hQ6%{slyZ5km~Y7DJFIJ$?d-p8>3HPJw3f0(Hmt@B~AUkC5x-?7iHq@C-Xb6 zV#r64`Kd>p8qWR0Y2*M3x4O#s?xZDbFrVOg<(;G>48r=r<`<=`&OBuK%QAnMkLg^+ z{vd$sIKq!T1vj&UDwLeYb5c{>P4CvwEF zblX2lvln>>;>6p)wC13M7dVgC-;d$2RflPkjc(YGqv<5_kvI_}^Q=fu zmY1`$`xg}BTxFW|O+e-E4BEZ^7QYxsJO~)xM=qAGlc?Taw}hszY0$R+l%`ttBaEWI zh(D7Q8J=VXKi7sB#tcEriHw!olmcXD1Re>BB9`|FWTrOw-&}GIRs+OD-j9^9xbgO? zA(%mEQs4H~*a8Q?!{+)u1&=~np2EV#s;%37gePFC;6$oC`A?+neL@k)NW4$ys3S)=-AEO4Of5;7}8Ks{2PE{-7;x87bg%)9L%&=x4IHO1%~C(ogP`AP+^ z52+g*xT42&ui=Jp%f*e#kwHq6R+p(C*i+s#U%vg)U0I+t^#$=E8Wavhn-r$LYKmz8{{Td0^X= zJB)FsUa?$a)nK~A@j=RVUF+e``uiJCfBt_)AfcEi;1avUXSN$$8~(8cu~ull7Cs@d zAcWbaKl|aIKbwUG6apL0sycW|B}8kfPcU{6RH$w+Ol=6#QZL~AAh>s3VZ(m)56%s9 z7`=WmB!6Q_6;!C2!*G_l=O*)%FO0`tGss_j9Q9+<{rC0y{tD3z{x6x|_%AnzW9_(i z?O5Hz@NW$4JDJYdH%-D6469j!cQKr13qHi~nWM9g`L*D(J&b*P k^*q5}*vN?>pq?F1`S-Z0@AVFzWdkz7)78&qol`;+0A+IKiU0rr From 6405456c8a1292570c94d76ebe795a85e7501730 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 13:04:34 -0400 Subject: [PATCH 10/37] Renamed CGAL_renderer to CGAL_OGL_Polyhedron for clarity --- openscad.pro | 2 +- src/CGALRenderer.cc | 10 +++++----- src/CGALRenderer.h | 4 ++-- src/{CGAL_renderer.h => CGAL_OGL_Polyhedron.h} | 18 +++++++++--------- src/cgalutils.cc | 10 +++++----- src/export_png.cc | 1 - 6 files changed, 22 insertions(+), 23 deletions(-) rename src/{CGAL_renderer.h => CGAL_OGL_Polyhedron.h} (91%) diff --git a/openscad.pro b/openscad.pro index e16020e8..e40c956a 100644 --- a/openscad.pro +++ b/openscad.pro @@ -223,7 +223,7 @@ HEADERS += src/typedefs.h \ src/rendersettings.h \ src/colormap.h \ src/ThrownTogetherRenderer.h \ - src/CGAL_renderer.h \ + src/CGAL_OGL_Polyhedron.h \ src/OGL_helper.h \ src/QGLView.h \ src/GLView.h \ diff --git a/src/CGALRenderer.cc b/src/CGALRenderer.cc index b42dd307..c9b816c5 100644 --- a/src/CGALRenderer.cc +++ b/src/CGALRenderer.cc @@ -35,7 +35,7 @@ #include "printutils.h" #include "CGALRenderer.h" -#include "CGAL_renderer.h" +#include "CGAL_OGL_Polyhedron.h" #include "CGAL_Nef_polyhedron.h" #include "cgal.h" @@ -61,7 +61,7 @@ CGALRenderer::~CGALRenderer() { } -shared_ptr CGALRenderer::getPolyhedron() const +shared_ptr CGALRenderer::getPolyhedron() const { if (this->N && !this->polyhedron) buildPolyhedron(); return this->polyhedron; @@ -70,7 +70,7 @@ shared_ptr CGALRenderer::getPolyhedron() const void CGALRenderer::buildPolyhedron() const { PRINTD("buildPolyhedron"); - this->polyhedron.reset(new Polyhedron(*this->colorscheme)); + this->polyhedron.reset(new CGAL_OGL_Polyhedron(*this->colorscheme)); CGAL::OGL::Nef3_Converter::convert_to_OGLPolyhedron(*this->N->p3, this->polyhedron.get()); // CGAL_NEF3_MARKED_FACET_COLOR <- CGAL_FACE_BACK_COLOR // CGAL_NEF3_UNMARKED_FACET_COLOR <- CGAL_FACE_FRONT_COLOR @@ -124,7 +124,7 @@ void CGALRenderer::draw(bool showfaces, bool showedges) const } } else { - shared_ptr polyhedron = getPolyhedron(); + shared_ptr polyhedron = getPolyhedron(); if (polyhedron) { PRINTD("draw() polyhedron"); if (showfaces) polyhedron->set_style(SNC_BOUNDARY); @@ -143,7 +143,7 @@ BoundingBox CGALRenderer::getBoundingBox() const bbox = this->polyset->getBoundingBox(); } else { - shared_ptr polyhedron = getPolyhedron(); + shared_ptr polyhedron = getPolyhedron(); if (polyhedron) { CGAL::Bbox_3 cgalbbox = polyhedron->bbox(); bbox = BoundingBox( diff --git a/src/CGALRenderer.h b/src/CGALRenderer.h index 4bb2c673..d3fae77a 100644 --- a/src/CGALRenderer.h +++ b/src/CGALRenderer.h @@ -13,10 +13,10 @@ public: virtual BoundingBox getBoundingBox() const; private: - shared_ptr getPolyhedron() const; + shared_ptr getPolyhedron() const; void buildPolyhedron() const; - mutable shared_ptr polyhedron; + mutable shared_ptr polyhedron; shared_ptr N; shared_ptr polyset; }; diff --git a/src/CGAL_renderer.h b/src/CGAL_OGL_Polyhedron.h similarity index 91% rename from src/CGAL_renderer.h rename to src/CGAL_OGL_Polyhedron.h index 433eb7d6..ef056258 100644 --- a/src/CGAL_renderer.h +++ b/src/CGAL_OGL_Polyhedron.h @@ -36,7 +36,7 @@ using CGAL::OGL::SNC_BOUNDARY; using CGAL::OGL::SNC_SKELETON; -class Polyhedron : public CGAL::OGL::Polyhedron +class CGAL_OGL_Polyhedron : public CGAL::OGL::Polyhedron { public: @@ -50,14 +50,14 @@ public: NUM_COLORS }; - Polyhedron(const ColorScheme &cs) { - PRINTD("Polyhedron()"); + CGAL_OGL_Polyhedron(const ColorScheme &cs) { + PRINTD("CGAL_OGL_Polyhedron()"); // Set default colors. setColor(CGAL_NEF3_MARKED_VERTEX_COLOR,0xb7,0xe8,0x5c); setColor(CGAL_NEF3_UNMARKED_VERTEX_COLOR,0xff,0xf6,0x7c); // Face and Edge colors are taken from default colorscheme setColorScheme(cs); - PRINTD("Polyhedron() end"); + PRINTD("CGAL_OGL_Polyhedron() end"); } void draw(bool showedges) const { @@ -98,12 +98,12 @@ public: return c; } - void setColor(Polyhedron::RenderColor color_index, const Color4f &c) { + void setColor(CGAL_OGL_Polyhedron::RenderColor color_index, const Color4f &c) { PRINTDB("setColor %i %f %f %f",color_index%c[0]%c[1]%c[2]); this->colors[color_index] = CGAL::Color(c[0]*255,c[1]*255,c[2]*255); } - void setColor(Polyhedron::RenderColor color_index, + void setColor(CGAL_OGL_Polyhedron::RenderColor color_index, unsigned char r, unsigned char g, unsigned char b) { PRINTDB("setColor %i %i %i %i",color_index%r%g%b); this->colors[color_index] = CGAL::Color(r,g,b); @@ -122,7 +122,7 @@ public: private: CGAL::Color colors[NUM_COLORS]; -}; // Polyhedron +}; // CGAL_OGL_Polyhedron @@ -131,10 +131,10 @@ private: #include -class Polyhedron +class CGAL_OGL_Polyhedron { public: - Polyhedron() {} + CGAL_OGL_Polyhedron() {} void draw(bool showedges) const {} CGAL::Bbox_3 bbox() const { return CGAL::Bbox_3(-1,-1,-1,1,1,1); } }; diff --git a/src/cgalutils.cc b/src/cgalutils.cc index e7265b9b..5b642c58 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -1084,7 +1084,7 @@ bool tessellate_3d_face_with_holes( std::vector &polygons, std:: } size_t numholes = polygons2d.size()-1; - PRINTB("seeding %i holes",numholes); + PRINTDB("seeding %i holes",numholes); std::list list_of_seeds; for (size_t i=1;i &pgon = polygons2d[i]; @@ -1105,16 +1105,16 @@ bool tessellate_3d_face_with_holes( std::vector &polygons, std:: //PRINTB("seed %s",*li); double x = CGAL::to_double( li->x() ); double y = CGAL::to_double( li->y() ); - PRINTB("seed %f,%f",x%y); + PRINTDB("seed %f,%f",x%y); } - PRINT("seeding done"); + PRINTD("seeding done"); - PRINT( "meshing" ); + PRINTD( "meshing" ); CGAL::refine_Delaunay_mesh_2_without_edge_refinement( cdt, list_of_seeds.begin(), list_of_seeds.end(), DummyCriteria() ); - PRINT("meshing done"); + PRINTD("meshing done"); // this fails because it calls is_simple and is_simple fails on many // Nef Polyhedron faces //CGAL::Orientation original_orientation = diff --git a/src/export_png.cc b/src/export_png.cc index fad2a42f..d9c4b5a4 100644 --- a/src/export_png.cc +++ b/src/export_png.cc @@ -8,7 +8,6 @@ #ifdef ENABLE_CGAL #include "CGALRenderer.h" -#include "CGAL_renderer.h" #include "cgal.h" #include "cgalutils.h" #include "CGAL_Nef_polyhedron.h" From 99fb4ecb34f42f13a4a6486eb487d6d3dbfbe6e8 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 13:22:01 -0400 Subject: [PATCH 11/37] Use the same test results for all STL/OFF export-import tests --- tests/CMakeLists.txt | 2 +- .../advance_intersection-expected.png | Bin 8998 -> 0 bytes .../offpngtest/chopped_blocks-expected.png | Bin 6782 -> 0 bytes .../regression/offpngtest/cut_view-expected.png | Bin 7717 -> 0 bytes .../regression/offpngtest/demo_cut-expected.png | Bin 7266 -> 0 bytes .../offpngtest/difference-expected.png | Bin 29549 -> 0 bytes .../offpngtest/difference_cube-expected.png | Bin 11033 -> 0 bytes .../offpngtest/difference_sphere-expected.png | Bin 12540 -> 0 bytes .../regression/offpngtest/fan_view-expected.png | Bin 11135 -> 0 bytes tests/regression/offpngtest/fence-expected.png | Bin 10219 -> 0 bytes .../offpngtest/intersecting-expected.png | Bin 4063 -> 0 bytes .../offpngtest/intersection-expected.png | Bin 7750 -> 0 bytes .../offpngtest/logo_and_text-expected.png | Bin 21494 -> 0 bytes tests/regression/offpngtest/offset-expected.png | Bin 7987 -> 0 bytes .../offpngtest/polyhedron-expected.png | Bin 3834 -> 0 bytes .../polyhedron-nonplanar-tests-expected.png | Bin 5705 -> 0 bytes .../offpngtest/rounded_box-expected.png | Bin 6950 -> 0 bytes tests/regression/offpngtest/search-expected.png | Bin 8031 -> 0 bytes tests/regression/offpngtest/sphere-expected.png | Bin 9068 -> 0 bytes .../regression/offpngtest/surface-expected.png | Bin 32441 -> 0 bytes tests/regression/offpngtest/text-expected.png | Bin 5592 -> 0 bytes .../offpngtest/text_on_cube-expected.png | Bin 11536 -> 0 bytes .../offpngtest/translate-expected.png | Bin 10352 -> 0 bytes .../offpngtest/translation-expected.png | Bin 13470 -> 0 bytes tests/regression/offpngtest/tripod-expected.png | Bin 6930 -> 0 bytes tests/regression/offpngtest/union-expected.png | Bin 4767 -> 0 bytes 26 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 tests/regression/offpngtest/advance_intersection-expected.png delete mode 100644 tests/regression/offpngtest/chopped_blocks-expected.png delete mode 100644 tests/regression/offpngtest/cut_view-expected.png delete mode 100644 tests/regression/offpngtest/demo_cut-expected.png delete mode 100644 tests/regression/offpngtest/difference-expected.png delete mode 100644 tests/regression/offpngtest/difference_cube-expected.png delete mode 100644 tests/regression/offpngtest/difference_sphere-expected.png delete mode 100644 tests/regression/offpngtest/fan_view-expected.png delete mode 100644 tests/regression/offpngtest/fence-expected.png delete mode 100644 tests/regression/offpngtest/intersecting-expected.png delete mode 100644 tests/regression/offpngtest/intersection-expected.png delete mode 100644 tests/regression/offpngtest/logo_and_text-expected.png delete mode 100644 tests/regression/offpngtest/offset-expected.png delete mode 100644 tests/regression/offpngtest/polyhedron-expected.png delete mode 100644 tests/regression/offpngtest/polyhedron-nonplanar-tests-expected.png delete mode 100644 tests/regression/offpngtest/rounded_box-expected.png delete mode 100644 tests/regression/offpngtest/search-expected.png delete mode 100644 tests/regression/offpngtest/sphere-expected.png delete mode 100644 tests/regression/offpngtest/surface-expected.png delete mode 100644 tests/regression/offpngtest/text-expected.png delete mode 100644 tests/regression/offpngtest/text_on_cube-expected.png delete mode 100644 tests/regression/offpngtest/translate-expected.png delete mode 100644 tests/regression/offpngtest/translation-expected.png delete mode 100644 tests/regression/offpngtest/tripod-expected.png delete mode 100644 tests/regression/offpngtest/union-expected.png diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 21acca15..ee396415 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1223,7 +1223,7 @@ add_cmdline_test(cgalstlsanitytest EXE ${CMAKE_SOURCE_DIR}/cgalstlsanitytest SUF # Export/Import 3d png tests. add_cmdline_test(stlpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=STL SUFFIX png FILES ${EXPORT3D_TEST_FILES}) -add_cmdline_test(offpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=OFF SUFFIX png FILES ${EXPORT3D_TEST_FILES}) +add_cmdline_test(offpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=OFF EXPECTEDDIR stlpngtest SUFFIX png FILES ${EXPORT3D_TEST_FILES}) # Add experimental tests diff --git a/tests/regression/offpngtest/advance_intersection-expected.png b/tests/regression/offpngtest/advance_intersection-expected.png deleted file mode 100644 index 82ac39bf8d1187ce6fe27fe5723d74900be723e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8998 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 aH_&hU*D2TUz4{0sufqqA9mq4LM*I&nRrsU; diff --git a/tests/regression/offpngtest/chopped_blocks-expected.png b/tests/regression/offpngtest/chopped_blocks-expected.png deleted file mode 100644 index 5ef9324be480b70ec53bda6d1a148b2c790e3b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6782 zcmds6`9GB3+ducrGzOy?D%odJqR93k5@u{6k}b3`ilha7YDzNPC`*cDZM8*|vb3m( z2}NZ$ie%R(OV*5K*5~%=`+EL>=lSV*e!9-|30xnJj;JI>L;T0%@t3;-Zu zYh&pQ019cM0B+@RNzUR40CHBgmS(QO(63G%h)E_gsRxAH+n_aaVGZ{pPc1ihi^KQB zjQ}i*1w>x}oc{kk0zvv)BN;>w8hIq}t#IwrO(^m%geeNdN&#vL067>yQ~|IW1S~}X zdH4TW69XJA7SJCX)@WbbTeP+ch^0g-&nX6N__!@d)F#O)N!MzvRnG1`c1bl4_f90R z{M)6RGSX1i%BlxW@+KRne*J2k;&o3iuZxXp+VNL3g9KnH3;-$00A#I&0La4upk@UC zbqi8lyCnf|yb1v9{6BRmEIvsB%pxyOlT2O`W3>;hcw`tZX8& z7+{mGz4+l^Xv`Woj_@P}W3g^^3;^m6wpFe53|}J&$GIe7Hf;b@8^O?CF&`R^$>+8d z_kTYuT-q~KYKu}Pf`K-Nv!sD^CYBa_u^Hx_NVL^<&EAIrk5avOwz_Bspz#nRZA;Zf zfx~k9c{_eeHLjv*r$g$mMWQ#2T7aOS>so>bzhhfgF%M`&gqDvav-U)0i|yP93{#YT znhyMkR~-zDZGlsgF)kHio4hSBfMMskLM6KYZeQ3=esgtL0pqnuysUPiN{LOR0|wl) zJs7%kvFbIbyZ_KtRm_JvZX_DLwQd7Ae&E~pI|D;IbOTgoY-Au5emZae(|e>7OtsFB8L(7r9z19W=##@uXdZ-JfI`ali%x z#65U6^R%-EuUA=uO(1KqQg+4|+;!9POu3k0IT&wW!$bkXf zp8{U&{eY(lItJT5|B4t>72UTBNm~jsyv=)mK`^2Kw{b7%>K)$cL3ot-FMR9UruF@U z7}|W>wkM4d^lwr5=lfR%jN1S6{SG_Pmke^FB%_=UOqt!u4J;L`Mzy}-y-%0A-_iiC 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 Syz~M}1x80r42t!MQU3+xG!KIS diff --git a/tests/regression/offpngtest/demo_cut-expected.png b/tests/regression/offpngtest/demo_cut-expected.png deleted file mode 100644 index 6804f796c440d15a517749981243e822f72115fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7266 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 S_G}kI1*XR=j7pBUM*bJdJU0yh diff --git a/tests/regression/offpngtest/difference-expected.png b/tests/regression/offpngtest/difference-expected.png deleted file mode 100644 index 66b416e0ae6a8c651616b923a48abfce9b58bace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29549 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 diff --git a/tests/regression/offpngtest/difference_cube-expected.png b/tests/regression/offpngtest/difference_cube-expected.png deleted file mode 100644 index 64d971be1b57c80edf3445bb2a3370aa40afc4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11033 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 diff --git a/tests/regression/offpngtest/fence-expected.png b/tests/regression/offpngtest/fence-expected.png deleted file mode 100644 index 9ee263acf9eb5363268b37fc4b73a7dbd5638d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10219 zcmdsdRajL~*Y!Gd3P=hFNUNlzG)hVeQj#K4(n!~lZlqH}x*KUxL_oTwm4-vtfkS

#gm~0=002To1sM$h(4bp1fOC8CqJCZu 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 diff --git a/tests/regression/offpngtest/intersecting-expected.png b/tests/regression/offpngtest/intersecting-expected.png deleted file mode 100644 index 0e211d130029e2c376c8f51d50397e9f28c2f633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4063 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 diff --git a/tests/regression/offpngtest/intersection-expected.png b/tests/regression/offpngtest/intersection-expected.png deleted file mode 100644 index afe24d8386c28c874932fa83d8e303fe4eda7cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7750 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 diff --git a/tests/regression/offpngtest/polyhedron-expected.png b/tests/regression/offpngtest/polyhedron-expected.png deleted file mode 100644 index b23db22cdb4702914aa76accfd533d10ec376ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 zcmds4Sy)ro7GCFYjEOc9iWZCl0jfbQf;586QD)i#4ivRa>P10DMMi-f5Saz3RK+Sp zrNx2-zFQ|MLt3rSN--z|1QiqtNQy`y5`vJs4?f+8`*0uYOZHCo%KC@3&OUo*dwIAp z7qJ%s0MpIYaT@@RrZ~{4;V9do3Si04ZjPIG#AAPTY{0}EmYBa=W!{EqvQwHbq=ikl zK3+_g2&{lyP6JjDz}EL~h=eosR@%sqK+Zs9y=tlGW1QoRl;V)}A@GX;E)l?51*8!M zjttC|VNnRv_C%1M)F^&_WBkAfq8 zUOCcB8StJAezKW_6#vTsVpE*oxvwODY@>3)2ZrD{+Vi)CaBw}?zZvOj4qusbN3nVs z$J_%K=ZQ2=i|=mqb<)l-dXceglgr>;+0S`b3ynT}SQsz9GnIR7Y2?&&nrdONx#ykP z0-2e6072)#aO;%PI`mbkf)xT*jvzTRB=-!SpB0YDdj+X9;W`59U1eie6Xa>?Ve;GK7X32DbBRL@4Gr_a5IVAO+ z8cNDi_ml<|%?ThWAB5h=DIiHY2;CmYOtNUgtptod_7xoXqPX#uLsE*Xn#2Gn?}dp3 z%wRa@0FtkLkYj5SGSm-ESTgxv(c#>3*Cu)|T5s~8!vKN{Dnn*Z&C(#o0IsyzFduTyhxj?a z)Fhb%bUY3a95^wV+LM%J-TM%BWPxz~jI5W(Cc9a%V;~CI_0Zzgxc;j~zM9uEoZNk_ zVUEG%JJ6vb>ek#j3G7G%zW+Rz2Q7a(P)fFd1Ug%l+|2nda3+D@O<^_*F_sH()*PTx z9!U8mGhVTTNq&OE21{ABE|cWou)LU}-Y^+$clUf}FqE-?KD-B&hdieNMW<`$>MvqO z1xR5l`=w^8NAwUn3mO+#xm9EnC0Jj@&oAb`)|I2W%9l0uzpgiR5L<;eng?U zzt$gYtXqG1vR;x0eQPIpuBAeZDULyLd zY+BzD7fkVozs^dx{4HCTUSRsyC{{Nwusp^%oFACI>{cqKqq9N7)^EFaG3lsvuU>59g=!3#>m z63(ENLY)Tz`k){>1#5X=pALPO$7KZ!^dCJ;9N!_+q21Njdz?PUApe6?$&J=G)?^K+oUQh^PAN< zi(_KTJem3vCI%7nX)`&X7^3&|*`JLYDcE^GUJXI$VYcteqaF0@2kuoP3ckk>Dy@Gp z|NF_UIjdt#qYxhfb{Fk8pP>DwG@-nt=BKljiFiaFd@@S^HW4qPhzik8{9E02PjTc1 zA35=48OB%dS3XFm3DvQkof_tHV)&bDm0W%X2#Zk$vS6=hgmFs`C(ZB4OP4YE>+qT@ zhG8R&vrecja2~1=qR3Eqw0PTMaa+*gVJi{n~i2JXNqR;ItAj=40^nIHY z<@cxc6IT~VZ}dO1n6YwtFwj77ZjUGr$iJaUEHH3&hr}B#{i6%7f6%rfyZuK0n`6lr zE?FFQ!B6_c%<5ZUWP5k4qbDa1j)WFBtx!qL9MuPQJ&6!Ec(ke2YRxAwn@5fg>Cv!F z1zb`dq^laM9#KvNMDPLw%7(tY%$N*Ac#QLIVC8e4Wt&=gkfJp6;k+4o$PC4I$c&|($c#HC$c%y) zJX}&WqKwWESdbCugtiTrWC!W?3aWy#{2lGPW9w8uRd1g(Xw?Uu3e-&ta7Yq`yG#@c}fIoW_w&ORq_I9UWoC=A>-l!E@0A^y{NLh&FIVF)6bT}Z^@##I1r z3_h0si=yvKIp0U%Q3)M#ZW`?fAJ&IaVgI^0ALap~ zDhleIqt$fraqrI3V0Kgp9_4-C#@UnfL99IcGKszl3QJr`d8@c+@9#gC^9=Z;{pE$g zasc>x-XHYVn=j`7`BfPKbNj3F8R&V{rcKBBsatEAV&F;tCm-wo$DQO#D1=roNk{h@ qZTj?A1^cE}X~58Xa+CQl$?b5442zMT{CpqM3T{pwj-oArY5xJLkWU@} diff --git a/tests/regression/offpngtest/polyhedron-nonplanar-tests-expected.png b/tests/regression/offpngtest/polyhedron-nonplanar-tests-expected.png deleted file mode 100644 index b6f4642d6678fa3809d069e71a657044bb92ac26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5705 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 diff --git a/tests/regression/offpngtest/rounded_box-expected.png b/tests/regression/offpngtest/rounded_box-expected.png deleted file mode 100644 index ed9200128fb8e34ade8bc07bf8891b46322b2a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6950 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 Tr`FQnrQqCIL(L*}yO93^)DotN diff --git a/tests/regression/offpngtest/search-expected.png b/tests/regression/offpngtest/search-expected.png deleted file mode 100644 index ba047a6c9389f7ef5cf3957eecf5928fdae1529e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8031 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 Q2)YXB+`O$>rj8E%UumFT)Bpeg diff --git a/tests/regression/offpngtest/sphere-expected.png b/tests/regression/offpngtest/sphere-expected.png deleted file mode 100644 index 87bb764a360d804a7e7be7fafb83d471c16b0d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9068 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 Qre+mrUDs7BQ?U;GA3e7Yk^lez diff --git a/tests/regression/offpngtest/surface-expected.png b/tests/regression/offpngtest/surface-expected.png deleted file mode 100644 index 010c21ab36b2b3c2b07087e89f96e59b5451a928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32441 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 z 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 NC}_%md1e*%{{TF?G~WOK diff --git a/tests/regression/offpngtest/text-expected.png b/tests/regression/offpngtest/text-expected.png deleted file mode 100644 index d766cc1ca3aee983e86aaac6b4f3f59657d255ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5592 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 diff --git a/tests/regression/offpngtest/text_on_cube-expected.png b/tests/regression/offpngtest/text_on_cube-expected.png deleted file mode 100644 index cd172247e131c36cf668f1ba7088bde45efa2db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11536 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 diff --git a/tests/regression/offpngtest/translation-expected.png b/tests/regression/offpngtest/translation-expected.png deleted file mode 100644 index b244d804d770430788e50e5ee0285a6c7f6c970f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13470 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 WooktF7H%SNc7ITnseNx2{(k^L@~WKx diff --git a/tests/regression/offpngtest/tripod-expected.png b/tests/regression/offpngtest/tripod-expected.png deleted file mode 100644 index eb757c4016d687caa6d97f5f0fa7c815784a36e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6930 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 KFnFc!8uLGqY?#0R diff --git a/tests/regression/offpngtest/union-expected.png b/tests/regression/offpngtest/union-expected.png deleted file mode 100644 index 431e210f171a19772eed64f03df2670734fe2032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4767 zcmds5dpML^+rOV@rZFQjPBlYiirGmArznaUax5`ntF3lUDd|9^C>al1NOsg#4#kK{ zNl}WVn4(R)0~%B$c01cJqL^tIW_%CVzP{`IR{&`g$%ZtB76pw&-R_NY(X@2xQ)5- z`^I0tpN-|kS_4KW0W}z4^M79x2APkoD*~wG0z*Rs>w?t|l;n@w6Gdx0mCg*uum0_e z6Du0($-vG4aG?CxHD7Kj@%J?ynUwRSyCti#LUsR|h_1!gf_spw*2zB$dXt%Jh8C=% z?`4_wA^`aXi!uFtcw6103U>myC%Uw?cTd|&?YR&?aehlxM`$Qhj z+Eg0CrjAxBBD@h(Dn#u1yP0J(^+)W7$w@`;tKsgxM^*uBKQeR#S4$kD5ksDxHdPB@ zYtFBz5oSP!+BIdN9)jJ>UeDXLFQ(-)Wbh8`(AEgRj8V+jw^O#b6Eavz#h8ye(1d}a z)ALb|gLX5DVy?Ca&OJ-HaWvLh8(VO*DSULSAciUqxoisyw%y7cPt&XzlnopjUOi&q zZ4o=TZ_grUkK{=M*5eYk$zQ^Pa5JmjuK)plN>K7#CdUE0 zL~dXrO-_M)s}5YCH9R{yajgbfAbZfFnDQ~-?`SK%*f3AB8&fQARRXV)_7{)4qkgcn zm0}bWV+=6ks+_%v5U^<@dN}PM6;wW(P%0x!2MQrOY=8iuLj)i>0{C8O-7aJX3s#qOTqG-uY;E^uY5BmCH`iFYn&3Ynjr6`f9;6a`kt zcy(hBjb6z^AA7U1<2tLiNGPP+r7QP7TH#6#!*lez(JLEL#MsY^DNm?ajj8mjgGT%! zun8Dy(K**_fi@dfEX+0H9=TzEk<8Z2impF8rn-c(f&u7D8@7gT_?@nr8)3AjhF5*H zYSQ5WuYD!$8zmIYu8)t4J+g$d0neEDUyJ(uc*d4##sk|D*MpWqjeUmZBG$&D3VHgV zAY=ARp~}S6<&`x58zlTR8L?A*n8?>dIAdOLs6M}#L@;R;_K`6bnjh{Cht3A3cL?of zBgyy1`d_v*sY5K09T18m`3Xjls#t{fq=Dg9B4gfi((^k?2M}__*z=HoESAl|U0=Ey z3N(2+bz1TAE;#fpFuf$&Ul)ry%`-~lo`EraP~L$ws{c|jj`)jj&EV|RvF(ktE3P(K zR4n~8&*2~D@zzlFBq%%(XfaANltb`PuA90vM29bj>3mmNKguKKFF64-C^r0$;dy zhVYdn(jf7So&V3Nia8?VI~+Z14!&->_69cJt#Q&jM1;OYq+0=EQ#!(rsAr#SNur>j zTc2;~r1v)&2Gt46Qf-SD!}Zg&OQ&0sbWvc{_t2d5G>D*6kF_MtN3f4;O#Q_z89~U{ zs~rpey7w(1fTp*2i~5rM*Qz7Khe)&Ce^Jb0I@a$AY>YQ@Hib3s6ipb_yv>E6&|#nKoeV za6j*+M{|xDKIUAx^>(W>IrN$>nB=^;X&!BJK!p~w>J;Q}ste)^3y%@ui%5^)q<5JL z^&?^USc1eg2H3lF3GI4k)d9#U0PN|Ch+hnV?-GFJlL3f$oiGgXqs&enas}HY6nOmX z&{bRe?f(h*?`-WFAo$N;{nlgrS#MjmY}+-R6VgLl_Y3dv-?-tc^Rm*JB+ee=`?^w+diO++uy`2{DTa9)4$h8iY6LzBPu zD1bl;{*zXP{ zd$gMhi%`aWW5~X#a;0KJvl~46!W}S`(`SHk)Zg%lFjS5GxH^oCQIT|O6G+rZz4``L zmHlHph=4=bM`q<;?OIJ_C&P8s1MHE^IByS1F&V4t@(6N^4V1T$u?`x}qKA`5X#P5+ zi{?8*tCK2rnP_9B!cLghJPp@3X~KHS(NRr|Gwp3I!nwExvg=d~^qA>N{Jx>0{vwt> z_!8N-TtI~xg>Upd|KOJC;)-`ikgrzqlaY8tx3Xo>Tz2DpCfmZss8qipNo@s6{rO|z z$i{lH!JfqN$+Kj*Yqqgoc%t5Rs-DTVBSM(lX4I*Vu^rV~58Kz)Ms1xOTYOCPr+K|l zrIpWo_wjLO^wwz7AR8XNXi768^f#$UJ}|~Vt$My8eV~f^bnRTZI%fS@#h~kOux_gr zd!*`A-S|m=smLB$-NOXOKTb6qrX-}j7a`}GHtqblvR+;KIk3u;XKjsgu3m~WSP_@h zVt0ILT$freWtgqv3`VXevPk>d-Ow3u!tEVQksRkwk zOV1n>km}aV(XaPD82@tqK_vDj%sTPhH60d+nHGwZ^3&HmU2d#rr~S zdG$!nk7C$xkh`VGN;T7xs1Q@?6-SRu?WeOrx$L8H-cX_QI?=|St*ux19_2Rk3zw8_ zby5RHBCvZqc4^wg*;Bx{bI83#6FZ3C!8}n&$FE}sOaRw^*X2B{c<M_90BhqKa}3+24;t(RwDBRHRQ!$W-UdsREuJVrc)gd z(WhZD8=w3~ZEwROyS9i^TJ}d42`MVlzxqmtmK~oJc0Xkye?qJpHKw51Bt$trd(*`$ z3>HJ8(5yMrf8Umk0z5M;(!7}Q$vyGBH@V!mvDbWB2(;T_{5D-x{e#jzci81Y%E}Y? zDIwPrR7_NhYJWgE+I0VQ?y)h%e0wwgek=KX4J`CI==F);ZUW`<=@k+-HuW6pQV+^H z>r7>DKk0?3^25Fl&?@&cmFuqCm$jPRU9fmZsLK8K&N=tOlm_J?FUv1yZoR8@_R-

d$>pj z5QzUR6cHic3x(#T$n`hhv|^Bw{_%z;q2?F{5P>f}YYQhm{;URpC^D~L7)x3=HAas? z=c%?Rg}0rH^NdfiiJj7ku}`b9k*C=Hsrf>@ZR!sSo7A=%xIr>6TA^Bx&ZVaw78met23$G6j__(< zxBdpwoNT{3anTR(dvk424b?U>4Vg^C-(&wnfPQJKu19aTq$tXas z#m=v1=<-w+@~|s%w8a7gx8VbieGPw70jHC)9oSY$e^LFUHeqw`{E`o|PSE zir$v0grDypPJsv~(gVIYG9=j+BQptKf0s%3q}pPPnb?({xWzUR^TW)VO$BMdAat3^ zwNU;=CPAm!TF_L5Pekb5RsQ3Jo7;KasVzzz-W%*#O3g2ASzKEK*v=qqGLdgz1lyT} zJ=t7a3kN+miAnezAg_8xiviaR(n~M#f)h{0hu0!K3(YvDf~LnrY~ndP*o_tI3}f5O zIEbK0KT$|43lN{cliaOviIj zUW;oz^fu$`iae4{WpMmQ9TSh1NTRu%r~&pz@VWL_gXE*R!F;jTDI6N*W!7vh^04_` zNa%5!p>>BM@Yp}3%AfwbJ5Xmrb=d6iRT43!`I$738}CAQxU<+eb99GC_|5U~+Fmn% zS@v&Wa+5hNWP?d%1>HpcGVG=;xYOvuI+@^Up$yjSUe)vN=J43b{vvfG|NJR)f7u>q z2no5XlEux@fQ}pn;To^KVt~+-b2d)7oj0_wO^F{|h%_iF)Hbp9Qo-lj1sv+L7)p98 zaG_lvN`!v6m7m&tV&KEBojp3Drl-?NxlV*L@{>i^c)b)r6j^w%WQ6hiDO{(33<2Cm ztba)}uHsFjkL{8_7k@j!_2~w7+%3EqL-ArXM1YK+6_@e79zQk`@NJ)i0u?Vq{8;%v z9o(VH-x7UGYZKXGp`N>M4&SN-wu&J&G~_U U!)1Is{_q5@j_wY(?fv8b2P9lJdH?_b From 97512818cf685e8f33a9b5638c00881b614d3850 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 15 Aug 2014 14:41:50 -0400 Subject: [PATCH 12/37] Missed tagging of projection-cut-tests as 2D --- tests/CMakeLists.txt | 2 +- .../projection-cut-tests-expected.png | Bin 7425 -> 5848 bytes .../projection-cut-tests-expected.png | Bin 7797 -> 5320 bytes .../projection-cut-tests-expected.png | Bin 7797 -> 5320 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ee396415..9db1ce9b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1040,7 +1040,7 @@ disable_tests( # (note - dont use the offset from examples/Advanced) list(APPEND TESTS_2D circle control-hull-dimension difference-2d ellipse flat_body hull2 import_dxf intersection2 issue585 issue612 lwpolyline2 -arc _arc - minkowski2 multiple-layers offset- polygon* primitive-cut projection-test + minkowski2 multiple-layers offset- polygon* primitive-cut projection-test projection-cut-test render-2d resize-2d scale2D scale2d text-search square font transform-insert triangle) diff --git a/tests/regression/cgalpngtest/projection-cut-tests-expected.png b/tests/regression/cgalpngtest/projection-cut-tests-expected.png index 2b5cce6d2996b0bb234ab2169fb293316b98418d..7dd70115aa9d1cf79964137eced04e82772565b7 100644 GIT binary patch literal 5848 zcmeHKYdDna8h*d=$;4uhR1{?_C56UXAuXqGA+sEED58~9n-0>Lxo9(l`RJgvO4^+q z3hhGj?mJ4SLbhih1f{XuIOzKH5WWKzPCO= zy=>Q(pO3w$)Hr(N0Wlu+;$-;1#dr3f!VV9V7I|e%^-Gq0imew(Gv_tg1W7ogh-M;p z+{c+L_E-ppiS<});&KUz_I)GdX|V|cSu4S3`_{2hjz(}7Ko)947z58yWs-%5JFEcW zT!d63DcF`$;fDDU(Si?b)>k$O6D5FGQQT zfEOm=IAwpMQVYmTm#~oguS*PJ2YUu1G=E3uLLj>UL!hAhN3h^feb~3%bodC6xhvz; z)~I{*4jCls+`BZ^5y%SQXNqtY+5ODLpg;Yp<*sLx{+gv50~6+7Rz{d z{M^bZXn-1)wHcCkG>yE^JP~_qeoFRi@B=PcLxcuUA|;)|>!+c_t8knsj~_Y)uo3Dy ztHlv|4d$kTzh$Io#O*bJ9>M37a`jt_ zWV#-4$o-D(Vgv60s%*YX;B`fyGG_HnK3rt$NKsz=TZhJjDr0j$#I1&YJGGRBxEbvO zzzd%u;hVPe5U}<41k$s!zqkgP^CN>Hj<@ksc1FibExdms;DY=>|LM*>};4X;3R zKIyv=4?)^;*eI_$=Ccq}qqv-x_%OMwDCDx_Vyy#}F~O#nExFzb%sXRlJdM;PxV2W~UFiD1@7f$Jt-up3blYHPSZ?r2>2gYUH#k!%vG1 z*l2&Nk2b(8NZYgU_4GqQ9mBlCPTc}X-6T<#Q49uD`(gSmk9n^APgb0=$W{Zjyq!R} ztSjqj;mp{musM)^9xR9FL6hDez6BV8Vdh%~7_{*4oUj}yRs-k(nU45cn|?POBT?~J z+#q`Vfp^6(Pm-KULl1zJlT0qxX5Gc?dCXh<{2leF>dqJB1?Y4Fpqe!(zX_glq zoGI!XQ(@q4YBfs6cEOLp3&e2Tz%C(e1qI4D@os$oDS#bNnXj7+K@MX`r(1@948R&t zro(C_7#9KQ^iHVDp&h1*L^Z#RGeHhFNaxeO7kU7%LE%=Vb7^IO|J=%o0e}Lay2i7m z{pBerGbyy>0*r*p=k;lV9Or<);C|UAfPp|2shdG71ImAnPzANU^+67|dJU^Hq$3ga zD{?KL$>xUlc~buU6~Wx3soYo^i|TBtZS2jW9!yV-*9VE}+#O+PI|2ca^yjthP3nCgH(}U#vH@%#1g2y|&q^Eh{@{yVh7QD%~=9HMwp!&%*4GnK4w2*t^OZnnV*!7v>O6oW6s5zC|+2pRHYVW-e{JC!SbiU>on)(l&q@JVz literal 7425 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 literal 7797 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 literal 7797 zcmeHM_g7O(yPkxIRB1|)lIRBt9uYW55d?x9526$mkRnx@h!iQ(0t5>jK?5pE6N4fm z0s$2aB_UuAO{7Q>6q0~|G$9}*gplOhu66%{yVhOn{=iRr?|03-^XzA4p7+_a@0_)@ z6c^bm0ss)VI`!9i0N~Iq90>is#P7AJ06^uq)nDcgF|Y+%!vj?(DM7DinI~t2!sHhOau7&NXeSSTt#GyZGw%*^*DG?#HIuMEP%#Q7*G`u@S z*MybmzwXpp5yff3$NRSaIC`Q>@vgASwd_UJ2gIT`9+fcu3!UI~n^b``5t! za5XsUJO^9nF;j?Jya2`B*3KHctKoe;V3{u@BRXT&?2YOTth7H$ubj1PF`UMq1gaIE zH8W;j)j%kZO+0&PWU*GauZ3FSO4XlRLmY#s=s?`?G z;uW*vw#_&RlMAF~1e#)S!XrcZv;X(EC9C6T(}BVbHl{a*H}zL^6!P$h|GlQF{>W@F zgZq0deb(M}8ner8;xbI>^SQ?zsr?mtTc_^(=g%IcO)-S@kIOlkve$bkfhClw@h8X9 zoSr)saOhoM92_Yo!NIVlteHH6(b+Jg)S=bh?=B7gL8jMkddAKWTORSP!C_+kkAj79 zOr6iHq(}dehJb`w?cS)Md1e3zYQe?x^UMef{x(k$mIde}!x2XeC*4L|U(fwV>qu|Z z-g3=qkaK0DX*z$`m8SxA;~O^PMvv|PjK_!0z4>gla@6A;sfJwAta9ZLP(dHzhI2K@ zOGgPN@%C@KC$m0j^bE0vKmAF#LJ=pIbp1WA4*qsIl2AMQPpeXk_|DL@zT_tl?!-5i z_P>0b{Z63fs{{GlG~A0m-Ny_u!UsH|7A+=}EcYemJ;m6U*obGp5YQWONZ#z(f%g2* z)Vxh<1b^T0xxP?q<(8~_dT(CYaP@V*z>-QMEs%4>(r_`nDE67vmxKAXKfb9BhtXe> zo=`P%hhiE_8UF9zzusf8`YbWO8Nc}$A|xy#cf7f9n8BfJjZ^b*#`ji?BiDZ< zh$Ik$N!O|0n0lgGz~fyA)iJtc`AN|X9r+;sS2}i`)AIe1hcMRZ^_S;0DlA2KHgA7e z=$vSzRqyfR--q_+RaM4s1i``#197m1h+3YcQTVab8=Galw`POXL0|UeX}BEn1dC@I zh{W%n$*YQOd*^w7hHBL+)3^`VqPvdy#tSi!W~rJ16^o?T&;q%)9K{+!Pjq#ig1r82 zIKIUB_DRU(W6`x(Aau}RA7tjkg@mw5QB@+)H^D7YA#7N|&0eMCAjY z)-@+fT=>s>x~}EoPD#d-tRy~*ie>QF2IQ|_$VvyyS7Iry-!d|I zC*r-O#gaN0xUU!zccO57tn7i;#`1OV;K`rg8YS=tP{6jxMtA8pi`R>m7PEP37AuNf zETE3OXMb^!zU#r|8klVz_cGkDmKI}dRY}8o9W}>AVVPCxZHF}m$^0rcoh9&VveO(y zGVyguBl*$8g4{BS^7KC7FUUOD{AqwD)Fle*9co{91-@nN^ffVwExJ_C7D?6lg|RZA zwOLk9EH*5pj}J0T@gms83A>&6y>$vuzPrMnLfBg;zrKAjRL??QR~J-4t5Dn|0nIWc zd+pQ0XyRNT__=p$BBP)|igZd118zP0YshxQi^Hmhru-OI4kv!N^WI zAmP`(S`6A9?zIHfeTA@xLfHRAf+DAgh@t4A%_VUOt6uWTHTs(*RkxL=>k|tlPbH3k zl=8r*LfE6l&Q+Q542}h`TI%rq9t~EqnMpXfWsO%&9=`t!IQ z0{zt0n(*QqnGf~}nkJK4ng$#>WBR0`1_Lq69R9osjm)@Lb!F*?ecJHn;<$Yf_zBvj zGzN!xcoc;^_V>k0F~-D5-RQ^wW9u7>7Z=j0JF^iIABGY&0AUT8o3NUhL1J!ME{umV z@0S>~ushjDEoK!bCqm&VHS*+_*$8xyky2Hxsgb|aRLM=dd$V@8jHqH-2z1IJjI+i2 zcuK@9a_zG{jja3Y7YW z9K=>`5=-17BG6CRK{QT5r!}Z%Dwu51+HQJ|vJDVD@WLXMiuMn`Cl-HXIb&X-TMydT zK{7!3WD2yUR}a0YXXVqn@jd(6`oU$hKS@F<7Pn360>lpQ!gj|xXO-w^BLR0let7td zYnj;zqOBGIQmcRtiHtTET}{R4j&UXBKyOfuSEd^l`J|YT9Hq-8u({8z)tVi^s@9@+ zs1}pJGxQGjdaeP349~k|_R`g>N;8ESnr6B7G6WH9NT!2T*hBf@yuh|dS4}opbv78I#$jR~VZpGPS)BIud$mleV)x|0t^Wi>%`fQ2(X6`^m$s&S3U$7@ zrthSG?mOx};FwfRHK=xhdcrZW6;RJfe!o-E!GM0}Hq2#eu2R7U+ng4+<|`v3z!h|M zE)Wl1ClzhZFBx4xgR5)27>Ogt^)F64bL+&X-xc_*X}Bv1eElbn`~GwpkyO7o8R_hX zW9xP84zdWMosLmi^rQR%-alSkXzzNGTVcWEj=p|Z&&p~%CMH*4^CQ`h*_x`@z2sZ3 zRCZygl6G_C!L`M}2H)w*bro1u%_XLtE5GTg^72?u7k=bs#$~$+NA+E@hP82=l=(+K zJ!mdcNK0wD`?aXB$6PSnE2yru+nLwEB&{6V?Eg?v+lD!E6rSPo>vPfFsM%k~F6?NE zt*F5?)9WsbrPm;rcnZnuT7AW7$!5Iqp{^Tt+~ny_cdqUp(g?9}YrG$~uGV}!y)21- za3z|%%PT1AX~8Q8o!*dN!}2j}@s#g1YvqB+UDSRC%;6|TJ8oHPN7EPh5#uw&yU9+J z&5;M$jikp>Oly$!Wh5>@b?XTjcFpp$e5K4)(Fx0lr<4)@_$knGRWU;l5DB+KmQH}5 z>fe8kE8sZKbuyRep;xDqnvDNNnqIq4)>R1lkqS`jwm)Sd`J?$M86VTV*?3k=m9$CY z=vG8E5$OgIa)7`SxN5&^AHb=1a(q@I|GlNqTVBVJy7nQS;_|eNALyyfPRY=uA+Tlq zQ-c^EVeG_}@N{`Y+(gd(bq1%)X!KIsZmK#_MiN+NJBTT%*7N70nMel_>L@hzPwZWF zss^L@WX7kTbBvG7h#CZcEey{ zBJ&f4f9MvnW4b9CtF@I0o=gfWpUr)p>axflXiI-tkw zloLoD<%qwej6~R2<~~B(p~0$lU*jh!fmAn$kZN~-?;Sg!^1ho}FJ?GN56yDtYV}=t z>~abXNDgm&e3}ON=exY$ATB^wZP0fpX>1Z2)YJ3QA1KNFC~zXDCuj1OeApWPoVt(n zsXrhXkNv-X*p-%SK}bycNGbQHpG2iY*6#cr_xa(yzoB$}bmumFoTeg%W;{ZFZ6UFyz&Iq?_w zD`3&GFj!`>v?XBz0>MPOpnRm-_n|=e!1!H9rQHyhYv5MOkNT&g`9b z>wz#b7SuKhO8s&9lGk!iDvcwxM`vd;;`fwDU3y$KMuZc1Ip=e3qotwzFC@=(%BRCv ziCK-YLX!~cx;d%pJbgh^PDPoS(CAUbd6A7Ic*)`PlTs-37$&)=2me9r_mOz!IW+Js zPt$|KC^Q-%Q295Y(` Date: Fri, 15 Aug 2014 14:46:22 -0400 Subject: [PATCH 13/37] Missed tagging of lwpolyline tests as 2D --- tests/CMakeLists.txt | 2 +- .../lwpolyline-closed-expected.png | Bin 873 -> 6875 bytes .../cgalpngtest/lwpolyline-expected.png | Bin 873 -> 6875 bytes .../lwpolyline-closed-expected.png | Bin 929 -> 6834 bytes .../opencsgtest/lwpolyline-expected.png | Bin 929 -> 6834 bytes .../lwpolyline-closed-expected.png | Bin 2424 -> 6834 bytes .../lwpolyline-expected.png | Bin 2424 -> 6834 bytes 7 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9db1ce9b..8f0fbf48 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1039,7 +1039,7 @@ disable_tests( # mark which tests are 2d (regex match inside add_cmdline_test) # (note - dont use the offset from examples/Advanced) list(APPEND TESTS_2D circle control-hull-dimension difference-2d ellipse - flat_body hull2 import_dxf intersection2 issue585 issue612 lwpolyline2 -arc _arc + flat_body hull2 import_dxf intersection2 issue585 issue612 lwpolyline -arc _arc minkowski2 multiple-layers offset- polygon* primitive-cut projection-test projection-cut-test render-2d resize-2d scale2D scale2d text-search square font transform-insert triangle) diff --git a/tests/regression/cgalpngtest/lwpolyline-closed-expected.png b/tests/regression/cgalpngtest/lwpolyline-closed-expected.png index d284acba4270e5463b2baa8ef3c3f0accc543d6d..f0ebe752b37fe0db4d26b28c892357568e0f8764 100644 GIT binary patch literal 6875 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 literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7?_xWRHv9tCXnI`@CkAK|Nr%WAbbDJ$6d;| z85o$QJzX3_DsH{Kb36C8gGfu_Cr8y4^G!C^6|j4z7f$`?x=HWO(|ODV=M;|pH#KNx z)Cm^Zc^YIiVesSp+IN4xou2bvcf+>n`_D1G|CxV|N&e?KrujdQF~$Gf$27erx-om- z>I3EbRvys3AM#+@d(DFB`I;AQ&E9&zdEdeV$#u1j%l~|0I{))3tJ%+^tlNHWWwrXb zl(p*TRMuTTTUmeoEM;Z;nab++GnDn*;y;U+9{-ue^!(fLs097}iw@+~IX3>SscrP! zx95OPd~CujeLaKo*Tp!Vcyqgan#$_*^AOXzvtb+Z)i}h_UIr;v} zobW67p`KXQ^w_>@varnm^BR_o5B4YKF&+Hs@TDju?7^2Ly$y4Wg*CX=%;Z!FKMEvR zjf6Ay%}`OhAmZVp@GDPZzC(zDUE{0Ql@&~(jUQMxS*u*+OkrIl%#j~-RPBN&hu?xd z{t~ksA{5LTzl7zcFr_w{7S*oW8~ra!Phh7D&|fi&y6ZR1^jFX`nD6j+_01Bd(#Dr8 zpXBw@g->vwQM>TJ?9LrlHDQrIHTUnZep6pj(X?nM_Zz=}PXgY>;x}e5cxJiincjxt z`>S3AuKT!lH!v{0zpPsRvTgc{P}Vl#DYh3ZW-VBAAfstlx);0f6;TPFfFBY0^-YJE z{&H%~U-Ql{Aaa4V^A77B_05cU67d245BzgY Vt!3|@Fi`+0^K|udS?83{1OUuBdout4 diff --git a/tests/regression/cgalpngtest/lwpolyline-expected.png b/tests/regression/cgalpngtest/lwpolyline-expected.png index d284acba4270e5463b2baa8ef3c3f0accc543d6d..f0ebe752b37fe0db4d26b28c892357568e0f8764 100644 GIT binary patch literal 6875 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 literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7?_xWRHv9tCXnI`@CkAK|Nr%WAbbDJ$6d;| z85o$QJzX3_DsH{Kb36C8gGfu_Cr8y4^G!C^6|j4z7f$`?x=HWO(|ODV=M;|pH#KNx z)Cm^Zc^YIiVesSp+IN4xou2bvcf+>n`_D1G|CxV|N&e?KrujdQF~$Gf$27erx-om- z>I3EbRvys3AM#+@d(DFB`I;AQ&E9&zdEdeV$#u1j%l~|0I{))3tJ%+^tlNHWWwrXb zl(p*TRMuTTTUmeoEM;Z;nab++GnDn*;y;U+9{-ue^!(fLs097}iw@+~IX3>SscrP! zx95OPd~CujeLaKo*Tp!Vcyqgan#$_*^AOXzvtb+Z)i}h_UIr;v} zobW67p`KXQ^w_>@varnm^BR_o5B4YKF&+Hs@TDju?7^2Ly$y4Wg*CX=%;Z!FKMEvR zjf6Ay%}`OhAmZVp@GDPZzC(zDUE{0Ql@&~(jUQMxS*u*+OkrIl%#j~-RPBN&hu?xd z{t~ksA{5LTzl7zcFr_w{7S*oW8~ra!Phh7D&|fi&y6ZR1^jFX`nD6j+_01Bd(#Dr8 zpXBw@g->vwQM>TJ?9LrlHDQrIHTUnZep6pj(X?nM_Zz=}PXgY>;x}e5cxJiincjxt z`>S3AuKT!lH!v{0zpPsRvTgc{P}Vl#DYh3ZW-VBAAfstlx);0f6;TPFfFBY0^-YJE z{&H%~U-Ql{Aaa4V^A77B_05cU67d245BzgY Vt!3|@Fi`+0^K|udS?83{1OUuBdout4 diff --git a/tests/regression/opencsgtest/lwpolyline-closed-expected.png b/tests/regression/opencsgtest/lwpolyline-closed-expected.png index 95cfc652804d195d0fcdc7157ada567f141818e3..03db942d5e70749805478c1238c2e7906771f90e 100644 GIT binary patch literal 6834 zcmeHM`CrWY_kX|N&1h!0nl>fUq`hbxq|m%2CE8S^lqMoen~Flrd#u^R?Y7srU1f=e zu2NwJSLLS7Rv8qzm6(c{mT6`_XLA3E@8f%a@_zN2*Lj`uJm);mc^$`nz1@GI>Cq4b z`Nd;}s~>`3@QEQ5y*(bTO9PToaclc7<4SdM^DOj@d|-$ z)w{bxlY!%CvMT(pIRHoJ{qpWM{EUa(RUuL6TP=A=_N0N=@ac=ZLopI%p0+RIbtows zKFyH<1pbswGbf53R4;%}Eh344KY5Y0@aLVOIq*pnF2V_fTZGYg+XioV!7jN|pMev& zKT2+%m)vTK6QIu2|J3>aiq3f1_&vqYKu3K?3zucSasZhdM7KqGvxA?3v&Mqay ziVOkPCY`m{3B>{@x5)=S&^q%Ts*xx!boeq>WC`NDV>*A8<^sZ8?f5GfY!OjuD}du{0^GT)+Wbc4S^JTstH?KP`?b# zO&FSsk$wkFiZA#g#h+5nAzT@VTrr8pc5O@$EI6rkuu}FWrR>0wp=%pZPlNzCQ(YX`LdodOQJI0+X!c; zgNV?zsHfR328s=lqZFe>tOMqR_SHs!ya+b^hn@$~IyH|PfcHRXX}v32Qnt$;#R@^_ z<<3U~R>ZNz@)d;885MDE-^13;{gQ%_8o`9f7aPXUV9DxFYpL{gHgMEIK1w3Toh~b; zGvWe-5|-usaYwSPXD@=0x&g(ZIRyoOAo(*!NhsC|=UW#FSj*A7{v%w3n+KQu7^8LW zP4F?sI|EUXBJkWQ`E|rPTtdf4{SXYp(XZso(UKp#AUMu~9ktG@6jzbozB%P0Tz5Ea zl=p+>H zWnISCkq;5!8rTmI>pR_w@ZG6<6yJ=BSiw~^M)2%zLtlS5l6eiI=$<%73DD%rHkn>U zHg<2c#CDOQ6#O7dg5RQh3Ma#n_!Bfnywet=wDoW#zW}4mO8ZKQ0GD)`6(b)aBV4di zIHHwhL1@`cKaZQjkyXJo#wx#VGNYBKjb7=--ic+!z_Hrz7}3dhWxccN!aIoqn~J<@$qWLX@F8wmZMCepckv2xBmPgchY zH09MG6U7Wb!DGu?3bgPRcIZiACIo7CMwf`jaQ7}Uj=KcbU6Ry9S`ep4W_c-7&A={w zKGTAjf5Y44Up1b98XgP7jC_5BlG2P%T{A3*T4(u6-bq5-Ve-jmH~=ZI9bdtN%q8 zwlry_^mer+(Rw!}8@GlC2;89Ka}BYcG`tXNg&b=Q>Pb0|)n(;ep)Q6vEufA{)ySPD z3}0WN#74L8pp^wdzI?`*zeXtO_`BfKdm6((c#Fv(WGiRoN0kBWC*eMWeEVc{R|3o6 zSRW(4Cn)8%Ucx5(E(q4y0bEvbV&ALH+QK;=J@htHwlucTN6sdvEylYlfT=|StOwN+ z?pf4f%nyZoW-aYQweY@?DILK=Nvyu&RJ|23{X`=pt`gknxaWbYC2{a#mERsfG3Bq; z5MMN;>x%`c2&{Q-E;9H7c`d*YKUiJ)aKgC+OU+LkrQB6k2dx8{vw297t7NNS>Z%hEWqm%jlV>EW&^$S!_I$vhSaQbkD!0xDYwURJk zBGl#b;)B@b+#A)Gz#aaz85@(yX|qk2l>>yL<@dWD(%8qUA~llD!5bgH)^5XSY`sf| zD4swb#kNi#QweP0?;n{YYoHmMgOW@ZS&Pu&;##1_N{#4lUnKhX-7Rep6<<=edlw_y zyZhEwLKKATNzYn~{(Ah`@>`G_K^N*-6fYFv*u zAp4ql45wPMrS4ueAuKH-gAf9|9K#!h$H-bj+lwlcH-N%`aAcPjN~W7o6SM%cljPuU zPBdObiS_Lu2!NSHt%0U5Qk$D{LKqHoVwF z|48`Z=+Cmj0bDj5PQ+-8(1=NA0DX7Q$DU0jEg{p8V>Sp;$ua#nuoPP5X7;J{<$%oj zUmXRL&4~fi1Is!uLv#iF-Qxnib=pl`%L%AVn9dr$$l1j4)50a7NdBn~Ggu#gXutiZ zv$}Ob&rJvJzXg~FGWN93up(}?RJGB-;v-j?NmO$p^jm(;gb%Wg8-QeGY3z&zQL$7- zs5_3nc=F8a6=3%{D(~)U9F6*GxEERm4v_F@6@ewced^!@yLr!Ik^;%i*6}*dkl+Rt z-=3TT8-d90L;4F`+L`4b`ug~+S&*h@vrkoSfn`>9<5l3N*1DFt`LHZ@bygO#f%K#S zktOkNv|6Stn%9nTv~_%u$11z;b%A@KODQqrA=^LpPMfIaya6-tK6M%MTNGGSet9UK zVouC-%!+2R#ZVt(Q)Cc^eDVu!h83ZMoEVo z-ZjJmkn1fE1g-{Z&b+$l7g!oPhc(V-OCvr0&J6_ftZpya0o{+F_O1UTaOj}=^f++0 z!O)QSZ;%vU)xSl$PnEJ5o>b7zSyVt8EMh$`1=FDc2tNh~m%U|P0I?C=>BFfI2(C{e zm5(iaK9E81@BL+-I69|r*Wgru0Wy0FyvTwsFo%->!s_E4^kjIv&FUQSS5{}>$J2n} z#*ge1cJS+`O%*wyU(tiWs&c4=UP+aHI2v+A9Q3od@{Tg%A+KFSzy4m%c^vTelM_mg z%e!sXpzO)^I$ggA??v6cN32A0ZNJ20Z-GaWuzZEGjjYOwrQd;jVt6BKBH&u+A?hJ> z)o!#o9oFfu^IrzxXredk!`o;@>XpnZmkG>VFRF1zyWBB> zxoa&%$o$H^2_pFq`(1^d5I)IxXib@{+E|=_4zBrQURC2pX_D8wdk)~#1~mDuctD@Q zUxlMz&JVwtARt2M2KTEAq=nIn{#Zgf07Ox(**lgZ672ZaufGCENwmTy^Kwo>$=i9i z2rM<%yP-WwkzHA}#szM-{qw1jNS^haxoOLcvJb$_}h0QN;w{~-c+qICo&bPpVLU0L||oN`XO@!P^XfX}SKAFXAwQiowztOvNu z(V?SiE@Z{-uj?^GNVvLn@l!WTd!9DD*bl3YFFo(xND4lGnuqCt7bmBEW<8XY7Tlb% z7BW}c|DMFVTygtdz8gE6z%t$1hZrJ3WPeQPGN7KiolSG26ifQ^SF+E;CaHZuS0o7Q zjtTL?(STLov!%+GdmoK^3Bt}Iw&79q1ZpfW$7bl}43Qjo&x?@;{IBIUzB)=VGCeCz zxD(>{%~h${PiJHRJN`2}G{I2BIepEa`UO;4^rLLCXo7gDcOg4f{mZSqljrX5!Y9CDJq#5qPfT-QFg z8ls~=RyZsb$veEpkK!KSOZ!(t8MkCjqESp$WvkMt7UqP1&ZNO-|S~@PK9eoSxV6p!4=-+)sdo)3zd& zXocsttaM=%6rT0-n)Z})@=H8dvX2wkx`%oSUlHqoo2fB>qEenoz7O4|HdFl$FkXoF zeJQtG(N9`j0OcO)-|-#Yd|ByEi56x7@qQw+d&)Lx)6PU1*Ai%J<@u)ma4AdkTM{OQ z-II0EifMM$#{U{mWyMI%rZm)%ZUCzVn#ZOb6${im3aKPuwFfGCdQB384?~-=mk=cF zhocoxmvp%vpuR=~e^Zo#&DA}IyMhXK=?}7^6w3Ewvn%+0@@q-yZPa2->rs8XN|z-y4nX!zW6s z7a^PpuBqMm!=hZVJ-kPAt2qzRI1GSMo}`jAKyL5Fc6p1Yy#e=62#&!=3vcMsp>B^>qs=H4XNR;3z9{FU>P}h8%ObEggF9jYOGT5u z)q;mCsEv`vP8D`h=K*;wdQ>4x>f5(~3*9tZ1kGG*;V>JXq>wxNHjqS|v(+#e83fiy zd3dMKU8Jzw)?|oxo`YuLkFpQ38J^VK??wH?NXuaK6NqDR7jsk0V)Q6%2Wqa(h=?&xHn|mQ|G?I-ZzKlV-}hsr1apx;bcA4ffeAt;pAfpr=h->N~eGx8z{9B4qERHD;pki z#w|i>pnR5*&VxUfEp3+{%S=f{xB+m%o{(}yf>8kjXF#1!*2oqsNOc8N`U)%P29`%k zS@r9g+#IDF9DTq z4(8k^?T~Wb52|6Ll_2D7a=Lk&07sOiQmQO znBtum@eGVFGq^tqCO^14cbf8|l-qA%`WA@^WM6AJ1^a6{l(TRi4?n3;^|f^foDDN7 zJ`_XKMCC|39&$3bGAkRtAAyfEn^72m*MW25ySHqI$@dgMAlyY2Brsr_KJj3sGi=kKKMV$(={0Y literal 929 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 literal 929 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 literal 2424 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 literal 2424 zcmeHJ{Zmv`7=F&ZmtEEtS=q^P!Q>*MIHIi=MmDSM3JVGXYU-$2w(4r4gsU=zAJ|bT zbY?MFp(uzj9q9*+t)|iP>rMfII?6UVQKGY?IAEx&qHKIfXI;m?!09J{dhfjNd7tMw z@B7|!&YrnhGed@j4+9XAHp}ulz_Cvb!G5zfJoyNqiB7Z3SddR{UY@b{QY!b+ydOPp z<(4F08-1!JPSq5$aev#yb#+^XM3rlKZROfM3!XpS+cG<8p^YCpI@ojf?u8&)-LAJ2 zrvNb>5J1BSc87t+66k>Rfcq-}G7vlBk()(9P-6j@`&rVnLip$9X-$N9qi*QohQWI; z#P)aVTbAEx-^wY?h5{Xu9Oj%Tj4EJUBUksdkKvRR4s$S~QX?OT0r&V7J?*nNC4R}a zN2@cEVC>Vypu3^-mumu@DfNjc996Km4A!2gbhMu7+yxy=sTXME;%%KeILsD}T;^5_ zVtpsiS$l}!aX8Gb4^dUr491k~GWPb6)+$bJJ5&Fw1 zDhy9JblhDTa*PGCdGB8^p!Ls+-n9~3wNv|pR>2y%vUuGY$O(|(U99Pos zN5iA&ZAV)KgG-F=yCUIQanGf*5FvSQ&6iN+U{d`Ja1t>Y+nG>Ovg7?Poy0ni6M4A| zInlh*6|79QK}WZ!rj-!uM$YSIJ9nALv0YkB($nM3emGah3eslvTU|!^fkDWt%y>Xn-Kz{6y<}gTfMTf0s4jjNj#ecD;E)NFC{Y0clm3y zH-?piP180TOocd?&g9M7N34kfZHJRpv?z>TY-0S`6529Z6?TWw`_1r1arTiCg5}S( zU^AK)?<&^HpP}k^e>+d4AuBV0b7H?1#*qz>7H8jJPZu`&g@dC&0k& z56=c01e#!=DZ%J3Ar;jSdH?@7CjejJfIVNuro|OWJa+$FWyr`6Gk`ELtSWS2yq(;N zM#j}f?VGHx_E2J#Byend%EJJIb&G_49Y#h4=wI0zV2GQo@|Zd0@7!!9g>jk6{aSN- zyE-}|-`;W0*Vl19U%u$on9BdDxs=zM3RCoB(oBwOS^HZ=-m51ymVi!QYG9L3>x6rD zyZ+D54CfG`H@f%SZn$y^fG#g(abCuH+bZ_7f@GXJ)%cRpbnyBv6^kJ)CCl Date: Sun, 17 Aug 2014 11:17:35 -0400 Subject: [PATCH 14/37] #587 Reorganized some tests to better distinguish between 2D and 3D tests. Added DXF export tests --- .../scad/{ => 2D}/features/circle-tests.scad | 0 .../features/control-hull-dimension.scad | 0 .../features/difference-2d-tests.scad | 0 .../scad/{ => 2D}/features/hull2-tests.scad | 0 .../features/intersection2-tests.scad | 0 .../features/minkowski2-hole-tests.scad | 0 .../{ => 2D}/features/minkowski2-tests.scad | 0 .../scad/{ => 2D}/features/offset-tests.scad | 0 .../scad/{ => 2D}/features/polygon-tests.scad | 0 .../features/projection-cut-tests.scad | 0 .../{ => 2D}/features/projection-tests.scad | 0 .../{ => 2D}/features/render-2d-tests.scad | 0 .../{ => 2D}/features/resize-2d-tests.scad | 0 .../scad/{ => 2D}/features/scale2D-tests.scad | 0 .../scad/{ => 2D}/features/square-tests.scad | 0 .../scad/3D/deprecated/import_stl-test.scad | 1 + .../deprecated}/rotate_extrude_dxf-tests.scad | 2 +- testdata/scad/{ => 3D}/features/2d-3d.scad | 0 .../scad/{ => 3D}/features/assign-tests.scad | 0 .../features/background-modifier.scad | 0 .../scad/{ => 3D}/features/camera-tests.scad | 0 .../{ => 3D}/features/child-background.scad | 0 .../{ => 3D}/features/child-child-test.scad | 0 .../scad/{ => 3D}/features/child-tests.scad | 0 .../scad/{ => 3D}/features/color-tests.scad | 0 .../scad/{ => 3D}/features/cube-tests.scad | 0 .../features/cylinder-diameter-tests.scad | 0 .../{ => 3D}/features/cylinder-tests.scad | 0 .../{ => 3D}/features/difference-tests.scad | 0 .../{ => 3D}/features/disable-modifier.scad | 0 .../{ => 3D}/features/for-nested-tests.scad | 0 .../scad/{ => 3D}/features/for-tests.scad | 0 .../highlight-and-background-modifier.scad | 0 .../{ => 3D}/features/highlight-modifier.scad | 0 .../scad/{ => 3D}/features/hull3-tests.scad | 0 .../scad/{ => 3D}/features/ifelse-tests.scad | 0 .../{ => 3D}/features/import-empty-tests.scad | 0 testdata/scad/{ => 3D}/features/import.stl | 0 .../scad/{ => 3D}/features/import_bin.stl | Bin .../{ => 3D}/features/import_bin_solid.stl | Bin .../{ => 3D}/features/intersection-tests.scad | 0 .../features/intersection_for-tests.scad | 0 .../linear_extrude-scale-zero-tests.scad | 0 .../features/linear_extrude-tests.scad | 0 .../{ => 3D}/features/minkowski3-erosion.scad | 0 .../{ => 3D}/features/minkowski3-tests.scad | 0 .../{ => 3D}/features/module-recursion.scad | 0 .../{ => 3D}/features/modulevariables.scad | 0 .../features/polyhedron-nonplanar-tests.scad | 0 .../{ => 3D}/features/polyhedron-tests.scad | 0 .../features/primitive-inf-tests.scad | 0 .../features/projection-extrude-tests.scad | 0 .../scad/{ => 3D}/features/render-tests.scad | 0 .../scad/{ => 3D}/features/resize-tests.scad | 0 .../scad/{ => 3D}/features/root-modifier.scad | 0 .../features/rotate_extrude-tests.scad | 0 .../scad/{ => 3D}/features/scale3D-tests.scad | 0 .../scad/{ => 3D}/features/sphere-tests.scad | 0 .../3D/features/surface-png-image-tests.scad | 1 + .../3D/features/surface-png-image2-tests.scad | 2 + .../3D/features/surface-png-image3-tests.scad | 2 + .../scad/{ => 3D}/features/surface-simple.dat | 0 .../{ => 3D}/features/surface-simple.scad | 0 .../{ => 3D}/features/surface-simple2.dat | 0 .../scad/{ => 3D}/features/surface-tests.scad | 0 testdata/scad/{ => 3D}/features/surface.dat | 0 .../{ => 3D}/features/testcolornames.scad | 0 .../{ => 3D}/features/transform-tests.scad | 0 .../features/union-coincident-test.scad | 0 .../scad/{ => 3D}/features/union-tests.scad | 0 .../features/surface-png-image-tests.scad | 1 - .../features/surface-png-image2-tests.scad | 2 - .../features/surface-png-image3-tests.scad | 2 - .../scad/{dxf => misc}/null-polygons.scad | 0 .../templates/import_dxf-tests-template.scad | 16 +-- .../templates/import_stl-tests-template.scad | 3 +- tests/CMakeLists.txt | 103 +++++++++--------- .../cgalpngtest/cut_view-expected.png | Bin 10069 -> 10195 bytes .../cgalpngtest/import_stl-test-expected.png | Bin 0 -> 4408 bytes .../cgalpngtest/import_stl-tests-expected.png | Bin 10193 -> 9081 bytes .../cgalpngtest/null-polygons-expected.png | Bin 6225 -> 6885 bytes .../dumptest/import_dxf-tests-expected.csg | 18 +-- .../dumptest/import_stl-test-expected.csg | 3 + .../dumptest/import_stl-tests-expected.csg | 1 - .../rotate_extrude_dxf-tests-expected.csg | 2 +- .../surface-png-image-tests-expected.csg | 2 +- .../surface-png-image2-tests-expected.csg | 2 +- .../surface-png-image3-tests-expected.csg | 2 +- .../opencsgtest/cut_view-expected.png | Bin 10266 -> 10382 bytes .../opencsgtest/import_stl-test-expected.png | Bin 0 -> 4408 bytes .../opencsgtest/import_stl-tests-expected.png | Bin 10720 -> 9537 bytes .../opencsgtest/null-polygons-expected.png | Bin 6225 -> 7150 bytes .../throwntogethertest/cut_view-expected.png | Bin 6963 -> 7025 bytes .../import_stl-test-expected.png | Bin 0 -> 4408 bytes .../import_stl-tests-expected.png | Bin 10720 -> 9537 bytes .../null-polygons-expected.png | Bin 6225 -> 7150 bytes 96 files changed, 86 insertions(+), 79 deletions(-) rename testdata/scad/{ => 2D}/features/circle-tests.scad (100%) rename testdata/scad/{ => 2D}/features/control-hull-dimension.scad (100%) rename testdata/scad/{ => 2D}/features/difference-2d-tests.scad (100%) rename testdata/scad/{ => 2D}/features/hull2-tests.scad (100%) rename testdata/scad/{ => 2D}/features/intersection2-tests.scad (100%) rename testdata/scad/{ => 2D}/features/minkowski2-hole-tests.scad (100%) rename testdata/scad/{ => 2D}/features/minkowski2-tests.scad (100%) rename testdata/scad/{ => 2D}/features/offset-tests.scad (100%) rename testdata/scad/{ => 2D}/features/polygon-tests.scad (100%) rename testdata/scad/{ => 2D}/features/projection-cut-tests.scad (100%) rename testdata/scad/{ => 2D}/features/projection-tests.scad (100%) rename testdata/scad/{ => 2D}/features/render-2d-tests.scad (100%) rename testdata/scad/{ => 2D}/features/resize-2d-tests.scad (100%) rename testdata/scad/{ => 2D}/features/scale2D-tests.scad (100%) rename testdata/scad/{ => 2D}/features/square-tests.scad (100%) create mode 100644 testdata/scad/3D/deprecated/import_stl-test.scad rename testdata/scad/{features => 3D/deprecated}/rotate_extrude_dxf-tests.scad (63%) rename testdata/scad/{ => 3D}/features/2d-3d.scad (100%) rename testdata/scad/{ => 3D}/features/assign-tests.scad (100%) rename testdata/scad/{ => 3D}/features/background-modifier.scad (100%) rename testdata/scad/{ => 3D}/features/camera-tests.scad (100%) rename testdata/scad/{ => 3D}/features/child-background.scad (100%) rename testdata/scad/{ => 3D}/features/child-child-test.scad (100%) rename testdata/scad/{ => 3D}/features/child-tests.scad (100%) rename testdata/scad/{ => 3D}/features/color-tests.scad (100%) rename testdata/scad/{ => 3D}/features/cube-tests.scad (100%) rename testdata/scad/{ => 3D}/features/cylinder-diameter-tests.scad (100%) rename testdata/scad/{ => 3D}/features/cylinder-tests.scad (100%) rename testdata/scad/{ => 3D}/features/difference-tests.scad (100%) rename testdata/scad/{ => 3D}/features/disable-modifier.scad (100%) rename testdata/scad/{ => 3D}/features/for-nested-tests.scad (100%) rename testdata/scad/{ => 3D}/features/for-tests.scad (100%) rename testdata/scad/{ => 3D}/features/highlight-and-background-modifier.scad (100%) rename testdata/scad/{ => 3D}/features/highlight-modifier.scad (100%) rename testdata/scad/{ => 3D}/features/hull3-tests.scad (100%) rename testdata/scad/{ => 3D}/features/ifelse-tests.scad (100%) rename testdata/scad/{ => 3D}/features/import-empty-tests.scad (100%) rename testdata/scad/{ => 3D}/features/import.stl (100%) rename testdata/scad/{ => 3D}/features/import_bin.stl (100%) rename testdata/scad/{ => 3D}/features/import_bin_solid.stl (100%) rename testdata/scad/{ => 3D}/features/intersection-tests.scad (100%) rename testdata/scad/{ => 3D}/features/intersection_for-tests.scad (100%) rename testdata/scad/{ => 3D}/features/linear_extrude-scale-zero-tests.scad (100%) rename testdata/scad/{ => 3D}/features/linear_extrude-tests.scad (100%) rename testdata/scad/{ => 3D}/features/minkowski3-erosion.scad (100%) rename testdata/scad/{ => 3D}/features/minkowski3-tests.scad (100%) rename testdata/scad/{ => 3D}/features/module-recursion.scad (100%) rename testdata/scad/{ => 3D}/features/modulevariables.scad (100%) rename testdata/scad/{ => 3D}/features/polyhedron-nonplanar-tests.scad (100%) rename testdata/scad/{ => 3D}/features/polyhedron-tests.scad (100%) rename testdata/scad/{ => 3D}/features/primitive-inf-tests.scad (100%) rename testdata/scad/{ => 3D}/features/projection-extrude-tests.scad (100%) rename testdata/scad/{ => 3D}/features/render-tests.scad (100%) rename testdata/scad/{ => 3D}/features/resize-tests.scad (100%) rename testdata/scad/{ => 3D}/features/root-modifier.scad (100%) rename testdata/scad/{ => 3D}/features/rotate_extrude-tests.scad (100%) rename testdata/scad/{ => 3D}/features/scale3D-tests.scad (100%) rename testdata/scad/{ => 3D}/features/sphere-tests.scad (100%) create mode 100644 testdata/scad/3D/features/surface-png-image-tests.scad create mode 100644 testdata/scad/3D/features/surface-png-image2-tests.scad create mode 100644 testdata/scad/3D/features/surface-png-image3-tests.scad rename testdata/scad/{ => 3D}/features/surface-simple.dat (100%) rename testdata/scad/{ => 3D}/features/surface-simple.scad (100%) rename testdata/scad/{ => 3D}/features/surface-simple2.dat (100%) rename testdata/scad/{ => 3D}/features/surface-tests.scad (100%) rename testdata/scad/{ => 3D}/features/surface.dat (100%) rename testdata/scad/{ => 3D}/features/testcolornames.scad (100%) rename testdata/scad/{ => 3D}/features/transform-tests.scad (100%) rename testdata/scad/{ => 3D}/features/union-coincident-test.scad (100%) rename testdata/scad/{ => 3D}/features/union-tests.scad (100%) delete mode 100644 testdata/scad/features/surface-png-image-tests.scad delete mode 100644 testdata/scad/features/surface-png-image2-tests.scad delete mode 100644 testdata/scad/features/surface-png-image3-tests.scad rename testdata/scad/{dxf => misc}/null-polygons.scad (100%) create mode 100644 tests/regression/cgalpngtest/import_stl-test-expected.png create mode 100644 tests/regression/dumptest/import_stl-test-expected.csg create mode 100644 tests/regression/opencsgtest/import_stl-test-expected.png create mode 100644 tests/regression/throwntogethertest/import_stl-test-expected.png diff --git a/testdata/scad/features/circle-tests.scad b/testdata/scad/2D/features/circle-tests.scad similarity index 100% rename from testdata/scad/features/circle-tests.scad rename to testdata/scad/2D/features/circle-tests.scad diff --git a/testdata/scad/features/control-hull-dimension.scad b/testdata/scad/2D/features/control-hull-dimension.scad similarity index 100% rename from testdata/scad/features/control-hull-dimension.scad rename to testdata/scad/2D/features/control-hull-dimension.scad diff --git a/testdata/scad/features/difference-2d-tests.scad b/testdata/scad/2D/features/difference-2d-tests.scad similarity index 100% rename from testdata/scad/features/difference-2d-tests.scad rename to testdata/scad/2D/features/difference-2d-tests.scad diff --git a/testdata/scad/features/hull2-tests.scad b/testdata/scad/2D/features/hull2-tests.scad similarity index 100% rename from testdata/scad/features/hull2-tests.scad rename to testdata/scad/2D/features/hull2-tests.scad diff --git a/testdata/scad/features/intersection2-tests.scad b/testdata/scad/2D/features/intersection2-tests.scad similarity index 100% rename from testdata/scad/features/intersection2-tests.scad rename to testdata/scad/2D/features/intersection2-tests.scad diff --git a/testdata/scad/features/minkowski2-hole-tests.scad b/testdata/scad/2D/features/minkowski2-hole-tests.scad similarity index 100% rename from testdata/scad/features/minkowski2-hole-tests.scad rename to testdata/scad/2D/features/minkowski2-hole-tests.scad diff --git a/testdata/scad/features/minkowski2-tests.scad b/testdata/scad/2D/features/minkowski2-tests.scad similarity index 100% rename from testdata/scad/features/minkowski2-tests.scad rename to testdata/scad/2D/features/minkowski2-tests.scad diff --git a/testdata/scad/features/offset-tests.scad b/testdata/scad/2D/features/offset-tests.scad similarity index 100% rename from testdata/scad/features/offset-tests.scad rename to testdata/scad/2D/features/offset-tests.scad diff --git a/testdata/scad/features/polygon-tests.scad b/testdata/scad/2D/features/polygon-tests.scad similarity index 100% rename from testdata/scad/features/polygon-tests.scad rename to testdata/scad/2D/features/polygon-tests.scad diff --git a/testdata/scad/features/projection-cut-tests.scad b/testdata/scad/2D/features/projection-cut-tests.scad similarity index 100% rename from testdata/scad/features/projection-cut-tests.scad rename to testdata/scad/2D/features/projection-cut-tests.scad diff --git a/testdata/scad/features/projection-tests.scad b/testdata/scad/2D/features/projection-tests.scad similarity index 100% rename from testdata/scad/features/projection-tests.scad rename to testdata/scad/2D/features/projection-tests.scad diff --git a/testdata/scad/features/render-2d-tests.scad b/testdata/scad/2D/features/render-2d-tests.scad similarity index 100% rename from testdata/scad/features/render-2d-tests.scad rename to testdata/scad/2D/features/render-2d-tests.scad diff --git a/testdata/scad/features/resize-2d-tests.scad b/testdata/scad/2D/features/resize-2d-tests.scad similarity index 100% rename from testdata/scad/features/resize-2d-tests.scad rename to testdata/scad/2D/features/resize-2d-tests.scad diff --git a/testdata/scad/features/scale2D-tests.scad b/testdata/scad/2D/features/scale2D-tests.scad similarity index 100% rename from testdata/scad/features/scale2D-tests.scad rename to testdata/scad/2D/features/scale2D-tests.scad diff --git a/testdata/scad/features/square-tests.scad b/testdata/scad/2D/features/square-tests.scad similarity index 100% rename from testdata/scad/features/square-tests.scad rename to testdata/scad/2D/features/square-tests.scad diff --git a/testdata/scad/3D/deprecated/import_stl-test.scad b/testdata/scad/3D/deprecated/import_stl-test.scad new file mode 100644 index 00000000..b634d12e --- /dev/null +++ b/testdata/scad/3D/deprecated/import_stl-test.scad @@ -0,0 +1 @@ +import_stl("import.stl"); diff --git a/testdata/scad/features/rotate_extrude_dxf-tests.scad b/testdata/scad/3D/deprecated/rotate_extrude_dxf-tests.scad similarity index 63% rename from testdata/scad/features/rotate_extrude_dxf-tests.scad rename to testdata/scad/3D/deprecated/rotate_extrude_dxf-tests.scad index aacde690..c2d7b427 100644 --- a/testdata/scad/features/rotate_extrude_dxf-tests.scad +++ b/testdata/scad/3D/deprecated/rotate_extrude_dxf-tests.scad @@ -1,4 +1,4 @@ // These are tests which are not yet possible to express with the // non-deprecated functionality -rotate_extrude(file = "../../dxf/open-polyline.dxf"); +rotate_extrude(file = "../../../dxf/open-polyline.dxf"); diff --git a/testdata/scad/features/2d-3d.scad b/testdata/scad/3D/features/2d-3d.scad similarity index 100% rename from testdata/scad/features/2d-3d.scad rename to testdata/scad/3D/features/2d-3d.scad diff --git a/testdata/scad/features/assign-tests.scad b/testdata/scad/3D/features/assign-tests.scad similarity index 100% rename from testdata/scad/features/assign-tests.scad rename to testdata/scad/3D/features/assign-tests.scad diff --git a/testdata/scad/features/background-modifier.scad b/testdata/scad/3D/features/background-modifier.scad similarity index 100% rename from testdata/scad/features/background-modifier.scad rename to testdata/scad/3D/features/background-modifier.scad diff --git a/testdata/scad/features/camera-tests.scad b/testdata/scad/3D/features/camera-tests.scad similarity index 100% rename from testdata/scad/features/camera-tests.scad rename to testdata/scad/3D/features/camera-tests.scad diff --git a/testdata/scad/features/child-background.scad b/testdata/scad/3D/features/child-background.scad similarity index 100% rename from testdata/scad/features/child-background.scad rename to testdata/scad/3D/features/child-background.scad diff --git a/testdata/scad/features/child-child-test.scad b/testdata/scad/3D/features/child-child-test.scad similarity index 100% rename from testdata/scad/features/child-child-test.scad rename to testdata/scad/3D/features/child-child-test.scad diff --git a/testdata/scad/features/child-tests.scad b/testdata/scad/3D/features/child-tests.scad similarity index 100% rename from testdata/scad/features/child-tests.scad rename to testdata/scad/3D/features/child-tests.scad diff --git a/testdata/scad/features/color-tests.scad b/testdata/scad/3D/features/color-tests.scad similarity index 100% rename from testdata/scad/features/color-tests.scad rename to testdata/scad/3D/features/color-tests.scad diff --git a/testdata/scad/features/cube-tests.scad b/testdata/scad/3D/features/cube-tests.scad similarity index 100% rename from testdata/scad/features/cube-tests.scad rename to testdata/scad/3D/features/cube-tests.scad diff --git a/testdata/scad/features/cylinder-diameter-tests.scad b/testdata/scad/3D/features/cylinder-diameter-tests.scad similarity index 100% rename from testdata/scad/features/cylinder-diameter-tests.scad rename to testdata/scad/3D/features/cylinder-diameter-tests.scad diff --git a/testdata/scad/features/cylinder-tests.scad b/testdata/scad/3D/features/cylinder-tests.scad similarity index 100% rename from testdata/scad/features/cylinder-tests.scad rename to testdata/scad/3D/features/cylinder-tests.scad diff --git a/testdata/scad/features/difference-tests.scad b/testdata/scad/3D/features/difference-tests.scad similarity index 100% rename from testdata/scad/features/difference-tests.scad rename to testdata/scad/3D/features/difference-tests.scad diff --git a/testdata/scad/features/disable-modifier.scad b/testdata/scad/3D/features/disable-modifier.scad similarity index 100% rename from testdata/scad/features/disable-modifier.scad rename to testdata/scad/3D/features/disable-modifier.scad diff --git a/testdata/scad/features/for-nested-tests.scad b/testdata/scad/3D/features/for-nested-tests.scad similarity index 100% rename from testdata/scad/features/for-nested-tests.scad rename to testdata/scad/3D/features/for-nested-tests.scad diff --git a/testdata/scad/features/for-tests.scad b/testdata/scad/3D/features/for-tests.scad similarity index 100% rename from testdata/scad/features/for-tests.scad rename to testdata/scad/3D/features/for-tests.scad diff --git a/testdata/scad/features/highlight-and-background-modifier.scad b/testdata/scad/3D/features/highlight-and-background-modifier.scad similarity index 100% rename from testdata/scad/features/highlight-and-background-modifier.scad rename to testdata/scad/3D/features/highlight-and-background-modifier.scad diff --git a/testdata/scad/features/highlight-modifier.scad b/testdata/scad/3D/features/highlight-modifier.scad similarity index 100% rename from testdata/scad/features/highlight-modifier.scad rename to testdata/scad/3D/features/highlight-modifier.scad diff --git a/testdata/scad/features/hull3-tests.scad b/testdata/scad/3D/features/hull3-tests.scad similarity index 100% rename from testdata/scad/features/hull3-tests.scad rename to testdata/scad/3D/features/hull3-tests.scad diff --git a/testdata/scad/features/ifelse-tests.scad b/testdata/scad/3D/features/ifelse-tests.scad similarity index 100% rename from testdata/scad/features/ifelse-tests.scad rename to testdata/scad/3D/features/ifelse-tests.scad diff --git a/testdata/scad/features/import-empty-tests.scad b/testdata/scad/3D/features/import-empty-tests.scad similarity index 100% rename from testdata/scad/features/import-empty-tests.scad rename to testdata/scad/3D/features/import-empty-tests.scad diff --git a/testdata/scad/features/import.stl b/testdata/scad/3D/features/import.stl similarity index 100% rename from testdata/scad/features/import.stl rename to testdata/scad/3D/features/import.stl diff --git a/testdata/scad/features/import_bin.stl b/testdata/scad/3D/features/import_bin.stl similarity index 100% rename from testdata/scad/features/import_bin.stl rename to testdata/scad/3D/features/import_bin.stl diff --git a/testdata/scad/features/import_bin_solid.stl b/testdata/scad/3D/features/import_bin_solid.stl similarity index 100% rename from testdata/scad/features/import_bin_solid.stl rename to testdata/scad/3D/features/import_bin_solid.stl diff --git a/testdata/scad/features/intersection-tests.scad b/testdata/scad/3D/features/intersection-tests.scad similarity index 100% rename from testdata/scad/features/intersection-tests.scad rename to testdata/scad/3D/features/intersection-tests.scad diff --git a/testdata/scad/features/intersection_for-tests.scad b/testdata/scad/3D/features/intersection_for-tests.scad similarity index 100% rename from testdata/scad/features/intersection_for-tests.scad rename to testdata/scad/3D/features/intersection_for-tests.scad diff --git a/testdata/scad/features/linear_extrude-scale-zero-tests.scad b/testdata/scad/3D/features/linear_extrude-scale-zero-tests.scad similarity index 100% rename from testdata/scad/features/linear_extrude-scale-zero-tests.scad rename to testdata/scad/3D/features/linear_extrude-scale-zero-tests.scad diff --git a/testdata/scad/features/linear_extrude-tests.scad b/testdata/scad/3D/features/linear_extrude-tests.scad similarity index 100% rename from testdata/scad/features/linear_extrude-tests.scad rename to testdata/scad/3D/features/linear_extrude-tests.scad diff --git a/testdata/scad/features/minkowski3-erosion.scad b/testdata/scad/3D/features/minkowski3-erosion.scad similarity index 100% rename from testdata/scad/features/minkowski3-erosion.scad rename to testdata/scad/3D/features/minkowski3-erosion.scad diff --git a/testdata/scad/features/minkowski3-tests.scad b/testdata/scad/3D/features/minkowski3-tests.scad similarity index 100% rename from testdata/scad/features/minkowski3-tests.scad rename to testdata/scad/3D/features/minkowski3-tests.scad diff --git a/testdata/scad/features/module-recursion.scad b/testdata/scad/3D/features/module-recursion.scad similarity index 100% rename from testdata/scad/features/module-recursion.scad rename to testdata/scad/3D/features/module-recursion.scad diff --git a/testdata/scad/features/modulevariables.scad b/testdata/scad/3D/features/modulevariables.scad similarity index 100% rename from testdata/scad/features/modulevariables.scad rename to testdata/scad/3D/features/modulevariables.scad diff --git a/testdata/scad/features/polyhedron-nonplanar-tests.scad b/testdata/scad/3D/features/polyhedron-nonplanar-tests.scad similarity index 100% rename from testdata/scad/features/polyhedron-nonplanar-tests.scad rename to testdata/scad/3D/features/polyhedron-nonplanar-tests.scad diff --git a/testdata/scad/features/polyhedron-tests.scad b/testdata/scad/3D/features/polyhedron-tests.scad similarity index 100% rename from testdata/scad/features/polyhedron-tests.scad rename to testdata/scad/3D/features/polyhedron-tests.scad diff --git a/testdata/scad/features/primitive-inf-tests.scad b/testdata/scad/3D/features/primitive-inf-tests.scad similarity index 100% rename from testdata/scad/features/primitive-inf-tests.scad rename to testdata/scad/3D/features/primitive-inf-tests.scad diff --git a/testdata/scad/features/projection-extrude-tests.scad b/testdata/scad/3D/features/projection-extrude-tests.scad similarity index 100% rename from testdata/scad/features/projection-extrude-tests.scad rename to testdata/scad/3D/features/projection-extrude-tests.scad diff --git a/testdata/scad/features/render-tests.scad b/testdata/scad/3D/features/render-tests.scad similarity index 100% rename from testdata/scad/features/render-tests.scad rename to testdata/scad/3D/features/render-tests.scad diff --git a/testdata/scad/features/resize-tests.scad b/testdata/scad/3D/features/resize-tests.scad similarity index 100% rename from testdata/scad/features/resize-tests.scad rename to testdata/scad/3D/features/resize-tests.scad diff --git a/testdata/scad/features/root-modifier.scad b/testdata/scad/3D/features/root-modifier.scad similarity index 100% rename from testdata/scad/features/root-modifier.scad rename to testdata/scad/3D/features/root-modifier.scad diff --git a/testdata/scad/features/rotate_extrude-tests.scad b/testdata/scad/3D/features/rotate_extrude-tests.scad similarity index 100% rename from testdata/scad/features/rotate_extrude-tests.scad rename to testdata/scad/3D/features/rotate_extrude-tests.scad diff --git a/testdata/scad/features/scale3D-tests.scad b/testdata/scad/3D/features/scale3D-tests.scad similarity index 100% rename from testdata/scad/features/scale3D-tests.scad rename to testdata/scad/3D/features/scale3D-tests.scad diff --git a/testdata/scad/features/sphere-tests.scad b/testdata/scad/3D/features/sphere-tests.scad similarity index 100% rename from testdata/scad/features/sphere-tests.scad rename to testdata/scad/3D/features/sphere-tests.scad diff --git a/testdata/scad/3D/features/surface-png-image-tests.scad b/testdata/scad/3D/features/surface-png-image-tests.scad new file mode 100644 index 00000000..dce2cbb3 --- /dev/null +++ b/testdata/scad/3D/features/surface-png-image-tests.scad @@ -0,0 +1 @@ +surface("../../../image/black-white-gradient.png"); diff --git a/testdata/scad/3D/features/surface-png-image2-tests.scad b/testdata/scad/3D/features/surface-png-image2-tests.scad new file mode 100644 index 00000000..d6f4ed44 --- /dev/null +++ b/testdata/scad/3D/features/surface-png-image2-tests.scad @@ -0,0 +1,2 @@ +scale([1, 1, .2]) + surface("../../../image/smiley.png", invert=false); diff --git a/testdata/scad/3D/features/surface-png-image3-tests.scad b/testdata/scad/3D/features/surface-png-image3-tests.scad new file mode 100644 index 00000000..a8088912 --- /dev/null +++ b/testdata/scad/3D/features/surface-png-image3-tests.scad @@ -0,0 +1,2 @@ +scale([1, 1, .2]) + surface("../../../image/smiley.png", invert=true); diff --git a/testdata/scad/features/surface-simple.dat b/testdata/scad/3D/features/surface-simple.dat similarity index 100% rename from testdata/scad/features/surface-simple.dat rename to testdata/scad/3D/features/surface-simple.dat diff --git a/testdata/scad/features/surface-simple.scad b/testdata/scad/3D/features/surface-simple.scad similarity index 100% rename from testdata/scad/features/surface-simple.scad rename to testdata/scad/3D/features/surface-simple.scad diff --git a/testdata/scad/features/surface-simple2.dat b/testdata/scad/3D/features/surface-simple2.dat similarity index 100% rename from testdata/scad/features/surface-simple2.dat rename to testdata/scad/3D/features/surface-simple2.dat diff --git a/testdata/scad/features/surface-tests.scad b/testdata/scad/3D/features/surface-tests.scad similarity index 100% rename from testdata/scad/features/surface-tests.scad rename to testdata/scad/3D/features/surface-tests.scad diff --git a/testdata/scad/features/surface.dat b/testdata/scad/3D/features/surface.dat similarity index 100% rename from testdata/scad/features/surface.dat rename to testdata/scad/3D/features/surface.dat diff --git a/testdata/scad/features/testcolornames.scad b/testdata/scad/3D/features/testcolornames.scad similarity index 100% rename from testdata/scad/features/testcolornames.scad rename to testdata/scad/3D/features/testcolornames.scad diff --git a/testdata/scad/features/transform-tests.scad b/testdata/scad/3D/features/transform-tests.scad similarity index 100% rename from testdata/scad/features/transform-tests.scad rename to testdata/scad/3D/features/transform-tests.scad diff --git a/testdata/scad/features/union-coincident-test.scad b/testdata/scad/3D/features/union-coincident-test.scad similarity index 100% rename from testdata/scad/features/union-coincident-test.scad rename to testdata/scad/3D/features/union-coincident-test.scad diff --git a/testdata/scad/features/union-tests.scad b/testdata/scad/3D/features/union-tests.scad similarity index 100% rename from testdata/scad/features/union-tests.scad rename to testdata/scad/3D/features/union-tests.scad diff --git a/testdata/scad/features/surface-png-image-tests.scad b/testdata/scad/features/surface-png-image-tests.scad deleted file mode 100644 index f5ca3ccb..00000000 --- a/testdata/scad/features/surface-png-image-tests.scad +++ /dev/null @@ -1 +0,0 @@ -surface("../../image/black-white-gradient.png"); diff --git a/testdata/scad/features/surface-png-image2-tests.scad b/testdata/scad/features/surface-png-image2-tests.scad deleted file mode 100644 index 7fb304b4..00000000 --- a/testdata/scad/features/surface-png-image2-tests.scad +++ /dev/null @@ -1,2 +0,0 @@ -scale([1, 1, .2]) - surface("../../image/smiley.png", invert=false); diff --git a/testdata/scad/features/surface-png-image3-tests.scad b/testdata/scad/features/surface-png-image3-tests.scad deleted file mode 100644 index 65f4ea7a..00000000 --- a/testdata/scad/features/surface-png-image3-tests.scad +++ /dev/null @@ -1,2 +0,0 @@ -scale([1, 1, .2]) - surface("../../image/smiley.png", invert=true); diff --git a/testdata/scad/dxf/null-polygons.scad b/testdata/scad/misc/null-polygons.scad similarity index 100% rename from testdata/scad/dxf/null-polygons.scad rename to testdata/scad/misc/null-polygons.scad diff --git a/testdata/scad/templates/import_dxf-tests-template.scad b/testdata/scad/templates/import_dxf-tests-template.scad index 91eca7a9..1a8b0df5 100644 --- a/testdata/scad/templates/import_dxf-tests-template.scad +++ b/testdata/scad/templates/import_dxf-tests-template.scad @@ -1,10 +1,10 @@ import(); -translate([-210,0,0]) import(file="../../dxf/polygons.dxf"); -translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[0,110]); -translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[110,110], scale=0.5); -import(file="../../dxf/multiple-layers.dxf"); -translate([-200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="0"); -translate([0,200,0]) import(filename="../../dxf/multiple-layers.dxf", layername="0"); -translate([200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="noname"); -translate([0,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="Layer with a pretty long name including \\ \"special\" /'\\\\ characters"); +translate([-210,0,0]) import(file="../../../dxf/polygons.dxf"); +translate([-210,0,0]) import(file="../../../dxf/polygons.dxf", origin=[0,110]); +translate([-210,0,0]) import(file="../../../dxf/polygons.dxf", origin=[110,110], scale=0.5); +import(file="../../../dxf/multiple-layers.dxf"); +translate([-200,200,0]) import(file="../../../dxf/multiple-layers.dxf", layer="0"); +translate([0,200,0]) import(filename="../../../dxf/multiple-layers.dxf", layername="0"); +translate([200,200,0]) import(file="../../../dxf/multiple-layers.dxf", layer="noname"); +translate([0,200,0]) import(file="../../../dxf/multiple-layers.dxf", layer="Layer with a pretty long name including \\ \"special\" /'\\\\ characters"); translate([200,0,0]) import(file="@CMAKE_SOURCE_DIR@/../testdata/dxf/polygons.dxf"); diff --git a/testdata/scad/templates/import_stl-tests-template.scad b/testdata/scad/templates/import_stl-tests-template.scad index 2910fe5f..36cc9a14 100644 --- a/testdata/scad/templates/import_stl-tests-template.scad +++ b/testdata/scad/templates/import_stl-tests-template.scad @@ -1,9 +1,8 @@ -import_stl("import.stl"); translate([2,0,0]) import("import.stl"); translate([4,0,0]) import("import_bin.stl"); // Test binary STLs which happen to start with the string "solid" translate([0,4,0]) import("import_bin_solid.stl"); -translate([0,2,0]) import("@CMAKE_SOURCE_DIR@/../testdata/scad/features/import.stl"); +translate([0,2,0]) import("@CMAKE_SOURCE_DIR@/../testdata/scad/3D/features/import.stl"); translate([2,2,0]) { difference() { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8f0fbf48..14b53786 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -865,6 +865,18 @@ function(get_test_fullname TESTCMD FILENAME FULLNAME) set(${FULLNAME} ${${FULLNAME}} PARENT_SCOPE) endfunction() +# +# Check if a test file is a 2D test +# +function(is_2d FULLNAME RESULT) + list(FIND ALL_2D_FILES ${FULLNAME} IDX) + if (${IDX} GREATER -1) + set(${RESULT} 1 PARENT_SCOPE) + else() + set(${RESULT} PARENT_SCOPE) + endif() +endfunction() + # # This functions adds cmd-line tests given files. # @@ -911,14 +923,10 @@ function(add_cmdline_test TESTCMD_BASENAME) # 2D tests should be viewed from the top, not an angle. set(CAMERA_OPTION "") - foreach(test2d IN LISTS TESTS_2D) - string(REGEX MATCH "${test2d}" match_result ${TEST_FULLNAME}) - if (NOT "${match_result}" STREQUAL "") - #message(STATUS "2d test found: ${TEST_FULLNAME}, ${match_result}") - set(CAMERA_OPTION "--camera=0,0,100,0,0,0" "--viewall" "--autocenter" "--projection=ortho") - break() - endif() - endforeach() + is_2d(${SCADFILE} IS2D) + if (IS2D) + set(CAMERA_OPTION "--camera=0,0,100,0,0,0" "--viewall" "--autocenter" "--projection=ortho") + endif() # Handle configurations unset(FOUNDCONFIGS) @@ -955,18 +963,20 @@ configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/include-tests-temp configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/use-tests-template.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad) configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/import_stl-tests-template.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/features/import_stl-tests.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/import_stl-tests.scad) configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/import_dxf-tests-template.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/features/import_dxf-tests.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/2D/features/import_dxf-tests.scad) # Find all scad files -file(GLOB FEATURES_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/*.scad) +file(GLOB FEATURES_3D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/*.scad) +file(GLOB FEATURES_2D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/2D/features/*.scad) +file(GLOB DEPRECATED_3D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/deprecated/*.scad) file(GLOB SCAD_DXF_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/dxf/*.scad) file(GLOB FUNCTION_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/functions/*.scad) file(GLOB EXAMPLE_FILES ${CMAKE_SOURCE_DIR}/../examples/*/*.scad) list(APPEND ECHO_FILES ${FUNCTION_FILES} - ${CMAKE_SOURCE_DIR}/../testdata/scad/features/for-tests.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/for-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/echo-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/parser-tests.scad @@ -995,7 +1005,7 @@ list(APPEND ECHO_FILES ${FUNCTION_FILES} ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-recursive-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/empty-stl.scad) -list(APPEND DUMPTEST_FILES ${FEATURES_FILES}) +list(APPEND DUMPTEST_FILES ${FEATURES_2D_FILES} ${FEATURES_3D_FILES} ${DEPRECATED_3D_FILES}) list(APPEND DUMPTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad @@ -1005,24 +1015,32 @@ list(APPEND DUMPTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allmodules.scad) -list(APPEND CGALPNGTEST_FILES ${FEATURES_FILES} ${SCAD_DXF_FILES} ${EXAMPLE_FILES}) -list(APPEND CGALPNGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad +list(APPEND CGALPNGTEST_2D_FILES ${FEATURES_2D_FILES} ${SCAD_DXF_FILES}) +list(APPEND CGALPNGTEST_3D_FILES ${FEATURES_3D_FILES} ${DEPRECATED_3D_FILES} ${EXAMPLE_FILES}) +list(APPEND CGALPNGTEST_3D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/transform-nan-inf-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles_dir/localfiles-compatibility-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/rotate-empty-bbox.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/empty-shape-tests.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/empty-shape-tests.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/null-polygons.scad) +list(APPEND CGALPNGTEST_FILES ${CGALPNGTEST_2D_FILES} ${CGALPNGTEST_3D_FILES}) list(APPEND OPENCSGTEST_FILES ${CGALPNGTEST_FILES}) list(APPEND OPENCSGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/intersection-prune-test.scad) list(APPEND THROWNTOGETHERTEST_FILES ${OPENCSGTEST_FILES}) list(APPEND CGALSTLSANITYTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/normal-nan.scad) +file(GLOB EXPERIMENTAL_TEXT_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-*.scad) + list(APPEND EXPORT3D_TEST_FILES ${EXAMPLE_FILES}) -list(APPEND EXPORT3D_TEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/polyhedron-nonplanar-tests.scad) +list(APPEND EXPORT3D_TEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/polyhedron-nonplanar-tests.scad) disable_tests( + # This doesn't output anything + dxfpngtest_nothing-decimal-comma-separated + # the flat_body is not 3d so dont do 3d-tests on it stlpngtest_flat_body offpngtest_flat_body @@ -1036,13 +1054,8 @@ disable_tests( offpngtest_logo_and_text ) -# mark which tests are 2d (regex match inside add_cmdline_test) -# (note - dont use the offset from examples/Advanced) -list(APPEND TESTS_2D circle control-hull-dimension difference-2d ellipse - flat_body hull2 import_dxf intersection2 issue585 issue612 lwpolyline -arc _arc - minkowski2 multiple-layers offset- polygon* primitive-cut projection-test projection-cut-test - render-2d resize-2d scale2D scale2d text-search square font - transform-insert triangle) +# 2D tests +list(APPEND ALL_2D_FILES ${FEATURES_2D_FILES} ${SCAD_DXF_FILES} ${EXPERIMENTAL_TEXT_FILES}) # FIXME: This test illustrates a weakness in child() combined with modifiers. # Reenable it when this is improved @@ -1221,21 +1234,13 @@ add_cmdline_test(throwntogethertest EXE ${OPENSCAD_BINPATH} ARGS --preview=throw # with anything. It's self-contained and returns != 0 on error add_cmdline_test(cgalstlsanitytest EXE ${CMAKE_SOURCE_DIR}/cgalstlsanitytest SUFFIX txt ARGS ${OPENSCAD_BINPATH} FILES ${CGALSTLSANITYTEST_FILES}) -# Export/Import 3d png tests. +# Export/Import tests add_cmdline_test(stlpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=STL SUFFIX png FILES ${EXPORT3D_TEST_FILES}) add_cmdline_test(offpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=OFF EXPECTEDDIR stlpngtest SUFFIX png FILES ${EXPORT3D_TEST_FILES}) +add_cmdline_test(dxfpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=DXF EXPECTEDDIR cgalpngtest SUFFIX png FILES ${ALL_2D_FILES}) # Add experimental tests -list(APPEND EXPERIMENTAL_TEXT_FILES - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-alignment-tests.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-direction-tests.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-simple-tests.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-tests.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-composition.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-font-symbol.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/experimental/text-search-test.scad) - add_cmdline_test(dumptest EXE ${OPENSCAD_BINPATH} ARGS --enable=text -o SUFFIX csg FILES ${EXPERIMENTAL_TEXT_FILES}) add_cmdline_test(cgalpngtest EXE ${OPENSCAD_BINPATH} ARGS --render --enable=text -o SUFFIX png FILES ${EXPERIMENTAL_TEXT_FILES}) add_cmdline_test(opencsgtest EXE ${OPENSCAD_BINPATH} ARGS --enable=text -o SUFFIX png FILES ${EXPERIMENTAL_TEXT_FILES}) @@ -1265,75 +1270,75 @@ endif() add_cmdline_test(openscad-imgsize EXE ${OPENSCAD_BINPATH} ARGS --imgsize 100,100 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) add_cmdline_test(openscad-imgstretch EXE ${OPENSCAD_BINPATH} ARGS --imgsize 500,100 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) add_cmdline_test(openscad-imgstretch2 EXE ${OPENSCAD_BINPATH} ARGS --imgsize 100,500 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective gimbal cam add_cmdline_test(openscad-camdist EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=0,0,0,90,0,90,100 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective gimbal cam add_cmdline_test(openscad-camrot EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=0,0,0,440,337.5,315,100 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective gimbal cam add_cmdline_test(openscad-camtrans EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,100 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective gimbal cam, viewall add_cmdline_test(openscad-camtrans-viewall EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,3000 --viewall -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Orthographic gimbal cam add_cmdline_test(openscad-camortho EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=100,-20,-20,90,0,90,90 --projection=o -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Orthographic gimbal cam viewall add_cmdline_test(openscad-camortho-viewall EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,3000 --viewall --projection=o -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective vector cam add_cmdline_test(openscad-cameye EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=60,40,30,0,0,0 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective vector cam add_cmdline_test(openscad-cameye2 EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=160,140,130,0,0,0 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective vector cam add_cmdline_test(openscad-camcenter EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=60,40,30,20,10,30 -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Perspective vector cam viewall add_cmdline_test(openscad-camcenter-viewall EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=60,40,30,20,10,30 --viewall -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Orthographic vector cam add_cmdline_test(openscad-cameyeortho EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=160,140,130,0,0,0 --projection=o -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Orthographic vector cam viewall add_cmdline_test(openscad-cameyeortho-viewall EXE ${OPENSCAD_BINPATH} ARGS --imgsize=500,500 --camera=16,14,13,0,0,0 --viewall --projection=o -o SUFFIX png - FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/camera-tests.scad) + FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/camera-tests.scad) # Colorscheme tests add_cmdline_test(openscad-colorscheme-cornfield EXE ${OPENSCAD_BINPATH} diff --git a/tests/regression/cgalpngtest/cut_view-expected.png b/tests/regression/cgalpngtest/cut_view-expected.png index 0ec829fbdd476cb311ceb58d349d6e79573bc35b..62d0ee53586473ddc1593676167f9b6897795f84 100644 GIT binary patch literal 10195 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 literal 10069 zcmeHtX*`tQ`~N))#+H34Vp2(25<(IqTXvBpOH}skBqe4Bkz{F6)=Wu>%9f>wu~jNt z_FeWR`(&9hbN`O-_w(TY`#=0Y_&@qQnt9#l+}F9zb-l0sjx#sa=VaT*20;*~!8siZ z2ttCtNC>n06ShzL9Ry(^10Agkp@_v{zgeID@ZQza@cf6kkh9~$EGZfu=h;lINAAms zeBk9Nru5+f?Y9vz{*{mck=YPi$yp8dIp8Znyv*FL+fN5egvwls8; z5d(AMAOw1xr&9CMcLhE0m%Gx4fS6^$UhY7TO|4C-Bp<=2-405DFvxxseBlRYNdye`bkp!KX5o z11m6?L6$?U5C!-p999Y}UDz7)OzMR9v&0j|=m)&19N4!M&O;-0mFfZM%p~>`ykL)k z&&L|Wv02g(u|HXen2Q!BTU>eHrbEi$+0GkviOk!JZsm1`+*da;u5;LJ+iIgg1u8sUyVZuDaO86PhX3UoBY2WX7DaM6?>XG7bD-$Ks!rXJ zwjPW;p@*NH+wa-=P{6RQ9U47rX`yaPK#0zad*jh=OAV97*^HI%dAdjrl5Y2{#O<%} zZ}H~jkp<12b=tehi|C=-^NX|uH9e9lg4x^wiEucuLd0*TNEh;bPCZ2*Ei3Pk7<+`@ zN;>>q?8 zvbzrLd-!0<#rcFRh z{(hUXhITWBN9jE_8&`)tcvj-zzb}$di$Ng{(GW^1(lKWfh z;l9KDg3lT12*dU7ln&FfPSM3ZZVxZh@|z``59$aaM2J?4w}Hqtq-}i9I_C_-(VcKY z2vG*9JZE;y@hkx$^L%RHCA!1}ex#RGq7YAbtkhkW388FTjpKsRYsT=*GJHSHB!sAJ zhrZu(3P-{K8KbN8{8AZQSfarRu zmuedV&fLHcyzt;@e{v~H_XniLcR|et^Y$6T=}i+mS`EZRHG%T+56W2#vkkmlW3rFX zw=4pCipA~y213=7PmgJbN7X7hZH1KW||Gi!vCR8?)L^t%9m4F4Sxn_^ZU2 z>NWQ&EE)QgTwHdj29Bz*XTLcZDvK^}}IjDDWoS>vS%KsEa%HaQ;mK zgvvAFS)IhLe4KI8==`~&Ua7czi=F5TFyZ_1?U@Gw)Y>LSo69ENd9?|qr3}P5B=}XZ zPfp-$-h`IP0)Awj%7hLi`@`-+_;N>*M5WTc{}^LciI%L?Y4ktktB1YKP03+psqRG!5XxyXTRhF>wP zn8tW|rF?F=sfy3sum`)SK){~e%$|N#f!|yONZ1$+ypOX-3*+o>o#b2W>4e{D@#DpY zD%o9lipqK(EVx4ty8To)OK6&pbjh!(aGddnDD!}g`NLlFWIAADrF0RVG;r_z{%+>d z(0*I=WTRNVEHk&^60&)^mTo_31lh|VYqrBjEpYNCdJ<$v;!W1!UTi1aEZ45*A&XQ- z77PGjkd9!JW5_-6gv$q|Oh{f@V-?_#QOV!%QH=2`czY9Xap*)v;?H=(fwviEpTm9q z-)lQFBben;4~>pVwofgNT2{*?;*JPobLM3pMkicXXCHoiKf)KxO9|txl>46HJo{xCe7^4^2~1oF#ZyfXO7I zHxld!=47UzB0WPB`1BWVp7!EOCd;c3)9)LXX4+-m3A0YKt3v z`%tsyU9A>snI<->bj=|qHHWf89j+yqF@!;0%)4krbc%-7c-0&}@*c0%gKb4p+zV?? zWD}r!Wwy$5t5{!rUr<~*tSI?x#<^mb_t=nVYhfHZMWwm8i&9%p&)z@U;7Bs5EZ`>w z1GuO?IdBcgN~TH|=Qb9u@)e@?+$i{C3~x3kilc$Y_&Q!00bG1U!hC{1p6cZHI7@HZ z6!*H`%_JV-(lo4pRsS{Y3%l`cuCOEe(|gR_0ZsSFX`>@BMYDTxwCxPMW^AmO%~IiH z-|C2sCxovh+HgBV(xf|b7K@b8r_k9=qvk>YC+o}XPEz0{^)+ee%kEBThicn%z!jne zX=^#1u=+WRMcA8vaZ8KzoRL|D6UogPz=FfLpIg2%g{eYK(l=CsSat`1Hh$8$_>rMlzg$0nWP@tnNMniYxBsGp^e`@75F1n98?FEV3=2ve49A44{A*!6iGGG9lOgQa64V1xX-U z>ldruJVR8`SR?-xYO0Y~mrK^g{aGrP3}Y^evCC9&e+A!;brc?I< zJ*C^@NHK%8($82bunqiAmzI$i(J!(4^7b%upZk;h=2;qJ5I)5gw5CP+o&K{5_b5*W zDT%Aj1lQ)nUTT$ahTR2UIS5@uPf85ipXMN`=vq!$-ljS=FwA&U1rY}F`7Z3hSlIKk zdM^&{>PT{bYt}BuW<1W&>u=E-e$>&-9U34!Hq4p|tp*+{ z+cD=wg8b&@<$E));j%?o##nB4N)VxSr&i8~*?<3mW%na1ZH$fOpCfKuoX`51<`0}X zVhQSer3intPqLA>BXly~liYm!P+uN*6cEk zvk=_O#vhG8-$237G0e2H5oH(*W7Fy~m4kHlycb7vsrYn3ASDX79$&>v^aiL=?kZCW zUZiOLVVKd|q6U}kA32hmXS9Y{``o8eLFU`b_f45DzJdQ#jZ&9rtz}nIUWAC+NRF{& zgGR+y@cshdT@N7i>I)=??!&KUcESu#w`Ttm_Q$y<2}%Y8gwj#_0a9TW(XhWI3luuyo0+HF8#=w}sFuGDM&zO^gfA7+2^X-~(eV+IlZ2(4DBOaMmHta8^>N zxS9i+pUVJh0#0t%uANy(i-Dr5!8V$_mY;(9m|5vf_*_F>fX_~PJ)gV@4 z!>+iDLPIV-K?EPYcGX}J+~XrcJ~rZTJmJ*yPp_^5gT5Lt^D4xRs#(F-yPsPsLVOGR zqUwlbJRzr7b#E+$x|{QN)wq`C7x8CHr0`kG#&)*iiO_2&0cjFFe}sMp_JMOJ2tbgy zjzY6jgHLN?%zMHaGgMJiht=JPy=uDDnY(-IKxxN-Fb>j{fWSK&Gw_;zlCmpR^NQ!f zP5-NX4RvpH33ISUZqe7>eAk9|bdw;_2@BjHgtLy_i@t;{`ftv|ist2!Dq{x;#X0hH z!DXn$DD@bTu1hw5P0#*OXANLZcO<>WZ{MkE$&W1)*lOzbaki5HojykC;$= zdL9Px$aBy&|B64m_UKWb3dlE=>jr#t{la_kHy6b5j?-HGGH_GTs zddY5W;t1@-u{ljX?MMxrF|uBM+DvoXqh1YVZMC7XqA0$V_IniTid(aIrae}7O6a2` zKasvV9w)xt{W^Q+Oj7L(dl}ElVZt?my)lf{^z)sYaFo+NGd0{;&FLG@^btfNSyfLo zcXd*K>GZ9L;buBL`}z%njR<*OU+eaoVr`jRzuE0T>$>F~{bdImxWj^$19z~i)}5E> zFttPISl&)w-VVT5-|E|AxPZ9YvgaXRWe7#wZfLHR`C)@!!C7gLbsGvU{tUqXx^#@o zBY;VsWLtqr{fHEvH!H!UDpJi{Tv2@3fJ=6W#tv$kaW5yms@|XnLCe9bQtc(Hugs3# zQ4C=}`xeYH%+Fo97uy&g&)F0Y}a^zv%ZYPsN@2d<5WH=&ws zt~0mG>n8j{6sgO^{m`Cm$&P_w`p!m+RcGmIm)hThtSYejeiH4iX$%w!hNnsrG zw+xl@{uJ?8#))QQvG%)&L!$H>+Hm5!Gt_|K5)R9Xx(;Hlny)}gz87UQ;N#yvi%&;a zzDej^>p>K#JO5>KZld6GI`B}HB4PjUNM+~!MR|{GLW}*7Hd5asli3m(TpIpM+a#`t zRTaUP0TW*)Mpw71dNqUJx9SR5hpiSZmIlwbt+EHa_0V&T7PP7`kD+^Uj$E)1Vcg_zNgwL zc(hNqQZ1^lVTZ{OrJsFm-*}E%OcxeXtVBw9iUs)Vg*z zbo5-_?!fQd31Tujj@;0PZ`54tuOPKeb&rKHo%V|Qz!v)xVq6eM?EO`R=xI}9c{`dJe^V?&V1ujPuKDg zej>%@ec}3#;|}-^`5q^y4rUvNt;KuUTXSotuX0izaYkP&Hk2j^T1gA8|8V+f`PPTC z4Qt*ot9j7)X%}b`biHWYR%K)S89gK~CXaXsPjzIYMC#?KGrceV3hu=%unFGHX5lA9 zI6l&Y7ce(r&?N9j8)m(pzli3z?X^LmiN9HOuUB5YkQ>3d$?`24a+k1V=#1iKDEKd=k_dd7u z(kHXw%qky~TT#B@FILvws@Z2d-@?nd-^wJqgHWEL`$1Jy9AS6=tq179@WTUNVqe#( zQ(}5QT)T4GL$hPEdU1qrDzy&xYB*qYx-H_X?`kUIL*9VW^t8IOG4|Eo52weI>NzVy z)^?T#`(8xJg6u*zPcW|(VCnK=MxB4j>n1IhgAA!o|FJI&jf7W8dvTp>j;uBB?2$HS zH8-w|vp7ZkZe6JPl-4E_tUR7X6{hO*hl|P+G=i(2>arLS!}YB!u!L>2VT`NhnV_r_54oTq<4>ohX$&y zPu9{Ca%QrIc;u;@1AM}`?C&-3vU<7EpSar1eho#3lx{A@qZyl&c>8bdqZJz*q`l#> zN6yw#q?c{?Ew!@tku7}Rt5Ec3Q7uDO@z^gRr}ikzzh^DKrrR>iEl<61aB5rUE!4U` zH}6D~U)M z)TWo)B++V^9TH-MnCc<9`rccYl|dJ!V8ZDPrO@|$9UDlU*>nwfeyxOAI4N%Kfm@kl ztix@kn5g*+@=G?dW*cL|xR6N!6;-u5?t_YXws}p@r}l21VZT)@pUW;!_{G*W!0=$s zBw5F~HKn-EW((Ylp9ihQ`A(NhIy6mI`NGEU1$sw>zbi(iaF+@xF1hQExI}S~4Ehb3 z&ZHxbNFAC}?G-g2OT%E=h`Q&)!^Q-eaL;xp!=HcG!L7F6I(&?QjBE{C z?$$m|U9bTi$AS(4smi6eb|&PR!9zxUzfV!^-721iuga+VNhCjnQ0ELR9Tzac-mLoi z+t(jIK8rmCx*DQy*!Z|r{|+YT7rg&{qlSZW+EbmK>LK)Q;}9y(dLOanuzaVi#`^Zt z=^jv<;&OK+$(C?`RaD7YsacF!lvMcjehJ z5c>hskd8dxi!<~3zPrg5 z@E}8&vOudz%CFCm6M0u;W^-)kHJhRN-gD7FMr274R3vRnt>)v}`^~RmhzvlAp)~wM zYTd8?PuU-C1bY4mz}5fSZFLV^uM5DYtMCDa2L};Nz)L1YzIJbpob|hBGlgjcmCU$@ ztR=Y17#nc#OtC^3Y*8Y?U8``yx||;+^}}glcb<6y)O^CXICrn$3KUVYQ7x1rM$SU^$#mC@_JUD^UaRrxE;^2?@AJ1wFd^Z_AMpyd-7a#weULpe$_| z$4BI3byy2a7KzE7PXN3mAcP7>{Ob9i;vh_yA-HP({mNZZ|6TL5{0y$zVD%2u2+G|n zbF%ikYWt_-fO9?!)OLyWeeelpb34T1?)B~f4$h991bW6i1_9qtniLM+AaMf+jj49q zmEkYIhbPmAB(Q@Y&}1X_${-!Nfxce3x}cw;;e<5HU9v@RkX91MO2W1p55} zd3E*yeZu?87d8huNWS4ZyX)S1K+`eSO&FO2{tNv=PaU4o>@=B^GeVzi2;&5Q4l0$5 zd2$b;N!9@N>41N`ny|Vs2@0rufz-u7lOoCToy|pbSHAJx${~cWquYO4*81S)*1)Qy zZLm)UA&7;0_gjFvZp)t%q{o77;ra7}<+(*36$b#H2a2Qb;dIdvJ4YDqx*Zr-FnB3q z%Q(A>JQ|P-ZQn>`09`IwoM}O8=3byYz3|+9_Oq8EA+jYuaf5a1RMEyshinAOw(WiX z!`|b_d^Q_-Sw4BX-^I_;#fk)J)oP&Nb@YA4%=U-Bp#N@ESlXdMeO~Gp#s^eV3DPEq zx{e)ovG(fd1-{DdpNoI*%%mvMv%kJcD-gyhTC{LJX8Cz|>XR!V@gua%|0K#oD>wJV z8X>pQAqjU5T)?t_a1-QCH%XR014h@jPC%XThD!#|2~;Yg`7owY(wVYsg=cOrC{gkK zP>Y$h$#|kboBgUeY*BgTzoVV*p)z&SspezseX~w!*tmwvP#n?PWl6tU`sC_|`$yg7+k?^uJs(*>&2#39u z0jn_e(YW_p1!=+;w2|ohT-+5>g4O0#c*ka6yltfct1aSCQ@@An6J!G04XwTy2K(4w z%f|>x&XjH%hnW11yZ)@iT_1jBO2u=_CsKO>=H4k?Iof{DqF`K!Qdr*;bbz_N^wYJ# zQhrZi~)gT{NgAnbj_MuKW+-yvZt+GQ^cx~J)BMI#e7hZn78u`I*7f}_b}1E zt){YMvj2)6TpC(^vw;nFq%slYj=nrjvH8z7Iq82r&IcXhAh}&X7T;21?iwk|`L!L- zAOA=nIH4TdOm!0iXQrFwN)|9vWs1<`s0V2Kp8sta>*JL70eO`+x{eYTPuhMq=4Lqap-<68Bw(h>fie=37~P;g6y|cRU*^ z#r5Wg;uHu&joKeJUvW7atoLr!35Y2=32(Yb2KN6mpm68w+eEqf?^m8+T#v5Kz7L{y zjD>C~Mm~x!^*-$gS@rXO>M#c@Cv9xe-s*|t;lbjqr#GBb^{_%9n#X?#Y31uviTeG$ zCgh%E1N|oNh%QzHEO3^^JmC)Q=32scewHXyr@1eG&ZB+vcdF2MQKe5n3|;-5=Z4(G z(_`CWZN4Ai*qph(>f3@|stTIfPM_ctK^kBZ629)?#(-~XqEjx7 zW3b#HkVnUjpeBJ+y$r-z^vg&Tf&T9hl&}Nl-!fo;ZG9{5AORN)KEJuem8^-xM1v9I ze>@-eT`*bJSw^hsL&PHB1Z?LHCql>$Kxg(0jsd9u-*fbD;s|s-@HdxppQ<7;Iv{Mm z*o3wLaa%zAErl1*nFVwxVpu%-e{l&qoBuNTe}0khuO$CJU=kM36nT>LX5+^;_*@P$ N&^6V0f7Utje*pdMMX>+? diff --git a/tests/regression/cgalpngtest/import_stl-test-expected.png b/tests/regression/cgalpngtest/import_stl-test-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..08ee92b2216f45ca6b83efbc3b78c9fdabf45a71 GIT binary patch literal 4408 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 b)_4Nvj-i9Cl$7|t)Bu)d*DjQvL&f|Ln>@YO literal 10193 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 Z*WL0l8KzJEgZ{n(bnk%G#jBV{{ttppm#P2& literal 6225 zcmeI0Sy)ro7RS#yCM6&;g(5@MFGWDst8gU!jR;EmO&(P zD-;wV!78Alf`Xt>Ng1@&ir7#pb3kQ~Dabr`rR{y~eYy|#`^ZcFUvk#oYwx}GTI+X` zSWLTB3R(&Xf~>ONW8;b-7)T7E$iAYrtZyNRrl!5kE_XIM)OIMUwW*ZcaKkt6ZRC-} ziwRG-@Q-ra{J;??;T!~ z-0!;FOEx&_sCHHSYKqV6bkl2_8f|qUsf!r)&13s$kx#0!IScnJ%O|B`V@$y>vtUD% zYTtu?o<_o_(~ge?t6>GztithFeCZbNL5Y^vG4?@22~Uotol?h@KNmJtHE7XRT~+wQ zwhIKEFu7(SdBEq=Cm6<(-4R#PEzrx1!7gUlc*PPqCeBTB_-?T@3Ux*XZdIDljXOEw z@A2Vxo4+ar)8E`XGSxCihI#+adVkf`^UP;<@@&l9p($i5<#N}ieiy%*Z@SjX$$q0W z9n#Ym%A~e-OMK?d`5g)|*z5BV z8d6e`NkNS&4fj)rBXMx`AL$=hvYzRRN_>{JbtQv%9%@;>Pc#&GtFfEYprPrbyH1Gk zzYRNpktk{K_j@AV_r=!c=c-p)9eYn3lGQ~HjNn!SiN^iiCq~y0D;15VR!?2q6&+WR6lv={0*YD$&V+c-E9N$J2`c0nL_0$#5dzg8WbylBolRwp z*3{}~#)!P~ZG@>g>yke>8JafOU7osH(}(MUqcI*0y%6ih1q7yPTK=$ zzRi(Tn7xO}LdL#$cMfJRa=_8T!|(I9qP*u`+;xbSSTq&`mIdvNrOFh!=a z2rOW4ttE^@fgx2&HiHU)VNN8yN`QIvQL;*$nQZ4zfR`Ip=U|g*{}Lir4Ua(yop7{d z-C;dA$1@~#oYJBRsszTlZ!>5OdzeaKlwH~~WrmU)zDwkQV=Ax+{Q!SZ4eNzSi(0WV zIBtb0&`2i~LAAg*%T6xu^iO%x$H$jfGIT_id{rnEHb$Xo%j%XbWZKNL z*|JOvWeGj9R+ecQLPX20SXLr1$h1Tt36vID9rynv+yIIIj-#a16sU#x_fQTT>zIEI z$smxssz~XM3ymFq zX#d1M+9_b3sK1$K513yq8EiTEq)HHHSw8Z*%mZ6IF7ycT>dC>E+L!JwsO;@Aa^jjA-T4tm9zs5JT-RxjOe2&)_E-H zc-=WCpaiqxnTAp9RNI0PQ+)ZS(TiEBzzC@tTSv;UdmWoC6z0vMf+;KE2A|fR(vICf zvX~*xnQr7#Z}^reu(1HAo|x$D-o-u_NsMPi|C(rwv8pHVcy{kF&wkRK9(~_1vT$sI zWW3LZ8Wi1Ak!u$#Z`7B|{Fy3Zg*cTBUWDO{ow>8(gY~boQ|ZL$r&<2~Q;)vj>yp3I z@_7Ot*A}drT_+h{de$xQ#DnnpOjYnM#O$pv8u4&0BhD^%&XQYk2jGcgp)-_2R4iF! z^SB9pWi}l}kS<=SigSnM%S+qE`{$J!v6^T8&^Q-A;xDe3Hh!F2nTf^#J%j^Sj8p=QwC&N^w;XMbgW@Ye zwPiDlY`kCCFAmXmNH*&EQ3gr70g_zC)_^mPkYd+UM!(9JX!nWxI^~ij2dj6M0YPj$ zW-05ggHPqZ|-EyK(*aV@j!GGH&is`&qZ>BENC p?l13OkiAI)@_=`>|2vqG@baJgI=b&X^ECn=``t{N+g5&Ye*jr>>dycG diff --git a/tests/regression/dumptest/import_dxf-tests-expected.csg b/tests/regression/dumptest/import_dxf-tests-expected.csg index b6c6d0cd..2148ea74 100644 --- a/tests/regression/dumptest/import_dxf-tests-expected.csg +++ b/tests/regression/dumptest/import_dxf-tests-expected.csg @@ -1,28 +1,28 @@ group() { import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 110], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/polygons.dxf", layer = "", origin = [0, 110], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/polygons.dxf", layer = "", origin = [110, 110], scale = 0.5, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/polygons.dxf", layer = "", origin = [110, 110], scale = 0.5, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } - import(file = "../../dxf/multiple-layers.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/multiple-layers.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, -200], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 200], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/multiple-layers.dxf", layer = "noname", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/multiple-layers.dxf", layer = "noname", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/multiple-layers.dxf", layer = "Layer with a pretty long name including \\ \"special\" /'\\\\ characters", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/multiple-layers.dxf", layer = "Layer with a pretty long name including \\ \"special\" /'\\\\ characters", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 200], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { - import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + import(file = "../../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } } diff --git a/tests/regression/dumptest/import_stl-test-expected.csg b/tests/regression/dumptest/import_stl-test-expected.csg new file mode 100644 index 00000000..272786a8 --- /dev/null +++ b/tests/regression/dumptest/import_stl-test-expected.csg @@ -0,0 +1,3 @@ +group() { + import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); +} diff --git a/tests/regression/dumptest/import_stl-tests-expected.csg b/tests/regression/dumptest/import_stl-tests-expected.csg index 52d32325..ac4793c6 100644 --- a/tests/regression/dumptest/import_stl-tests-expected.csg +++ b/tests/regression/dumptest/import_stl-tests-expected.csg @@ -1,5 +1,4 @@ group() { - import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } diff --git a/tests/regression/dumptest/rotate_extrude_dxf-tests-expected.csg b/tests/regression/dumptest/rotate_extrude_dxf-tests-expected.csg index 8e9963c0..63c60ebe 100644 --- a/tests/regression/dumptest/rotate_extrude_dxf-tests-expected.csg +++ b/tests/regression/dumptest/rotate_extrude_dxf-tests-expected.csg @@ -1,3 +1,3 @@ group() { - rotate_extrude(file = "../../dxf/open-polyline.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); + rotate_extrude(file = "../../../dxf/open-polyline.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } diff --git a/tests/regression/dumptest/surface-png-image-tests-expected.csg b/tests/regression/dumptest/surface-png-image-tests-expected.csg index f45cbfb4..738d2636 100644 --- a/tests/regression/dumptest/surface-png-image-tests-expected.csg +++ b/tests/regression/dumptest/surface-png-image-tests-expected.csg @@ -1,3 +1,3 @@ group() { - surface(file = "../../image/black-white-gradient.png", center = false, invert = false); + surface(file = "../../../image/black-white-gradient.png", center = false, invert = false); } diff --git a/tests/regression/dumptest/surface-png-image2-tests-expected.csg b/tests/regression/dumptest/surface-png-image2-tests-expected.csg index f58d8b0b..2f310dda 100644 --- a/tests/regression/dumptest/surface-png-image2-tests-expected.csg +++ b/tests/regression/dumptest/surface-png-image2-tests-expected.csg @@ -1,5 +1,5 @@ group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0.2, 0], [0, 0, 0, 1]]) { - surface(file = "../../image/smiley.png", center = false, invert = false); + surface(file = "../../../image/smiley.png", center = false, invert = false); } } diff --git a/tests/regression/dumptest/surface-png-image3-tests-expected.csg b/tests/regression/dumptest/surface-png-image3-tests-expected.csg index ccf80c61..db2c955b 100644 --- a/tests/regression/dumptest/surface-png-image3-tests-expected.csg +++ b/tests/regression/dumptest/surface-png-image3-tests-expected.csg @@ -1,5 +1,5 @@ group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0.2, 0], [0, 0, 0, 1]]) { - surface(file = "../../image/smiley.png", center = false, invert = true); + surface(file = "../../../image/smiley.png", center = false, invert = true); } } diff --git a/tests/regression/opencsgtest/cut_view-expected.png b/tests/regression/opencsgtest/cut_view-expected.png index b212b1230d13cdd5c96c5688ae2101a066f73254..d2df9a4785f090a51e439c0a31ba6ce4fa77b3ff 100644 GIT binary patch literal 10382 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 SIQX3*?5w_-UZpM}>VE-F2Xt8g literal 10266 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 diff --git a/tests/regression/opencsgtest/null-polygons-expected.png b/tests/regression/opencsgtest/null-polygons-expected.png index 7f81b77453576eaf642c8212200a429477692219..ab8a215b16e1ee2a83a5983031dee444deb68625 100644 GIT binary patch literal 7150 zcmeHL`#+R<^#9D`!3@eoE=6l(q+Bws!iHvAYE5D)x#ZT!Mi-2&h%ECAwYIC4l88~H ziyfvd5i*akR#(+xa+^sPg&FroCi8qB`@{D?_tynmw(&j;}Al1$P`A=O$4m$O5CeY zVK6{0eim`D0U2yEsfflQ5jZdqz`F)PMf=`e^u`Y$ur=oN*~tKlW9t4Qktw(`b6U+S zGjEysn3;b~^Lb`I1OK1W!F1ieUcV=*=`w!(s@Y4}R|%(Y%o67{_&>f}z2m@N-;Y#{ zH)>s2lCiy(%nMbA(ek?df^SVSRqxXG4YeK{80@VC0xe|s=Dwjz?ACP4EgRg~Fo6)4 zYE)kTt|e`p^5xDJsRzEWG*zC0nU~QL|LOOJqDVx<{eyPwjBbi$gS#O|&pD6*ObM|P z-3uo+A`vIiatLDo6sA;pRcA>pSDUS9v!{TW1!h+oIxz6zV%6~mo1hI|?CS^!Bq@ez z!I;D4_z|zP_}FvHg&quGyFF-TNiDYHmLFeVqfBh-A-#ow#4QuA(gc`g`Ey;bG#^HW zel8578rf`x1pFdfb-W?yhn7Xt6mTp9l}l`@Uyfz5Ej(|mqDrx4N3KQ=te$c_d19kH ztSr`sKoDLmnb4uqGI&(un>Mj~T?uq(aIm%R<&lEsh72Mx-90z-{T8SYl>cj|=(3>Q zsHA=hKN7uyKsbLZ|G+LP&1$3a9xc%0qdQam8}Vkvo!#8AF(p!zIXAr&G`AUM2!Q9iDXrrM|!OHauRGnFCuSG`q!E;hSwaP*H)W z#^nBmDfei`HEyx77jf$}CnUGsSkmU-gxay{JF_UeSx@|_peC4W1Tg1!nRMm!kmv}% zi}afz{@tpUXLjV#s3Pt2{weP-VPh|3&TE8PoKNZXGqaM6db-n3>^u0GTc=)WVhXIw zo#C?Q6z|KAdUfxex-w#BisPGRqnA^FWB9KaHA|XOJhmZRVpd@#-{*y!?E1&7!(U&v z>0LiekC4ziCGEQUWRS6)d&pcD=Ev!bp77=(E2>WvtA8_SGwf%n$e*tJDlHqlLV{DO zqa>JYL?vvGan|Me;$BM_=IoJn?}kLj64s2~7T3H`3@axL)X}YPoAHtiEj?TN4Dln- zBxk9)tL`7W(^|?+c7UY*jYBqgmA9rH4l<<|rep z$x1C7dLA@7&L(V9s-DU>L3q%!^^ba{Jzm3>(Bl$9t#2T}xvs*ciBWddM^CKKHQQyh z75DS=g92(`H1~a}B=+%(B*UYBYgX9dt8!e0K7vwp*u(~Q#F@Z^5_?#SIr^|T1xqGj zm(Y6r!@DKxqAK#>FSF}j_ZvgY@XAt+)9HS&3GwE3njbm@;qLl9MI-Q8F204J@x+dd z2l(pmVPzA;M)i-#ta602A;ye5_1bA*lJ19TG+p8$fEf2%NS77q%V}P^(`?7xGHlVn zY+?NnMe9sxk|zBDFs|FkiskT)_Zf9tlZKV7^@_%BP0l1eByr5qH& zL3Q-dcYV`5CR@T4^S(s(dtL2;#ST>vj)t~Am$0CQ!!sAXfq=w=F_$F-P=}0sB2vo~U z=~d6ve`*ZX+Fw>lY-muaa8&;*ixI+_{Y~*te8Co${j%M47YzCQn zJvmn*B_g}WLw~4$Je~u)#f-yk#Q~qiBN5UsB+5`dowNGl(koZ}!$%Joxe@BD{ih}- z)EY9lPijU2Vqyww2Hxku+WCVdw)urjzeTxDe^{$WRrngi%f7&5Y2b2(bR0T-%_~hA zb_}X^8uJO|CEdO0wXOJ2IBn{UKI3ds08SuI(BW4`EQkf1+~4kv;U)Rre73D>CM}!- z2G7+#mJq*vF5_Yq_SnF){CeA!+pI`1qhZW{Jc4HkVm4~HcHEkYmD5IDklTj^u@G!X zd`dUodKoSRhG&q>f62LpAV}~XbYShTDHr!YLiN!Z^EfI2TBrWX)i4pd`2%`8l|rKv z?yb`$=puCnS|MY1P<@7Y$7#HC3tSP`+=46icejA zR>8M-992!b<&_LnfPQ9DKy3Hh`2D;n0`2PWyjP8PxMMet^MF`%r#x;E&l!|1Z$dZa zCB5x-{hkD)Cp4P{oYkW%)Jn|=y}LK*^yDW->GB>nGQjZ5bpv&`@o3ohp%p3nGM%S* z=&MIW4xUS|?ems8suj8so*Egc;n^#L6m6^lNrmMP+V;X9brPLGX;u@uHzPTfUTX2)q=$?En9f;xI6q0x!6{r7YN#X5WA`g75vuOqFr|ZhNROP5Bk+% ze@!&QjN9>ejwV8iJgahjq-7H9Vf$paWHvl}FEke;7xnio5%!bVTF4SFy{C)AhV5uF zmCPDqa}Er=uop7H)2&(T($PJKc}YW@sIYovm2NU5t~2t<^^^|ThpqnDZANf&*`ni` zJ*GOq>+Tg5cz{21j!<|myZ{G^4)S&QKk-U5U%*|T2?AxG84wH3X+i%2x%L*MNGX_8Oa)rNzh(Hh0iN13~m_5M?ghA?476lccvBsSVcm zf6)zkIK{FgA-@CAL5@jXdI)8!P6h2dc-e>@k6LKO&i z`b9elXK-!klHPgvU1ix}1^v(ve-uU&-QS-h+8Q}qXms^{wQR^YjE|j_MYoKoWY-|6 zw^<5Png>NudB(Ys*KwJ>LwtD%2$`tu4b@LvK_L~k4v(e|bV%f%ntDZ{pGbhbdsr>(uVxxS`T>yU^WXk9*#zX2S$!x`6Q>+3*!1t-E zAd(X;wpnQ4TmMcF^on|gAkksCp30D(Wc1B#wXd3DxfudhWN$Z2bY1LhuhAuoR(YkV z1ft&dO-HeW0Z97xOma5hDd6W`Y2JH^raS2I0ie$5LkEdWgrA@0CHR(QqjGxXP5>9j zoCLgP$cPCAV=+Ie&*dhVI7vFQOf3O(>NNly#;;5SHH6YFc>*llR~?<}BPhZ@&^JtB zYlpWSh6D+qvDkDmYRrP-T{7|Oj%j2 ztkOt^oFg8G;!6yvSTijT&mSWsim|&FOuS+(#MCx^=oM9V=%cqLWc@I)&PMn`ZR41L zyF&qw$|t|#gTe@6w1UA_@YmyPeWo?R2qxMt{*+7+PD#F3av;fpL~jIbhYPU}pYpM# zLIGA^S@_>OM9_FR$BitWHA~nDTz?*0L4X4EbF-v!9@=5Hb_al+bBN^XJoJVxoPbqx zQ#HxTKuZR~2qJJb^6pn^S>V`~0`{1d;f(5um$0wy`-kK3cYGc?9B~oXY(I{=I;_v& z@V^@LPdy5QB0zv=chHGNI5Z@KJDGm?P_zUuy7vc{(Qw!VL376-jee%Isb6x fQ_%lMo}A{c-{R}GExpec;6LUjACK}M*=hd+Q?PiS literal 6225 zcmeI0Sy)ro7RS#yCM6&;g(5@MFGWDst8gU!jR;EmO&(P zD-;wV!78Alf`Xt>Ng1@&ir7#pb3kQ~Dabr`rR{y~eYy|#`^ZcFUvk#oYwx}GTI+X` zSWLTB3R(&Xf~>ONW8;b-7)T7E$iAYrtZyNRrl!5kE_XIM)OIMUwW*ZcaKkt6ZRC-} ziwRG-@Q-ra{J;??;T!~ z-0!;FOEx&_sCHHSYKqV6bkl2_8f|qUsf!r)&13s$kx#0!IScnJ%O|B`V@$y>vtUD% zYTtu?o<_o_(~ge?t6>GztithFeCZbNL5Y^vG4?@22~Uotol?h@KNmJtHE7XRT~+wQ zwhIKEFu7(SdBEq=Cm6<(-4R#PEzrx1!7gUlc*PPqCeBTB_-?T@3Ux*XZdIDljXOEw z@A2Vxo4+ar)8E`XGSxCihI#+adVkf`^UP;<@@&l9p($i5<#N}ieiy%*Z@SjX$$q0W z9n#Ym%A~e-OMK?d`5g)|*z5BV z8d6e`NkNS&4fj)rBXMx`AL$=hvYzRRN_>{JbtQv%9%@;>Pc#&GtFfEYprPrbyH1Gk zzYRNpktk{K_j@AV_r=!c=c-p)9eYn3lGQ~HjNn!SiN^iiCq~y0D;15VR!?2q6&+WR6lv={0*YD$&V+c-E9N$J2`c0nL_0$#5dzg8WbylBolRwp z*3{}~#)!P~ZG@>g>yke>8JafOU7osH(}(MUqcI*0y%6ih1q7yPTK=$ zzRi(Tn7xO}LdL#$cMfJRa=_8T!|(I9qP*u`+;xbSSTq&`mIdvNrOFh!=a z2rOW4ttE^@fgx2&HiHU)VNN8yN`QIvQL;*$nQZ4zfR`Ip=U|g*{}Lir4Ua(yop7{d z-C;dA$1@~#oYJBRsszTlZ!>5OdzeaKlwH~~WrmU)zDwkQV=Ax+{Q!SZ4eNzSi(0WV zIBtb0&`2i~LAAg*%T6xu^iO%x$H$jfGIT_id{rnEHb$Xo%j%XbWZKNL z*|JOvWeGj9R+ecQLPX20SXLr1$h1Tt36vID9rynv+yIIIj-#a16sU#x_fQTT>zIEI z$smxssz~XM3ymFq zX#d1M+9_b3sK1$K513yq8EiTEq)HHHSw8Z*%mZ6IF7ycT>dC>E+L!JwsO;@Aa^jjA-T4tm9zs5JT-RxjOe2&)_E-H zc-=WCpaiqxnTAp9RNI0PQ+)ZS(TiEBzzC@tTSv;UdmWoC6z0vMf+;KE2A|fR(vICf zvX~*xnQr7#Z}^reu(1HAo|x$D-o-u_NsMPi|C(rwv8pHVcy{kF&wkRK9(~_1vT$sI zWW3LZ8Wi1Ak!u$#Z`7B|{Fy3Zg*cTBUWDO{ow>8(gY~boQ|ZL$r&<2~Q;)vj>yp3I z@_7Ot*A}drT_+h{de$xQ#DnnpOjYnM#O$pv8u4&0BhD^%&XQYk2jGcgp)-_2R4iF! z^SB9pWi}l}kS<=SigSnM%S+qE`{$J!v6^T8&^Q-A;xDe3Hh!F2nTf^#J%j^Sj8p=QwC&N^w;XMbgW@Ye zwPiDlY`kCCFAmXmNH*&EQ3gr70g_zC)_^mPkYd+UM!(9JX!nWxI^~ij2dj6M0YPj$ zW-05ggHPqZ|-EyK(*aV@j!GGH&is`&qZ>BENC p?l13OkiAI)@_=`>|2vqG@baJgI=b&X^ECn=``t{N+g5&Ye*jr>>dycG diff --git a/tests/regression/throwntogethertest/cut_view-expected.png b/tests/regression/throwntogethertest/cut_view-expected.png index ea17570c794072e9ed5a6bbd90d4797507008a83..4fe6587c2d21eaa15ad949ac964b026e2ce3ebff 100644 GIT binary patch literal 7025 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 diff --git a/tests/regression/throwntogethertest/import_stl-test-expected.png b/tests/regression/throwntogethertest/import_stl-test-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..08ee92b2216f45ca6b83efbc3b78c9fdabf45a71 GIT binary patch literal 4408 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 diff --git a/tests/regression/throwntogethertest/null-polygons-expected.png b/tests/regression/throwntogethertest/null-polygons-expected.png index 7f81b77453576eaf642c8212200a429477692219..ab8a215b16e1ee2a83a5983031dee444deb68625 100644 GIT binary patch literal 7150 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 literal 6225 zcmeI0Sy)ro7RS#yCM6&;g(5@MFGWDst8gU!jR;EmO&(P zD-;wV!78Alf`Xt>Ng1@&ir7#pb3kQ~Dabr`rR{y~eYy|#`^ZcFUvk#oYwx}GTI+X` zSWLTB3R(&Xf~>ONW8;b-7)T7E$iAYrtZyNRrl!5kE_XIM)OIMUwW*ZcaKkt6ZRC-} ziwRG-@Q-ra{J;??;T!~ z-0!;FOEx&_sCHHSYKqV6bkl2_8f|qUsf!r)&13s$kx#0!IScnJ%O|B`V@$y>vtUD% zYTtu?o<_o_(~ge?t6>GztithFeCZbNL5Y^vG4?@22~Uotol?h@KNmJtHE7XRT~+wQ zwhIKEFu7(SdBEq=Cm6<(-4R#PEzrx1!7gUlc*PPqCeBTB_-?T@3Ux*XZdIDljXOEw z@A2Vxo4+ar)8E`XGSxCihI#+adVkf`^UP;<@@&l9p($i5<#N}ieiy%*Z@SjX$$q0W z9n#Ym%A~e-OMK?d`5g)|*z5BV z8d6e`NkNS&4fj)rBXMx`AL$=hvYzRRN_>{JbtQv%9%@;>Pc#&GtFfEYprPrbyH1Gk zzYRNpktk{K_j@AV_r=!c=c-p)9eYn3lGQ~HjNn!SiN^iiCq~y0D;15VR!?2q6&+WR6lv={0*YD$&V+c-E9N$J2`c0nL_0$#5dzg8WbylBolRwp z*3{}~#)!P~ZG@>g>yke>8JafOU7osH(}(MUqcI*0y%6ih1q7yPTK=$ zzRi(Tn7xO}LdL#$cMfJRa=_8T!|(I9qP*u`+;xbSSTq&`mIdvNrOFh!=a z2rOW4ttE^@fgx2&HiHU)VNN8yN`QIvQL;*$nQZ4zfR`Ip=U|g*{}Lir4Ua(yop7{d z-C;dA$1@~#oYJBRsszTlZ!>5OdzeaKlwH~~WrmU)zDwkQV=Ax+{Q!SZ4eNzSi(0WV zIBtb0&`2i~LAAg*%T6xu^iO%x$H$jfGIT_id{rnEHb$Xo%j%XbWZKNL z*|JOvWeGj9R+ecQLPX20SXLr1$h1Tt36vID9rynv+yIIIj-#a16sU#x_fQTT>zIEI z$smxssz~XM3ymFq zX#d1M+9_b3sK1$K513yq8EiTEq)HHHSw8Z*%mZ6IF7ycT>dC>E+L!JwsO;@Aa^jjA-T4tm9zs5JT-RxjOe2&)_E-H zc-=WCpaiqxnTAp9RNI0PQ+)ZS(TiEBzzC@tTSv;UdmWoC6z0vMf+;KE2A|fR(vICf zvX~*xnQr7#Z}^reu(1HAo|x$D-o-u_NsMPi|C(rwv8pHVcy{kF&wkRK9(~_1vT$sI zWW3LZ8Wi1Ak!u$#Z`7B|{Fy3Zg*cTBUWDO{ow>8(gY~boQ|ZL$r&<2~Q;)vj>yp3I z@_7Ot*A}drT_+h{de$xQ#DnnpOjYnM#O$pv8u4&0BhD^%&XQYk2jGcgp)-_2R4iF! z^SB9pWi}l}kS<=SigSnM%S+qE`{$J!v6^T8&^Q-A;xDe3Hh!F2nTf^#J%j^Sj8p=QwC&N^w;XMbgW@Ye zwPiDlY`kCCFAmXmNH*&EQ3gr70g_zC)_^mPkYd+UM!(9JX!nWxI^~ij2dj6M0YPj$ zW-05ggHPqZ|-EyK(*aV@j!GGH&is`&qZ>BENC p?l13OkiAI)@_=`>|2vqG@baJgI=b&X^ECn=``t{N+g5&Ye*jr>>dycG From b073521aa87b425111f47f8d11bb29adac0e7625 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 12:06:59 -0400 Subject: [PATCH 15/37] Silence fallback lookup warnings --- src/primitives.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/primitives.cc b/src/primitives.cc index 73b7137e..33e59109 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -243,7 +243,7 @@ AbstractNode *PrimitiveModule::instantiate(const Context *ctx, const ModuleInsta node->faces = c.lookup_variable("faces"); if (node->faces.type() == Value::UNDEFINED) { // backwards compatible - node->faces = c.lookup_variable("triangles"); + node->faces = c.lookup_variable("triangles", true); if (node->faces.type() != Value::UNDEFINED) { printDeprecation("DEPRECATED: polyhedron(triangles=[]) will be removed in future releases. Use polyhedron(faces=[]) instead."); } From e8407afc6d86f936ae26650341b27caa94abe177 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 12:38:06 -0400 Subject: [PATCH 16/37] #703 Don't try to export empty objects --- src/openscad.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/openscad.cc b/src/openscad.cc index 1b860030..bd113ac3 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -229,6 +229,10 @@ static bool checkAndExport(shared_ptr root_geom, unsigned nd, PRINTB("Current top level object is not a %dD object.", nd); return false; } + if (root_geom->isEmpty()) { + PRINT("Current top level object is empty."); + return false; + } exportFileByName(root_geom.get(), format, filename, filename); return true; } From 207b56d0a4374176bbe405678c631200d29ee4a7 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 12:41:45 -0400 Subject: [PATCH 17/37] #703 Don't try to export empty objects --- src/mainwin.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mainwin.cc b/src/mainwin.cc index a2e9f4ad..6008a239 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -1797,6 +1797,12 @@ void MainWindow::actionExport(export_type_e, QString, QString) return; } + if (this->root_geom->isEmpty()) { + PRINT("Current top level object is empty."); + clearCurrentOutput(); + return; + } + const CGAL_Nef_polyhedron *N = dynamic_cast(this->root_geom.get()); if (N && !N->p3->is_simple()) { PRINT("Object isn't a valid 2-manifold! Modify your design. See http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/STL_Import_and_Export"); From 9a1074ebbc8c94eab567621111eba4a54839327c Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 12:42:24 -0400 Subject: [PATCH 18/37] #703 Ignore faces with <3 vertices while checking for convexity. Fixes crash --- src/cgalutils.cc | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cgalutils.cc b/src/cgalutils.cc index 5b642c58..32b712d9 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -132,7 +132,8 @@ namespace CGALUtils { else if (nef && nef->p3->is_simple()) nefworkaround::convert_to_Polyhedron(*nef->p3, poly); else throw 0; - if (ps && ps->is_convex() || !ps && is_weakly_convex(poly)) { + if ((ps && ps->is_convex()) || + (!ps && is_weakly_convex(poly))) { PRINTDB("Minkowski: child %d is convex and %s",i % (ps?"PolySet":"Nef") ); P[i].push_back(poly); } else { @@ -619,23 +620,26 @@ namespace CGALUtils { std::vector facet_planes; facet_planes.reserve(ps.polygons.size()); for (int i = 0; i < ps.polygons.size(); i++) { + Plane plane; size_t N = ps.polygons[i].size(); - assert(N > 0); - std::vector v(N); - for (int j = 0; j < N; j++) { - v[j] = vector_convert(ps.polygons[i][j]); - Edge edge(ps.polygons[i][j],ps.polygons[i][(j+1)%N]); - if (edge_to_facet_map.count(edge)) return false; // edge already exists: nonmanifold - edge_to_facet_map[edge] = i; + if (N >= 3) { + std::vector v(N); + for (int j = 0; j < N; j++) { + v[j] = vector_convert(ps.polygons[i][j]); + Edge edge(ps.polygons[i][j],ps.polygons[i][(j+1)%N]); + if (edge_to_facet_map.count(edge)) return false; // edge already exists: nonmanifold + edge_to_facet_map[edge] = i; + } + Vector normal; + CGAL::normal_vector_newell_3(v.begin(), v.end(), normal); + plane = Plane(v[0], normal); } - Vector normal; - CGAL::normal_vector_newell_3(v.begin(), v.end(), normal); - - facet_planes.push_back(Plane(v[0], normal)); + facet_planes.push_back(plane); } for (int i = 0; i < ps.polygons.size(); i++) { size_t N = ps.polygons[i].size(); + if (N < 3) continue; for (int j = 0; j < N; j++) { Edge other_edge(ps.polygons[i][(j+1)%N], ps.polygons[i][j]); if (edge_to_facet_map.count(other_edge) == 0) return false;// From 11952c4c0c93a0f2ae0ffc726c1cc63298f81c66 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 13:58:48 -0400 Subject: [PATCH 19/37] PRINT -> PRINTD --- src/cgalutils.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cgalutils.cc b/src/cgalutils.cc index 32b712d9..6102e79a 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -510,9 +510,9 @@ namespace CGALUtils { newN.p3.reset(new CGAL_Nef_polyhedron3(N.p3->intersection(xy_plane, CGAL_Nef_polyhedron3::PLANE_ONLY))); } catch (const CGAL::Failure_exception &e) { - PRINTB("CGALUtils::project during plane intersection: %s", e.what()); + PRINTDB("CGALUtils::project during plane intersection: %s", e.what()); try { - PRINT("Trying alternative intersection using very large thin box: "); + PRINTD("Trying alternative intersection using very large thin box: "); std::vector pts; // dont use z of 0. there are bugs in CGAL. double inf = 1e8; @@ -1042,7 +1042,7 @@ holding the polygon and it's holes. */ bool tessellate_3d_face_with_holes( std::vector &polygons, std::vector &triangles, CGAL_Plane_3 &plane ) { if (polygons.size()==1 && polygons[0].size()==3) { - PRINT("input polygon has 3 points. shortcut tessellation."); + PRINTD("input polygon has 3 points. shortcut tessellation."); CGAL_Polygon_3 t; t.push_back(polygons[0][2]); t.push_back(polygons[0][1]); @@ -1054,12 +1054,12 @@ bool tessellate_3d_face_with_holes( std::vector &polygons, std:: CDT cdt; std::map vertmap; - PRINT("finding good projection"); + PRINTD("finding good projection"); projection_t goodproj = find_good_projection( plane ); - PRINTB("plane %s",plane ); - PRINTB("proj: %i %i",goodproj.plane % goodproj.flip); - PRINT("Inserting points and edges into Constrained Delaunay Triangulation"); + PRINTDB("plane %s",plane ); + PRINTDB("proj: %i %i",goodproj.plane % goodproj.flip); + PRINTD("Inserting points and edges into Constrained Delaunay Triangulation"); std::vector< std::vector > polygons2d; for (size_t i=0;i vhandles; From 9d79d901048afbd21a8fb42302b5957cb7ba8a0d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 17 Aug 2014 15:07:02 -0400 Subject: [PATCH 20/37] #337 bugfix: We exported inner surfaces instead of outer ones --- src/cgalutils.cc | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/cgalutils.cc b/src/cgalutils.cc index 6102e79a..bec74712 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -1167,7 +1167,7 @@ bool createPolySetFromNefPolyhedron3(const CGAL_Nef_polyhedron3 &N, PolySet &ps) CGAL_Plane_3 plane( hfaceti->plane() ); std::vector polygons; // the 0-mark-volume is the 'empty' volume of space. skip it. - if (hfaceti->incident_volume()->mark() == 0) continue; + if (hfaceti->incident_volume()->mark()) continue; CGAL_Nef_polyhedron3::Halffacet_cycle_const_iterator cyclei; CGAL_forall_facet_cycles_of( cyclei, hfaceti ) { CGAL_Nef_polyhedron3::SHalfedge_around_facet_const_circulator c1(cyclei); @@ -1188,18 +1188,20 @@ bool createPolySetFromNefPolyhedron3(const CGAL_Nef_polyhedron3 &N, PolySet &ps) just output the resulting 3d triangles*/ std::vector triangles; bool err = tessellate_3d_face_with_holes( polygons, triangles, plane ); - if (!err) for (size_t i=0;i Date: Sun, 17 Aug 2014 16:02:00 -0400 Subject: [PATCH 21/37] Added correct expected image --- .../text_on_cube-expected.png | Bin 4051 -> 12750 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/regression/throwntogethertest/text_on_cube-expected.png b/tests/regression/throwntogethertest/text_on_cube-expected.png index 0412eaf0945811e0dba4bd6cb91a1382e0e90874..42bb7a34cfbfb44fdb141244f26cf613a84b2826 100644 GIT binary patch literal 12750 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 literal 4051 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 Date: Sun, 17 Aug 2014 16:06:25 -0400 Subject: [PATCH 22/37] #337 Added more export tests, added failing export tests, handle 2D examples, added empty-union test --- testdata/scad/misc/empty-union.scad | 4 + tests/CMakeLists.txt | 100 +++++++++++++++--- .../cgalpngtest/empty-union-expected.png | Bin 0 -> 4408 bytes .../advance_intersection-expected.png | Bin .../chopped_blocks-expected.png | Bin .../cut_view-expected.png | Bin .../demo_cut-expected.png | Bin .../difference-expected.png | Bin .../difference_cube-expected.png | Bin .../difference_sphere-expected.png | Bin .../monotonepngtest/empty-union-expected.png | Bin 0 -> 4408 bytes .../fan_view-expected.png | Bin .../fence-expected.png | Bin .../monotonepngtest/fractal-expected.png | Bin 0 -> 16497 bytes .../intersecting-expected.png | Bin .../intersection-expected.png | Bin .../iteration-expected.png | Bin .../logo_and_text-expected.png | Bin .../null-polygons-expected.png | Bin 0 -> 6885 bytes .../offset-expected.png | Bin .../polyhedron-expected.png | Bin .../polyhedron-nonplanar-tests-expected.png | Bin .../polyhedron-tests-expected.png | Bin 0 -> 9835 bytes .../rotate_extrude-tests-expected.png | Bin 0 -> 19672 bytes .../rounded_box-expected.png | Bin .../search-expected.png | Bin .../sphere-expected.png | Bin .../surface-expected.png | Bin .../text-expected.png | Bin .../text_on_cube-expected.png | Bin .../translate-expected.png | Bin .../translation-expected.png | Bin .../tripod-expected.png | Bin .../union-coincident-test-expected.png | Bin 0 -> 7158 bytes .../union-expected.png | Bin .../opencsgtest/empty-union-expected.png | Bin 0 -> 4408 bytes .../stlpngtest/fractal-expected.png | 0 .../empty-union-expected.png | Bin 0 -> 4408 bytes tests/shouldfail.py | 56 ++++++++++ 39 files changed, 146 insertions(+), 14 deletions(-) create mode 100644 testdata/scad/misc/empty-union.scad create mode 100644 tests/regression/cgalpngtest/empty-union-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/advance_intersection-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/chopped_blocks-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/cut_view-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/demo_cut-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/difference-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/difference_cube-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/difference_sphere-expected.png (100%) create mode 100644 tests/regression/monotonepngtest/empty-union-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/fan_view-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/fence-expected.png (100%) create mode 100644 tests/regression/monotonepngtest/fractal-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/intersecting-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/intersection-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/iteration-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/logo_and_text-expected.png (100%) create mode 100644 tests/regression/monotonepngtest/null-polygons-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/offset-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/polyhedron-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/polyhedron-nonplanar-tests-expected.png (100%) create mode 100644 tests/regression/monotonepngtest/polyhedron-tests-expected.png create mode 100644 tests/regression/monotonepngtest/rotate_extrude-tests-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/rounded_box-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/search-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/sphere-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/surface-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/text-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/text_on_cube-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/translate-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/translation-expected.png (100%) rename tests/regression/{stlpngtest => monotonepngtest}/tripod-expected.png (100%) create mode 100644 tests/regression/monotonepngtest/union-coincident-test-expected.png rename tests/regression/{stlpngtest => monotonepngtest}/union-expected.png (100%) create mode 100644 tests/regression/opencsgtest/empty-union-expected.png delete mode 100644 tests/regression/stlpngtest/fractal-expected.png create mode 100644 tests/regression/throwntogethertest/empty-union-expected.png create mode 100644 tests/shouldfail.py diff --git a/testdata/scad/misc/empty-union.scad b/testdata/scad/misc/empty-union.scad new file mode 100644 index 00000000..f16a9d46 --- /dev/null +++ b/testdata/scad/misc/empty-union.scad @@ -0,0 +1,4 @@ +union() { + polyhedron(); + polyhedron(); +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4e455db5..cdec9751 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -951,6 +951,52 @@ function(add_cmdline_test TESTCMD_BASENAME) endforeach() endfunction() +# +# Usage add_failing_test(testbasename RETVAL +# [EXE ] [SCRIPT