1 #include <boost/variant.hpp> 14 struct Bbox2dVisitor :
public RuleParameterVisitor {
18 void operator()(
const ConstWeakLanelet& ll)
override {
24 void operator()(
const ConstWeakArea& ar)
override {
32 struct Bbox3dVisitor :
public RuleParameterVisitor {
33 void operator()(
const ConstPoint3d& p)
override {
bbox.extend(
boundingBox3d(p)); }
34 void operator()(
const ConstLineString3d& l)
override {
bbox.extend(
boundingBox3d(l)); }
35 void operator()(
const ConstPolygon3d& p)
override {
bbox.extend(
boundingBox3d(p)); }
36 void operator()(
const ConstWeakLanelet& ll)
override {
42 void operator()(
const ConstWeakArea& ar)
override {
51 struct DistanceVisitor :
public RuleParameterVisitor {
54 void operator()(
const ConstLineString3d& l)
override {
d = std::min(
d,
distance2d(l,
pdist)); }
55 void operator()(
const ConstPolygon3d& p)
override {
d = std::min(
d,
distance2d(p,
pdist)); }
56 void operator()(
const ConstWeakLanelet& ll)
override {
62 void operator()(
const ConstWeakArea& ar)
override {
69 double d{std::numeric_limits<double>::infinity()};
74 Bbox2dVisitor visitor;
80 Bbox3dVisitor visitor;
86 DistanceVisitor visitor(p);
Eigen::AlignedBox3d BoundingBox3d
Convenience type for an axis aligned bounding box in 3d.
IfAr< AreaT, BoundingBox2d > boundingBox2d(const AreaT &area)
calculates an up-right 2d bounding box
Optional< double > distance
Axis-Aligned bounding box in 2d.
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > BasicPoint2d
a simple 2d-point
A general rule or limitation for a lanelet (abstract base class)
BoundingBox2d to2D(const BoundingBox3d &primitive)
void applyVisitor(RuleParameterVisitor &visitor) const
applies a visitor to every parameter in the regulatory element
double distance2d(const RegulatoryElement ®Elem, const BasicPoint2d &p)
IfAr< AreaT, BoundingBox3d > boundingBox3d(const AreaT &area)
calculates 3d bounding box