38 explicit Extrusion(shared_ptr<ChildType> child,
double length):
BaseClass(child), length(length) {}
40 explicit Extrusion(
double length = 0.0): length(length) {}
44 std::string getTypeName()
const override;
54 bool contains(
const DVec& p)
const override;
63 Box fromChildCoords(
const typename ChildType::Box&
child_bbox)
const override;
81 bool canBeInside(
const DVec& p)
const {
return 0.0 <= p.lon() && p.lon() <= length; }
84 bool canIntersect(
const Box&
area)
const {
return !(
area.lower.lon() > length ||
area.upper.lon() < 0.0); }
91 static ChildVec childVec(
const DVec& p) {
return ChildVec(
p.tran(),
p.vert()); }
98 static ChildBox childBox(
const Box& r) {
return ChildBox(childVec(r.lower), childVec(r.upper)); }
106 static DVec parentVec(
const ChildVec& p,
double lon) {
return DVec(lon,
p.tran(),
p.vert()); }
113 Box parentBox(
const ChildBox& r)
const {
return Box(parentVec(r.lower, 0.0), parentVec(r.upper, length)); }
115 void addPointsAlongToSet(std::set<double>& points,
116 Primitive<3>::Direction direction,
118 double min_step_size)
const override;
120 void addLineSegmentsToSet(std::set<
typename GeometryObjectD<3>::LineSegment>& segments,
122 double min_step_size)
const override;