diff options
author | Marius Kintel <marius@kintel.net> | 2011-12-23 13:33:40 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-12-23 13:33:40 (GMT) |
commit | 9fa18d53921ed7b2da4892d12958a6705f5a960b (patch) | |
tree | ac503d2ea722eb1ad7af6cd39d8b6eeec9056789 | |
parent | 03a2da9f4a63d8e384c91b0daf41eecdb9079336 (diff) |
Fixed CSG regression reported by Ed Nisley; bounding boxes are now transformed correctly
-rw-r--r-- | openscad.pro | 1 | ||||
-rw-r--r-- | src/csgterm.cc | 21 | ||||
-rw-r--r-- | src/linalg.h | 2 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/regression/opencsgtest/bbox-transform-bug-expected.png | bin | 5808 -> 5777 bytes | |||
-rw-r--r-- | tests/regression/opencsgtest/transform-tests-expected.png | bin | 17407 -> 15379 bytes | |||
-rw-r--r-- | tests/regression/throwntogethertest/bbox-transform-bug-expected.png | bin | 6400 -> 6285 bytes | |||
-rw-r--r-- | tests/regression/throwntogethertest/intersection_for-tests-expected.png | bin | 5947 -> 8797 bytes | |||
-rw-r--r-- | tests/regression/throwntogethertest/transform-tests-expected.png | bin | 14734 -> 15379 bytes |
9 files changed, 11 insertions, 14 deletions
diff --git a/openscad.pro b/openscad.pro index ac49807..50a419d 100644 --- a/openscad.pro +++ b/openscad.pro @@ -232,6 +232,7 @@ SOURCES += src/openscad.cc \ src/CSGTermEvaluator.cc \ src/Tree.cc \ src/mathc99.cc \ + src/linalg.cc \ src/PolySetCache.cc \ src/PolySetEvaluator.cc diff --git a/src/csgterm.cc b/src/csgterm.cc index 426adca..56fcbb5 100644 --- a/src/csgterm.cc +++ b/src/csgterm.cc @@ -115,25 +115,22 @@ CSGTerm::~CSGTerm() void CSGTerm::initBoundingBox() { if (this->type == TYPE_PRIMITIVE) { - BoundingBox polybox = this->polyset->getBoundingBox(); - this->bbox.extend(this->m * polybox.min()); - this->bbox.extend(this->m * polybox.max()); + this->bbox = this->m * this->polyset->getBoundingBox(); } else { const BoundingBox &leftbox = this->left->getBoundingBox(); const BoundingBox &rightbox = this->right->getBoundingBox(); switch (this->type) { case TYPE_UNION: - this->bbox.extend(this->m * leftbox.min().cwise().min(rightbox.min())); - this->bbox.extend(this->m * leftbox.max().cwise().max(rightbox.max())); + this->bbox = this->m * BoundingBox(leftbox.min().cwise().min(rightbox.min()), + leftbox.max().cwise().max(rightbox.max())); break; case TYPE_INTERSECTION: - this->bbox.extend(this->m * leftbox.min().cwise().max(rightbox.min())); - this->bbox.extend(this->m * leftbox.max().cwise().min(rightbox.max())); + this->bbox = this->m * BoundingBox(leftbox.min().cwise().max(rightbox.min()), + leftbox.max().cwise().min(rightbox.max())); break; case TYPE_DIFFERENCE: - this->bbox.extend(this->m * leftbox.min()); - this->bbox.extend(this->m * leftbox.max()); + this->bbox = this->m * leftbox; break; case TYPE_PRIMITIVE: break; @@ -330,11 +327,7 @@ BoundingBox CSGChain::getBoundingBox() const if (types[i] != CSGTerm::TYPE_DIFFERENCE) { BoundingBox psbox = polysets[i]->getBoundingBox(); if (!psbox.isNull()) { - Eigen::Transform3d t; - // Column-major vs. Row-major - t = matrices[i]; - bbox.extend(t * psbox.min()); - bbox.extend(t * psbox.max()); + bbox.extend(matrices[i] * psbox); } } } diff --git a/src/linalg.h b/src/linalg.h index a83949e..c1a14d1 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -13,4 +13,6 @@ using Eigen::Matrix3d; using Eigen::Matrix4d; using Eigen::Transform3d; +BoundingBox operator*(const Transform3d &m, const BoundingBox &box); + #endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 20a9ede..a8ab9b9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -244,6 +244,7 @@ add_definitions(-DOPENSCAD_TESTING) set(CORE_SOURCES tests-common.cc ../src/mathc99.cc + ../src/linalg.cc ../src/handle_dep.cc ../src/value.cc ../src/expr.cc diff --git a/tests/regression/opencsgtest/bbox-transform-bug-expected.png b/tests/regression/opencsgtest/bbox-transform-bug-expected.png Binary files differindex 060b921..52e4f2a 100644 --- a/tests/regression/opencsgtest/bbox-transform-bug-expected.png +++ b/tests/regression/opencsgtest/bbox-transform-bug-expected.png diff --git a/tests/regression/opencsgtest/transform-tests-expected.png b/tests/regression/opencsgtest/transform-tests-expected.png Binary files differindex dc43942..52f4330 100644 --- a/tests/regression/opencsgtest/transform-tests-expected.png +++ b/tests/regression/opencsgtest/transform-tests-expected.png diff --git a/tests/regression/throwntogethertest/bbox-transform-bug-expected.png b/tests/regression/throwntogethertest/bbox-transform-bug-expected.png Binary files differindex f65e09c..dd55c91 100644 --- a/tests/regression/throwntogethertest/bbox-transform-bug-expected.png +++ b/tests/regression/throwntogethertest/bbox-transform-bug-expected.png diff --git a/tests/regression/throwntogethertest/intersection_for-tests-expected.png b/tests/regression/throwntogethertest/intersection_for-tests-expected.png Binary files differindex c80a576..4721663 100644 --- a/tests/regression/throwntogethertest/intersection_for-tests-expected.png +++ b/tests/regression/throwntogethertest/intersection_for-tests-expected.png diff --git a/tests/regression/throwntogethertest/transform-tests-expected.png b/tests/regression/throwntogethertest/transform-tests-expected.png Binary files differindex a120581..52f4330 100644 --- a/tests/regression/throwntogethertest/transform-tests-expected.png +++ b/tests/regression/throwntogethertest/transform-tests-expected.png |