From 10e3676a017a00b58faf95a9a8a50ab002600fd3 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 5 Jan 2015 20:03:20 -0500 Subject: [PATCH 1/5] Added a test config 'Good' which includes all tests except Bugs --- tests/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1b23a552..f40bf4bf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -933,6 +933,11 @@ function(add_cmdline_test TESTCMD_BASENAME) set_test_config(Default ${TEST_FULLNAME}) endif() set_test_config(All ${TEST_FULLNAME}) + list(FIND FOUNDCONFIGS Bugs FOUND) + if (FOUND EQUAL -1) + set_test_config(Good ${TEST_FULLNAME}) + endif() + unset(FOUNDCONFIGS) get_test_config(${TEST_FULLNAME} FOUNDCONFIGS) set(CONFARG CONFIGURATIONS) From f3f343e101b7579f9ebe7ff8413ce5b013a3c28d Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Mon, 5 Jan 2015 23:05:09 +0100 Subject: [PATCH 2/5] Fix test case failures caused by camera changes. --- src/Camera.cc | 22 +++++++++++++--------- src/Camera.h | 10 +++++----- src/GLView.cc | 13 +++++++------ src/QGLView.cc | 2 +- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/Camera.cc b/src/Camera.cc index ccf02062..7e53d363 100644 --- a/src/Camera.cc +++ b/src/Camera.cc @@ -3,13 +3,13 @@ #include "printutils.h" Camera::Camera(enum CameraType camtype) : - type(camtype), projection(Camera::PERSPECTIVE), fov(45), viewall(false), zoom_value(60) + type(camtype), projection(Camera::PERSPECTIVE), fov(45), viewall(false), height(60) { PRINTD("Camera()"); if (this->type == Camera::GIMBAL) { object_trans << 0,0,0; object_rot << 35,0,25; - zoom_value = 500; + viewer_distance = 500; } else if (this->type == Camera::VECTOR) { center << 0,0,0; Eigen::Vector3d cameradir(1, 1, -0.5); @@ -26,7 +26,8 @@ void Camera::setup(std::vector params) type = Camera::GIMBAL; object_trans << params[0], params[1], params[2]; object_rot << params[3], params[4], params[5]; - zoom_value = params[6]; + viewer_distance = params[6]; + height = params[6]; } else if (params.size() == 6) { type = Camera::VECTOR; eye << params[0], params[1], params[2]; @@ -73,13 +74,13 @@ void Camera::viewAll(const BoundingBox &bbox, float scalefactor) switch (this->projection) { case Camera::ORTHOGONAL: - this->zoom_value = bbox.diagonal().norm(); + this->height = bbox.diagonal().norm(); break; case Camera::PERSPECTIVE: { double radius = bbox.diagonal().norm()/2; switch (this->type) { case Camera::GIMBAL: - this->zoom_value = radius / tan(this->fov*M_PI/360); + this->viewer_distance = radius / tan(this->fov*M_PI/360); break; case Camera::VECTOR: { Vector3d cameradir = (this->center - this->eye).normalized(); @@ -100,7 +101,8 @@ void Camera::viewAll(const BoundingBox &bbox, float scalefactor) void Camera::zoom(int delta) { - this->zoom_value *= pow(0.9, delta / 120.0); + this->viewer_distance *= pow(0.9, delta / 120.0); + this->height = this->viewer_distance; } void Camera::setProjection(ProjectionType type) @@ -110,14 +112,16 @@ void Camera::setProjection(ProjectionType type) void Camera::resetView() { + type = Camera::GIMBAL; object_rot << 35, 0, -25; object_trans << 0, 0, 0; - zoom_value = 140; + height = 140; + viewer_distance = 140; } double Camera::zoomValue() { - return zoom_value; + return this->projection == PERSPECTIVE ? viewer_distance : height; } std::string Camera::statusText() @@ -125,6 +129,6 @@ std::string Camera::statusText() boost::format fmt(_("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f")); fmt % object_trans.x() % object_trans.y() % object_trans.z() % object_rot.x() % object_rot.y() % object_rot.z() - % zoom_value; + % (this->projection == PERSPECTIVE ? viewer_distance : height); return fmt.str(); } diff --git a/src/Camera.h b/src/Camera.h index f736f902..ae9ffaac 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -30,9 +30,9 @@ public: void gimbalDefaultTranslate(); void setProjection(ProjectionType type); void zoom(int delta); + double zoomValue(); void resetView(); void viewAll(const BoundingBox &bbox, float scalefactor = 1.0f); - double zoomValue(); std::string statusText(); // Vectorcam @@ -59,8 +59,8 @@ public: unsigned int pixel_height; protected: - // This is the viewer-distance in perspective mode and in - // ortographic mode, this is defining the viewport height - // (in world-space) - double zoom_value; + // Perspective settings + double viewer_distance; + // Orthographic settings + double height; // world-space height of viewport }; diff --git a/src/GLView.cc b/src/GLView.cc index e79c5fb7..e76a10c3 100644 --- a/src/GLView.cc +++ b/src/GLView.cc @@ -92,21 +92,22 @@ void GLView::setupCamera() switch (this->cam.type) { case Camera::GIMBAL: { + double eyeY = 0.0; switch (this->cam.projection) { case Camera::PERSPECTIVE: { - double dist = cam.zoomValue(); - gluPerspective(cam.fov, aspectratio, 0.1 * dist, 100 * dist); + eyeY = cam.zoomValue(); + gluPerspective(cam.fov, aspectratio, 0.1 * eyeY, 100 * eyeY); break; } case Camera::ORTHOGONAL: { - double height = cam.zoomValue(); - glOrtho(-height/2*aspectratio, height*aspectratio/2, - -height/2, height/2, + eyeY = cam.zoomValue(); + glOrtho(-eyeY/2*aspectratio, eyeY*aspectratio/2, + -eyeY/2, eyeY/2, -far_far_away, +far_far_away); break; } } - gluLookAt(0.0, -cam.zoomValue(), 0.0, + gluLookAt(0.0, -eyeY, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); glMatrixMode(GL_MODELVIEW); diff --git a/src/QGLView.cc b/src/QGLView.cc index 43178989..25ca07a2 100644 --- a/src/QGLView.cc +++ b/src/QGLView.cc @@ -64,7 +64,6 @@ static bool running_under_wine = false; void QGLView::init() { - cam.type = Camera::GIMBAL; resetView(); this->mouse_drag_active = false; @@ -245,6 +244,7 @@ void QGLView::mouseMoveEvent(QMouseEvent *event) if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) { cam.zoom(-12.0 * dy); } else { + double mx = +(dx) * 3.0 * cam.zoomValue() / QWidget::width(); double mz = -(dy) * 3.0 * cam.zoomValue() / QWidget::height(); From 27f8370c7b870eae97189161a1d7c4907f82c6ba Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 5 Jan 2015 21:41:05 -0500 Subject: [PATCH 3/5] Export blank image on empty top-level objects, instead of no image --- src/openscad.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/openscad.cc b/src/openscad.cc index 1e8f56c1..ab7e3acf 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -457,10 +457,7 @@ int cmdline(const char *deps_output_file, const std::string &filename, Camera &c // echo or OpenCSG png -> don't necessarily need geometry evaluation } else { root_geom = geomevaluator.evaluateGeometry(*tree.root(), true); - if (!root_geom) { - PRINT("No top-level object found."); - return 1; - } + if (!root_geom) root_geom.reset(new CGAL_Nef_polyhedron()); if (renderer == Render::CGAL && root_geom->getDimension() == 3) { const CGAL_Nef_polyhedron *N = dynamic_cast(root_geom.get()); if (!N) { From 4d454367f965cb3a5e0160394ca1b5616e510be0 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 5 Jan 2015 21:41:58 -0500 Subject: [PATCH 4/5] Run fixed bug test cases as part of the normal regression tests --- .../scad/{bugs => 3D/issues}/issue1004.scad | 0 .../scad/{bugs => 3D/issues}/issue1005.scad | 0 .../scad/{bugs => 3D/issues}/issue1061.scad | 0 .../scad/{bugs => 3D/issues}/issue1069.scad | 0 .../scad/{bugs => 3D/issues}/issue835.scad | 0 .../scad/{bugs => 3D/issues}/issue911.scad | 0 .../scad/{bugs => 3D/issues}/issue913.scad | 0 .../scad/{bugs => 3D/issues}/issue964.scad | 0 .../scad/{bugs => 3D/issues}/issue964b.scad | 0 .../scad/{bugs => 3D/issues}/issue990.scad | 0 tests/CMakeLists.txt | 18 ++---------------- 11 files changed, 2 insertions(+), 16 deletions(-) rename testdata/scad/{bugs => 3D/issues}/issue1004.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue1005.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue1061.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue1069.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue835.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue911.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue913.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue964.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue964b.scad (100%) rename testdata/scad/{bugs => 3D/issues}/issue990.scad (100%) diff --git a/testdata/scad/bugs/issue1004.scad b/testdata/scad/3D/issues/issue1004.scad similarity index 100% rename from testdata/scad/bugs/issue1004.scad rename to testdata/scad/3D/issues/issue1004.scad diff --git a/testdata/scad/bugs/issue1005.scad b/testdata/scad/3D/issues/issue1005.scad similarity index 100% rename from testdata/scad/bugs/issue1005.scad rename to testdata/scad/3D/issues/issue1005.scad diff --git a/testdata/scad/bugs/issue1061.scad b/testdata/scad/3D/issues/issue1061.scad similarity index 100% rename from testdata/scad/bugs/issue1061.scad rename to testdata/scad/3D/issues/issue1061.scad diff --git a/testdata/scad/bugs/issue1069.scad b/testdata/scad/3D/issues/issue1069.scad similarity index 100% rename from testdata/scad/bugs/issue1069.scad rename to testdata/scad/3D/issues/issue1069.scad diff --git a/testdata/scad/bugs/issue835.scad b/testdata/scad/3D/issues/issue835.scad similarity index 100% rename from testdata/scad/bugs/issue835.scad rename to testdata/scad/3D/issues/issue835.scad diff --git a/testdata/scad/bugs/issue911.scad b/testdata/scad/3D/issues/issue911.scad similarity index 100% rename from testdata/scad/bugs/issue911.scad rename to testdata/scad/3D/issues/issue911.scad diff --git a/testdata/scad/bugs/issue913.scad b/testdata/scad/3D/issues/issue913.scad similarity index 100% rename from testdata/scad/bugs/issue913.scad rename to testdata/scad/3D/issues/issue913.scad diff --git a/testdata/scad/bugs/issue964.scad b/testdata/scad/3D/issues/issue964.scad similarity index 100% rename from testdata/scad/bugs/issue964.scad rename to testdata/scad/3D/issues/issue964.scad diff --git a/testdata/scad/bugs/issue964b.scad b/testdata/scad/3D/issues/issue964b.scad similarity index 100% rename from testdata/scad/bugs/issue964b.scad rename to testdata/scad/3D/issues/issue964b.scad diff --git a/testdata/scad/bugs/issue990.scad b/testdata/scad/3D/issues/issue990.scad similarity index 100% rename from testdata/scad/bugs/issue990.scad rename to testdata/scad/3D/issues/issue990.scad diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f40bf4bf..a0bda3dd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1210,30 +1210,16 @@ list(APPEND BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue584.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue666.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue791.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue802.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue835.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue904.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue911.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue913.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue936.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue945.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964b.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue990.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1004.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1005.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1061.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1069.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1089.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1105.scad) list(APPEND EXPORT3D_TEST_FILES ${BUGS_FILES}) list(REMOVE_ITEM EXPORT3D_TEST_FILES - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964b.scad) -list(APPEND EXPORTCSG_TEST_FILES - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964b.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad) +#list(APPEND EXPORTCSG_TEST_FILES ) list(APPEND ALL_2D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad) list(APPEND OPENCSGTEST_FILES ${BUGS_FILES}) From 966add80a82a1456d1db7770d163efb82372579e Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 5 Jan 2015 21:43:17 -0500 Subject: [PATCH 5/5] Run fixed bug test cases as part of the normal regression tests --- src/Camera.cc | 22 +++++++++++------- src/Camera.h | 10 ++++---- src/GLView.cc | 13 ++++++----- src/QGLView.cc | 2 +- .../throwntogethertest/issue1004-expected.png | Bin 0 -> 9348 bytes .../throwntogethertest/issue1005-expected.png | Bin 0 -> 4408 bytes .../throwntogethertest/issue1061-expected.png | Bin 0 -> 11401 bytes .../throwntogethertest/issue1069-expected.png | Bin 0 -> 7349 bytes .../throwntogethertest/issue835-expected.png | Bin 0 -> 10134 bytes .../throwntogethertest/issue911-expected.png | Bin 0 -> 7775 bytes .../throwntogethertest/issue913-expected.png | Bin 0 -> 4857 bytes .../throwntogethertest/issue964-expected.png | Bin 0 -> 7631 bytes .../throwntogethertest/issue964b-expected.png | Bin 0 -> 9065 bytes .../throwntogethertest/issue990-expected.png | Bin 0 -> 5983 bytes 14 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 tests/regression/throwntogethertest/issue1004-expected.png create mode 100644 tests/regression/throwntogethertest/issue1005-expected.png create mode 100644 tests/regression/throwntogethertest/issue1061-expected.png create mode 100644 tests/regression/throwntogethertest/issue1069-expected.png create mode 100644 tests/regression/throwntogethertest/issue835-expected.png create mode 100644 tests/regression/throwntogethertest/issue911-expected.png create mode 100644 tests/regression/throwntogethertest/issue913-expected.png create mode 100644 tests/regression/throwntogethertest/issue964-expected.png create mode 100644 tests/regression/throwntogethertest/issue964b-expected.png create mode 100644 tests/regression/throwntogethertest/issue990-expected.png diff --git a/src/Camera.cc b/src/Camera.cc index ccf02062..7e53d363 100644 --- a/src/Camera.cc +++ b/src/Camera.cc @@ -3,13 +3,13 @@ #include "printutils.h" Camera::Camera(enum CameraType camtype) : - type(camtype), projection(Camera::PERSPECTIVE), fov(45), viewall(false), zoom_value(60) + type(camtype), projection(Camera::PERSPECTIVE), fov(45), viewall(false), height(60) { PRINTD("Camera()"); if (this->type == Camera::GIMBAL) { object_trans << 0,0,0; object_rot << 35,0,25; - zoom_value = 500; + viewer_distance = 500; } else if (this->type == Camera::VECTOR) { center << 0,0,0; Eigen::Vector3d cameradir(1, 1, -0.5); @@ -26,7 +26,8 @@ void Camera::setup(std::vector params) type = Camera::GIMBAL; object_trans << params[0], params[1], params[2]; object_rot << params[3], params[4], params[5]; - zoom_value = params[6]; + viewer_distance = params[6]; + height = params[6]; } else if (params.size() == 6) { type = Camera::VECTOR; eye << params[0], params[1], params[2]; @@ -73,13 +74,13 @@ void Camera::viewAll(const BoundingBox &bbox, float scalefactor) switch (this->projection) { case Camera::ORTHOGONAL: - this->zoom_value = bbox.diagonal().norm(); + this->height = bbox.diagonal().norm(); break; case Camera::PERSPECTIVE: { double radius = bbox.diagonal().norm()/2; switch (this->type) { case Camera::GIMBAL: - this->zoom_value = radius / tan(this->fov*M_PI/360); + this->viewer_distance = radius / tan(this->fov*M_PI/360); break; case Camera::VECTOR: { Vector3d cameradir = (this->center - this->eye).normalized(); @@ -100,7 +101,8 @@ void Camera::viewAll(const BoundingBox &bbox, float scalefactor) void Camera::zoom(int delta) { - this->zoom_value *= pow(0.9, delta / 120.0); + this->viewer_distance *= pow(0.9, delta / 120.0); + this->height = this->viewer_distance; } void Camera::setProjection(ProjectionType type) @@ -110,14 +112,16 @@ void Camera::setProjection(ProjectionType type) void Camera::resetView() { + type = Camera::GIMBAL; object_rot << 35, 0, -25; object_trans << 0, 0, 0; - zoom_value = 140; + height = 140; + viewer_distance = 140; } double Camera::zoomValue() { - return zoom_value; + return this->projection == PERSPECTIVE ? viewer_distance : height; } std::string Camera::statusText() @@ -125,6 +129,6 @@ std::string Camera::statusText() boost::format fmt(_("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f")); fmt % object_trans.x() % object_trans.y() % object_trans.z() % object_rot.x() % object_rot.y() % object_rot.z() - % zoom_value; + % (this->projection == PERSPECTIVE ? viewer_distance : height); return fmt.str(); } diff --git a/src/Camera.h b/src/Camera.h index f736f902..ae9ffaac 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -30,9 +30,9 @@ public: void gimbalDefaultTranslate(); void setProjection(ProjectionType type); void zoom(int delta); + double zoomValue(); void resetView(); void viewAll(const BoundingBox &bbox, float scalefactor = 1.0f); - double zoomValue(); std::string statusText(); // Vectorcam @@ -59,8 +59,8 @@ public: unsigned int pixel_height; protected: - // This is the viewer-distance in perspective mode and in - // ortographic mode, this is defining the viewport height - // (in world-space) - double zoom_value; + // Perspective settings + double viewer_distance; + // Orthographic settings + double height; // world-space height of viewport }; diff --git a/src/GLView.cc b/src/GLView.cc index e79c5fb7..e76a10c3 100644 --- a/src/GLView.cc +++ b/src/GLView.cc @@ -92,21 +92,22 @@ void GLView::setupCamera() switch (this->cam.type) { case Camera::GIMBAL: { + double eyeY = 0.0; switch (this->cam.projection) { case Camera::PERSPECTIVE: { - double dist = cam.zoomValue(); - gluPerspective(cam.fov, aspectratio, 0.1 * dist, 100 * dist); + eyeY = cam.zoomValue(); + gluPerspective(cam.fov, aspectratio, 0.1 * eyeY, 100 * eyeY); break; } case Camera::ORTHOGONAL: { - double height = cam.zoomValue(); - glOrtho(-height/2*aspectratio, height*aspectratio/2, - -height/2, height/2, + eyeY = cam.zoomValue(); + glOrtho(-eyeY/2*aspectratio, eyeY*aspectratio/2, + -eyeY/2, eyeY/2, -far_far_away, +far_far_away); break; } } - gluLookAt(0.0, -cam.zoomValue(), 0.0, + gluLookAt(0.0, -eyeY, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); glMatrixMode(GL_MODELVIEW); diff --git a/src/QGLView.cc b/src/QGLView.cc index 43178989..25ca07a2 100644 --- a/src/QGLView.cc +++ b/src/QGLView.cc @@ -64,7 +64,6 @@ static bool running_under_wine = false; void QGLView::init() { - cam.type = Camera::GIMBAL; resetView(); this->mouse_drag_active = false; @@ -245,6 +244,7 @@ void QGLView::mouseMoveEvent(QMouseEvent *event) if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) { cam.zoom(-12.0 * dy); } else { + double mx = +(dx) * 3.0 * cam.zoomValue() / QWidget::width(); double mz = -(dy) * 3.0 * cam.zoomValue() / QWidget::height(); diff --git a/tests/regression/throwntogethertest/issue1004-expected.png b/tests/regression/throwntogethertest/issue1004-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..46c136ab09176f0c431aa31786a1ccf780adc847 GIT binary patch literal 9348 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 J_jk~v{tqGIDNO(X literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/issue1069-expected.png b/tests/regression/throwntogethertest/issue1069-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..989385eeab098d42872e7f5bb7cc356639c5261c GIT binary patch literal 7349 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 literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/issue835-expected.png b/tests/regression/throwntogethertest/issue835-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..09d0a8c74e87ddf4e2af615c5117c38a44d6efe6 GIT binary patch literal 10134 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 CS3G6_ literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/issue911-expected.png b/tests/regression/throwntogethertest/issue911-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7aed480e7dcd3124ee8ac7cf0b3a0e018cd3a GIT binary patch literal 7775 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 literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/issue913-expected.png b/tests/regression/throwntogethertest/issue913-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f2427b72f21ac3d1d7a2b2e81950eec0f902f6fc GIT binary patch literal 4857 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 literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/issue964b-expected.png b/tests/regression/throwntogethertest/issue964b-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c611ecf26df46dd2dc0149101fcf35a847cd1a5c GIT binary patch literal 9065 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