CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions | Private Attributes

FourPointPlaneBounds Class Reference

#include <FourPointPlaneBounds.h>

Inheritance diagram for FourPointPlaneBounds:
Bounds

List of all members.

Public Types

typedef LocalPoint::ScalarType Scalar

Public Member Functions

virtual Boundsclone () const
 FourPointPlaneBounds (const LocalPoint &a, const LocalPoint &b, const LocalPoint &c, const LocalPoint &d)
virtual bool inside (const Local3DPoint &lp, const LocalError &e, float scale) const
 Determine if a point is inside the bounds, taking error into account.
virtual bool inside (const Local3DPoint &lp) const
 Determine if the point is inside the bounds.
virtual float length () const
virtual float thickness () const
virtual float width () const
 ~FourPointPlaneBounds ()

Private Member Functions

double checkSide (int i, const Local2DPoint &lp) const
double checkSide (int i, Scalar x, Scalar y) const
const Local2DPointcorner (int i) const

Private Attributes

Local2DPoint corners_ [4]

Detailed Description

Definition at line 10 of file FourPointPlaneBounds.h.


Member Typedef Documentation

Definition at line 13 of file FourPointPlaneBounds.h.


Constructor & Destructor Documentation

FourPointPlaneBounds::FourPointPlaneBounds ( const LocalPoint a,
const LocalPoint b,
const LocalPoint c,
const LocalPoint d 
)

The corners are ASSUMED to come in cyclic order

Definition at line 8 of file FourPointPlaneBounds.cc.

References checkSide(), corner(), corners_, gather_cfg::cout, i, swap(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by clone().

                                                                                      {
    corners_[0] = Local2DPoint( a.x(), a.y());
    corners_[1] = Local2DPoint( b.x(), b.y());
    corners_[2] = Local2DPoint( c.x(), c.y());
    corners_[3] = Local2DPoint( d.x(), d.y());

// check for convexity
    for (int i=0; i<4; ++i) {
        if (checkSide( i, corner(i+2)) *  checkSide( i, corner(i+3)) < 0) { // not on same side
            throw GeometryError("FourPointPlaneBounds: coners not in order or not convex");
        }
    }

    double side = checkSide( 0, corners_[2]); // - for clockwise corners, + for counterclockwise
    if (side < 0) {
        std::cout << "FourPointPlaneBounds: Changing order of corners to counterclockwise" << std::endl;
        std::swap( corners_[1], corners_[3]);
    }
}
FourPointPlaneBounds::~FourPointPlaneBounds ( ) [inline]

Definition at line 19 of file FourPointPlaneBounds.h.

{}

Member Function Documentation

double FourPointPlaneBounds::checkSide ( int  i,
const Local2DPoint lp 
) const [private]

Definition at line 29 of file FourPointPlaneBounds.cc.

References PV2DBase< T, PVType, FrameType >::x(), and PV2DBase< T, PVType, FrameType >::y().

Referenced by FourPointPlaneBounds(), and inside().

                                                                           {
    return checkSide(i, lp.x(), lp.y());
}
double FourPointPlaneBounds::checkSide ( int  i,
Scalar  x,
Scalar  y 
) const [inline, private]

Definition at line 41 of file FourPointPlaneBounds.h.

References corner(), v, PV2DBase< T, PVType, FrameType >::x(), and PV2DBase< T, PVType, FrameType >::y().

                                                       {
        const Local2DPoint& cor( corner(i));
        Local2DVector v( corner(i+1) - cor);
        // Local2DVector normal( -v.y(), v.x());  //  90 deg rotated
        return -v.y() * (x-cor.x()) + v.x() * (y-cor.y()); // == normal.dot(LP(x,y)-cor))
    }
virtual Bounds* FourPointPlaneBounds::clone ( void  ) const [inline, virtual]

Implements Bounds.

Definition at line 32 of file FourPointPlaneBounds.h.

References FourPointPlaneBounds().

{return new FourPointPlaneBounds(*this);}
const Local2DPoint& FourPointPlaneBounds::corner ( int  i) const [inline, private]

Definition at line 38 of file FourPointPlaneBounds.h.

References corners_.

Referenced by checkSide(), and FourPointPlaneBounds().

{return corners_[i%4];}
virtual bool FourPointPlaneBounds::inside ( const Local3DPoint ,
const LocalError ,
float  scale 
) const [inline, virtual]

Determine if a point is inside the bounds, taking error into account.

Implements Bounds.

Definition at line 28 of file FourPointPlaneBounds.h.

References inside().

                                                                                          {
      return inside( lp);
    }
bool FourPointPlaneBounds::inside ( const Local3DPoint ) const [virtual]

Determine if the point is inside the bounds.

Implements Bounds.

Definition at line 33 of file FourPointPlaneBounds.cc.

References checkSide(), i, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by inside().

{
    for (int i=0; i<4; ++i) {
        if (checkSide(i,lp.x(),lp.y()) < 0) return false;
    }
    return true;
}
float FourPointPlaneBounds::length ( ) const [virtual]

"Lenght" of the bounded volume; refer to the concrete class documentation for the specific definition.

Implements Bounds.

Definition at line 41 of file FourPointPlaneBounds.cc.

{return 0;}
float FourPointPlaneBounds::thickness ( ) const [virtual]

"Thickness" of the bound around the surface; refer to the concrete class documentation for the specific definition.

Implements Bounds.

Definition at line 43 of file FourPointPlaneBounds.cc.

{return 0;}
float FourPointPlaneBounds::width ( ) const [virtual]

"width" of the bounds; refer to the concrete class documentation for the specific definition.

Implements Bounds.

Definition at line 42 of file FourPointPlaneBounds.cc.

{return 0;}

Member Data Documentation

Definition at line 36 of file FourPointPlaneBounds.h.

Referenced by corner(), and FourPointPlaneBounds().