summaryrefslogtreecommitdiffstats
path: root/BSPTree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'BSPTree.cpp')
-rw-r--r--BSPTree.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/BSPTree.cpp b/BSPTree.cpp
index 3254446..6da2531 100644
--- a/BSPTree.cpp
+++ b/BSPTree.cpp
@@ -54,11 +54,11 @@ void BSPTree::Plane::partition(const Triangle &t, std::list<Triangle> *front, st
BSPTree::BSPTree(const std::list<Triangle> &triangles) : frontTree(0), backTree(0) {
- if(triangles.empty())
- return;
-
const Triangle *planeT = findNearestTriangle(triangles, findCenter(triangles));
+ if(!planeT)
+ return;
+
plane = Plane(*planeT);
std::list<Triangle> front, back;
@@ -93,6 +93,26 @@ BSPTree::BSPTree(const std::list<Triangle> &triangles) : frontTree(0), backTree(
backTree = new BSPTree(back);
}
+BSPTree& BSPTree::operator=(const BSPTree &tree) {
+ if(frontTree) {
+ delete frontTree;
+ frontTree = 0;
+ }
+
+ if(backTree) {
+ delete backTree;
+ backTree = 0;
+ }
+
+ plane = tree.plane;
+ triangles = tree.triangles;
+
+ if(tree.frontTree)
+ frontTree = new BSPTree(*tree.frontTree);
+
+ if(tree.backTree)
+ backTree = new BSPTree(*tree.backTree);
+}
vmml::vec3f BSPTree::findCenter(const std::list<Triangle> &triangles) {
vmml::vec3f v;