// SpaceXform.h #ifndef SpaceXform_H #define SpaceXform_H // Abstract interface for a class that transforms a SpacePoint // or SpacePointVector. // // Transformation may be invoked with xf.apply(spt) or xf(spt). // Inverse may be applied with xf.inverse()(spt) or xf.invert(spt). // In all cases the original value is unchanged and the transformed // value is returned. #include "spacegeom/SpacePoint.h" #include "spacegeom/SpacePointVector.h" class SpaceXform { public: // methods to be implemented in subclass // Return the inverse of this transformation. // The subclass manages its inverse--the inverse transformation // should be destroyed when and only when the original is destroyed. virtual const SpaceXform& inverse() const =0; // Transform a space point. virtual SpacePoint apply(const SpacePoint& spt) const =0; // Transform a space point vector. virtual SpacePointVector apply(const SpacePointVector& svec) const =0; public: // methods implemented here // destructor virtual ~SpaceXform(); // Transform a space point. SpacePoint operator()(const SpacePoint& spt) const { return apply(spt); } // Transform a space point vector. SpacePointVector operator()(const SpacePointVector& svec) const { return apply(svec); } // Transform a space point with inverse transformation. SpacePoint invert(const SpacePoint& spt) const { return inverse().apply(spt); } // Transform a space point vector with inverse transformation. SpacePoint invert(const SpacePointVector& svec) const { return inverse().apply(svec); } }; #endif