inline ExtrudedShape<T, D>::ExtrudedShape(const Shape<T, D-1> &b, T l):
length(l)
{
- if(l<=0)
+ if(l<=T(0))
throw std::invalid_argument("ExtrudedShape::ExtrudedShape");
base = b.clone();
SurfacePoint<T, D-1> *base_points = 0;
if(points)
- /* Shamelessly reuse the provided storage. Align to the end of the array
- so processing can start from the first (nearest) point. */
+ /* Shamelessly reuse the provided storage. Align to the end of the
+ array so processing can start from the first (nearest) point. */
base_points = reinterpret_cast<SurfacePoint<T, D-1> *>(points+size)-size;
unsigned count = base->get_intersections(base_ray, base_points, size);
points[n].position = ray_start+ray_direction*x;
points[n].normal = compose(base_points[i].normal, T(0));
points[n].distance = x;
+ points[n].entry = base_points[i].entry;
}
++n;
points[n].normal = LinAl::Vector<T, D>();
points[n].normal[D-1] = i;
points[n].distance = x;
+ points[n].entry = (T(i)*ray_direction[D-1]<T(0));
}
++n;