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 /src/csgterm.cc | |
parent | 03a2da9f4a63d8e384c91b0daf41eecdb9079336 (diff) |
Fixed CSG regression reported by Ed Nisley; bounding boxes are now transformed correctly
Diffstat (limited to 'src/csgterm.cc')
-rw-r--r-- | src/csgterm.cc | 21 |
1 files changed, 7 insertions, 14 deletions
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); } } } |