virtual BoundingBox<T, D> get_axis_aligned_bounding_box(unsigned detail = 0) const = 0;
protected:
BoundingBox<T, D> bisect_axis_aligned_bounding_box(unsigned) const;
virtual BoundingBox<T, D> get_axis_aligned_bounding_box(unsigned detail = 0) const = 0;
protected:
BoundingBox<T, D> bisect_axis_aligned_bounding_box(unsigned) const;
bool check_intersection(const Ray<T, D> &) const;
virtual unsigned get_max_ray_intersections() const = 0;
bool check_intersection(const Ray<T, D> &) const;
virtual unsigned get_max_ray_intersections() const = 0;
virtual unsigned get_intersections(const Ray<T, D> &, SurfacePoint<T, D> *, unsigned) const = 0;
virtual unsigned get_intersections(const Ray<T, D> &, SurfacePoint<T, D> *, unsigned) const = 0;
std::list<CoverageCell> queue;
queue.push_back(CoverageCell());
CoverageCell &root = queue.front();
root.level = 0;
root.bounding_box = get_axis_aligned_bounding_box();
std::list<CoverageCell> queue;
queue.push_back(CoverageCell());
CoverageCell &root = queue.front();
root.level = 0;
root.bounding_box = get_axis_aligned_bounding_box();
if(root.bounding_box.is_space())
return root.bounding_box;
root.coverage = get_coverage(root.bounding_box);
if(root.bounding_box.is_space())
return root.bounding_box;
root.coverage = get_coverage(root.bounding_box);
LinAl::Vector<T, D> tight_min_pt = root.bounding_box.get_maximum_point();
LinAl::Vector<T, D> tight_max_pt = root.bounding_box.get_minimum_point();
LinAl::Vector<T, D> tight_min_pt = root.bounding_box.get_maximum_point();
LinAl::Vector<T, D> tight_max_pt = root.bounding_box.get_minimum_point();
const LinAl::Vector<T, D> &max_pt = cell.bounding_box.get_maximum_point();
LinAl::Vector<T, D> center = (min_pt+max_pt)/T(2);
const LinAl::Vector<T, D> &max_pt = cell.bounding_box.get_maximum_point();
LinAl::Vector<T, D> center = (min_pt+max_pt)/T(2);
child.coverage = get_coverage(child.bounding_box);
if(child.coverage==FULL_COVERAGE || (child.level==detail && child.coverage!=NO_COVERAGE))
{
child.coverage = get_coverage(child.bounding_box);
if(child.coverage==FULL_COVERAGE || (child.level==detail && child.coverage!=NO_COVERAGE))
{
for(unsigned j=0; j<D; ++j)
{
tight_min_pt[j] = std::min(tight_min_pt[j], child_min_pt[j]);
for(unsigned j=0; j<D; ++j)
{
tight_min_pt[j] = std::min(tight_min_pt[j], child_min_pt[j]);