9#ifndef TRKVOLUMES_SIMPLEPOLYGONBREPVOLUMEBOUNDS_H
10#define TRKVOLUMES_SIMPLEPOLYGONBREPVOLUMEBOUNDS_H
81 bool forceInside =
false)
const override final;
83 const std::vector<std::pair<double, double> >&
xyVertices()
const;
94 MsgStream&
dump(MsgStream& sl)
const override;
97 std::ostream&
dump(std::ostream& sl)
const override;
103 static bool Xor(
bool x,
bool y) ;
105 bool Left(std::pair<double, double>
a, std::pair<double, double> b,
106 std::pair<double, double> c)
const;
108 bool Intersect(std::pair<double, double>
a, std::pair<double, double> b,
109 std::pair<double, double> c,
110 std::pair<double, double> d)
const;
113 const std::vector<std::pair<double, double> >& inputVertices)
const;
116 const std::vector<std::pair<double, double> >& inputVertices)
const;
120 const std::vector<std::pair<double, double> >& inputVertices)
const;
123 const std::vector<std::pair<double, double> >& Vertices)
const;
126 const std::vector<std::pair<double, double> >& Vertices);
128 std::vector<std::pair<double, double> >
m_xyVtx;
146inline const std::vector<std::pair<double, double> >&
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
Bounds for a rectangular, planar surface.
double m_halfZ
halflength in z
double m_halfX
halflength in x - to define enclosing rectangle
int m_ordering
-1 not set/ 1 anticlockwise / 0 clockwise
SimplePolygonBrepVolumeBounds * clone() const override final
Virtual constructor.
std::vector< std::pair< double, double > > TriangulatePolygon(const std::vector< std::pair< double, double > > &Vertices) const
static bool Xor(bool x, bool y)
double halflengthZ() const
This method returns the halflength in local z.
std::unique_ptr< Trk::PlaneSurface > sideSurf(const Amg::Transform3D &, unsigned int, unsigned int) const
const std::vector< std::pair< double, double > > & xyVertices() const
This method returns the set of xy generating vertices.
const Trk::Volume * envelope() const
This method returns the volume envelope.
virtual std::vector< std::unique_ptr< Trk::Surface > > decomposeToSurfaces(const Amg::Transform3D &transform) override final
Method to decompose the Bounds into Surfaces.
const Trk::Volume * combinedVolume() const
This method returns the transcript into combined volume.
SimplePolygonBrepVolumeBounds()
Default Constructor.
bool Diagonalie(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
bool Diagonal(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
bool Left(std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c) const
Trk::EightObjectsAccessor m_objectAccessor
There's only one single object Acessor for the moment has to be implemented if Cuboids are used more ...
virtual ~SimplePolygonBrepVolumeBounds()
Destructor.
const Trk::Volume * m_envelope
simplified envelope
const Trk::Volume * m_combinedVolume
triangulated polygon
std::vector< std::pair< double, double > > TriangulatePolygonCheck(const std::vector< std::pair< double, double > > &Vertices)
double m_halfY
halflength in y - to define enclosing rectangle
std::vector< std::pair< double, double > > m_xyVtx
generating xy vertices
SimplePolygonBrepVolumeBounds & operator=(const SimplePolygonBrepVolumeBounds &bobo)
Assignment operator.
ObjectAccessor boundarySurfaceAccessor(const Amg::Vector3D &gp, const Amg::Vector3D &dir, bool forceInside=false) const override final
Provide accessor for BoundarySurfaces.
bool InCone(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
bool Intersect(std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c, std::pair< double, double > d) const
Abstract Base Class for tracking surfaces.
VolumeBounds()
Default Constructor.
Base class for all volumes inside the tracking realm, it defines the interface for inherited Volume c...
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
std::array< ObjectAccessor::value_type, 8 > EightObjectsAccessor