src/container.cc
branchpyrit
changeset 24 d0d76e8a5203
child 28 ffe83ca074f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/container.cc	Wed Dec 05 18:54:23 2007 +0100
@@ -0,0 +1,31 @@
+#include "common.h"
+#include "container.h"
+
+void Container::addShape(Shape* aShape)
+{
+        shapes.push_back(aShape);
+        if (shapes.size() == 0) {
+                /* initialize bounding box */
+                bbox = aShape->get_bbox();
+        } else {
+                /* adjust bounding box */
+                BBox shapebb = aShape->get_bbox();
+                if (shapebb.L.x < bbox.L.x)  bbox.L.x = shapebb.L.x;
+                if (shapebb.L.y < bbox.L.y)  bbox.L.y = shapebb.L.y;
+                if (shapebb.L.z < bbox.L.z)  bbox.L.z = shapebb.L.z;
+                if (shapebb.H.x > bbox.H.x)  bbox.H.x = shapebb.H.x;
+                if (shapebb.H.y > bbox.H.y)  bbox.H.y = shapebb.H.y;
+                if (shapebb.H.z > bbox.H.z)  bbox.H.z = shapebb.H.z;
+        }
+};
+
+Shape *Container::nearest_intersection(const Shape *origin_shape, const Ray &ray,
+        Float &nearest_distance)
+{
+        Shape *nearest_shape = NULL;
+        ShapeList::iterator shape;
+        for (shape = shapes.begin(); shape != shapes.end(); shape++)
+                if (*shape != origin_shape && (*shape)->intersect(ray, nearest_distance))
+                        nearest_shape = *shape;
+        return nearest_shape;
+}