summaryrefslogtreecommitdiff
path: root/src/csgterm.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-12-23 13:33:40 (GMT)
committerMarius Kintel <marius@kintel.net>2011-12-23 13:33:40 (GMT)
commit9fa18d53921ed7b2da4892d12958a6705f5a960b (patch)
treeac503d2ea722eb1ad7af6cd39d8b6eeec9056789 /src/csgterm.cc
parent03a2da9f4a63d8e384c91b0daf41eecdb9079336 (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.cc21
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);
}
}
}
contact: Jan Huwald // Impressum