00001
00002
00003 #include "MagneticField/VolumeGeometry/interface/FourPointPlaneBounds.h"
00004 #include "DataFormats/GeometrySurface/interface/GeomExceptions.h"
00005 #include <algorithm>
00006 #include <iostream>
00007
00008 FourPointPlaneBounds::FourPointPlaneBounds( const LocalPoint& a, const LocalPoint& b,
00009 const LocalPoint& c, const LocalPoint& d) {
00010 corners_[0] = Local2DPoint( a.x(), a.y());
00011 corners_[1] = Local2DPoint( b.x(), b.y());
00012 corners_[2] = Local2DPoint( c.x(), c.y());
00013 corners_[3] = Local2DPoint( d.x(), d.y());
00014
00015
00016 for (int i=0; i<4; ++i) {
00017 if (checkSide( i, corner(i+2)) * checkSide( i, corner(i+3)) < 0) {
00018 throw GeometryError("FourPointPlaneBounds: coners not in order or not convex");
00019 }
00020 }
00021
00022 double side = checkSide( 0, corners_[2]);
00023 if (side < 0) {
00024 std::cout << "FourPointPlaneBounds: Changing order of corners to counterclockwise" << std::endl;
00025 std::swap( corners_[1], corners_[3]);
00026 }
00027 }
00028
00029 double FourPointPlaneBounds::checkSide( int i, const Local2DPoint& lp) const {
00030 return checkSide(i, lp.x(), lp.y());
00031 }
00032
00033 bool FourPointPlaneBounds::inside( const Local3DPoint& lp) const
00034 {
00035 for (int i=0; i<4; ++i) {
00036 if (checkSide(i,lp.x(),lp.y()) < 0) return false;
00037 }
00038 return true;
00039 }
00040
00041 float FourPointPlaneBounds::length() const {return 0;}
00042 float FourPointPlaneBounds::width() const {return 0;}
00043 float FourPointPlaneBounds::thickness() const {return 0;}