Procházet zdrojové kódy

Correct how filterIntersections work, seems c++ don't like how thing were done.

Godzil před 4 roky
rodič
revize
8550d4068f
3 změnil soubory, kde provedl 6 přidání a 9 odebrání
  1. 1 1
      source/include/csg.h
  2. 1 5
      source/shapes/csg.cpp
  3. 4 3
      tests/csg_test.cpp

+ 1 - 1
source/include/csg.h

@@ -34,7 +34,7 @@ protected:
 
     bool intersectionAllowed(bool leftHit, bool inLeft, bool inRight);
 
-    Intersect filterIntersections(Intersect &xs);
+    void filterIntersections(Intersect &xs, Intersect &ret);
 
     void updateBoundingBox();
     BoundingBox getBounds();

+ 1 - 5
source/shapes/csg.cpp

@@ -101,13 +101,11 @@ bool CSG::intersectionAllowed(bool leftHit, bool inLeft, bool inRight)
     return false;
 }
 
-Intersect CSG::filterIntersections(Intersect &xs)
+void CSG::filterIntersections(Intersect &xs, Intersect &ret)
 {
     bool inl = false;
     bool inr = false;
 
-    Intersect ret = Intersect();
-
     int i;
 
     for(i = 0; i < xs.count(); i++)
@@ -128,8 +126,6 @@ Intersect CSG::filterIntersections(Intersect &xs)
             inr = !inr;
         }
     }
-
-    return ret;
 }
 
 void CSG::dumpMe(FILE *fp)

+ 4 - 3
tests/csg_test.cpp

@@ -31,8 +31,8 @@ public:
         return this->intersectionAllowed(leftHit, inLeft, inRight);
     };
 
-    Intersect doFilterIntersections(Intersect &xs) {
-        return this->filterIntersections(xs);
+    void doFilterIntersections(Intersect &xs, Intersect &ret) {
+        this->filterIntersections(xs, ret);
     }
 
     CSGTest(OperationType operation, Shape *left, Shape *right) : CSG(operation, left, right) {};
@@ -186,7 +186,8 @@ TEST(CSGTest, Filtering_a_list_of_intersections)
     for(i = 0; i < testCount; i++)
     {
         c.setOperation(testList[i]);
-        Intersect result = c.doFilterIntersections(xs);
+        Intersect result = Intersect();
+        c.doFilterIntersections(xs, result);
 
         ASSERT_EQ(result.count(), 2);
         ASSERT_EQ(result[0], xs[testResults[i][0]]);