From 5695d7f445b6b2feb2d9a8b8b04c0d4de6e1b998 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 7 Dec 2014 19:47:43 -0500 Subject: [PATCH] #1055 added testcase --- .../3D/features/scale-mirror2D-3D-tests.scad | 7 ++++ .../scale-mirror2D-3D-tests-expected.png | Bin 0 -> 7403 bytes .../scale-mirror2D-3D-tests-expected.csg | 36 ++++++++++++++++++ .../scale-mirror2D-3D-tests-expected.png | Bin 0 -> 7699 bytes .../scale-mirror2D-3D-tests-expected.png | Bin 0 -> 7716 bytes 5 files changed, 43 insertions(+) create mode 100644 testdata/scad/3D/features/scale-mirror2D-3D-tests.scad create mode 100644 tests/regression/cgalpngtest/scale-mirror2D-3D-tests-expected.png create mode 100644 tests/regression/dumptest/scale-mirror2D-3D-tests-expected.csg create mode 100644 tests/regression/opencsgtest/scale-mirror2D-3D-tests-expected.png create mode 100644 tests/regression/throwntogethertest/scale-mirror2D-3D-tests-expected.png diff --git a/testdata/scad/3D/features/scale-mirror2D-3D-tests.scad b/testdata/scad/3D/features/scale-mirror2D-3D-tests.scad new file mode 100644 index 00000000..bca2450f --- /dev/null +++ b/testdata/scad/3D/features/scale-mirror2D-3D-tests.scad @@ -0,0 +1,7 @@ +module obj2D() polygon([[-0.5,-0.5], [1,-0.5], [1,1], [-0.5, 0.5]]) +square([2,3], center=true); + +linear_extrude(1) scale([1, -1]) obj2D(); +translate([3,0,0]) linear_extrude(1) scale([-1, -0.5]) obj2D(); +translate([0,3,0]) linear_extrude(1) mirror() obj2D(); +translate([2,3,0]) linear_extrude(1) mirror([0,1]) obj2D(); diff --git a/tests/regression/cgalpngtest/scale-mirror2D-3D-tests-expected.png b/tests/regression/cgalpngtest/scale-mirror2D-3D-tests-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..5d85630a9a8777ed8340f33951b2e7aa393b9147 GIT binary patch literal 7403 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 literal 0 HcmV?d00001 diff --git a/tests/regression/dumptest/scale-mirror2D-3D-tests-expected.csg b/tests/regression/dumptest/scale-mirror2D-3D-tests-expected.csg new file mode 100644 index 00000000..2293a339 --- /dev/null +++ b/tests/regression/dumptest/scale-mirror2D-3D-tests-expected.csg @@ -0,0 +1,36 @@ +group() { + linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + multmatrix([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + polygon(points = [[-0.5, -0.5], [1, -0.5], [1, 1], [-0.5, 0.5]], paths = undef, convexity = 1); + } + } + } + multmatrix([[1, 0, 0, 3], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + multmatrix([[-1, 0, 0, 0], [0, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + polygon(points = [[-0.5, -0.5], [1, -0.5], [1, 1], [-0.5, 0.5]], paths = undef, convexity = 1); + } + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { + linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + polygon(points = [[-0.5, -0.5], [1, -0.5], [1, 1], [-0.5, 0.5]], paths = undef, convexity = 1); + } + } + } + } + multmatrix([[1, 0, 0, 2], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { + linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { + multmatrix([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + polygon(points = [[-0.5, -0.5], [1, -0.5], [1, 1], [-0.5, 0.5]], paths = undef, convexity = 1); + } + } + } + } +} diff --git a/tests/regression/opencsgtest/scale-mirror2D-3D-tests-expected.png b/tests/regression/opencsgtest/scale-mirror2D-3D-tests-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6521e4afc85dfde89cd86ea5dbfedb082a356ebc GIT binary patch literal 7699 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 KKU8{<81ru!pyFKs literal 0 HcmV?d00001 diff --git a/tests/regression/throwntogethertest/scale-mirror2D-3D-tests-expected.png b/tests/regression/throwntogethertest/scale-mirror2D-3D-tests-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..471748a7afb4cc9fc338abeb326d3f2af9312675 GIT binary patch literal 7716 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