otbGeoInterface.h 4.37 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
/*=========================================================================

  Program:   ORFEO Toolbox
  Language:  C++
  Date:      $Date$
  Version:   $Revision$


  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
  See OTBCopyright.txt for details.


     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef otb_GeoInterface_h
#define otb_GeoInterface_h


#include "itkPoint.h"


namespace otb
{

class ImageKeywordlist;


/**
 * @class This class is the abstract interface for actors which need
 * geo-referenced methods.
 *
 * Use multiple inheritance to provide geo-referenced interface to
 * specialized actors.
 *
 * Example: Derive otb::GlMyActor : public otb::GlActor, public
 * otb::GeoInterface {};
 *
 * By default, single-prevision methods are implemented as conversion
 * method from otb::GeoInterface::Point2f to
 * otb::GeoInterface::Point2d. Derived otb::GlActor classes must
 * implement double-prevision methods.
 */
class GeoInterface
{
public:
  /**
   * Double precision point-type.
   */
  typedef itk::Point< float, 2 > Point2f;

  /**
   * Single precision point-type.
   */
  typedef itk::Point< double, 2 > Point2d;

  /**
   */
  typedef itk::Vector< double, 2 > Spacing2d;

  /**
   * Transform given point from viewport coordinate-system to this
   * actor coordinate-system.
   *
   * By default this method return false. It should be implemented in
   * derived classes if needed.
   *
   * @param out The transformed point (in this actor coordinate-system).
   * @param in The given point (in viewport coordinate-system).
   * @param isPhysical Indicate physical coordates are desired.
   *
   * @return true if the operation has succeeded; false otherwise.
   */
  virtual bool TransformFromViewport( Point2d & out,
                                      const Point2d & in,
                                      bool isPhysical = true ) const;

  /**
   * Transform given point from viewport coordinate-system to this
   * actor coordinate-system.
   *
   * By default this method return false. It should be implemented in
   * derived classes if needed.
   *
   * @param out The transformed point (in this actor coordinate-system).
   * @param in The given point (in viewport coordinate-system).
   * @param isPhysical Indicate physical coordates are desired.
   *
   * @return true if the operation has succeeded; false otherwise.
   */
  virtual bool TransformFromViewport( Point2f & out,
                                      const Point2f & in,
                                      bool isPhysical = true ) const;

  /**
   * Transform given point from viewport coordinate-system to this
   * actor coordinate-system.
   *
   * By default this method return false. It should be implemented in
   * derived classes if needed.
   *
   * @param out The transformed point (in this actor coordinate-system).
   * @param in The given point (in viewport coordinate-system).
   * @param isPhysical Indicate physical coordates are desired.
   *
   * @return true if the operation has succeeded; false otherwise.
   */
  virtual bool TransformToViewport( Point2d & out,
                                    const Point2d & in,
                                    bool isPhysical = true ) const;

  /**
   * Transform given point from this actor coordinate-system to
   * viewport coordinate-system.
   *
   * By default this method return false. It should be implemented in
   * derived classes if needed.
   *
   * @param out The transformed point (in viewport coordinate-system).
   * @param in  The given point (in viewport coordinate-system).
   * @param isPhysical Indicate physical coordates are desired.
   *
   * @return true if the operation has succeeded; false otherwise.
   */
  virtual bool TransformToViewport( Point2f & out,
                                    const Point2f & in,
                                    bool isPhysical = true ) const;

  /**
   */
  virtual std::string GetWkt() const;

  /**
   */
  virtual bool HasKwl() const;

  /**
   */
  virtual bool GetKwl( ImageKeywordlist & ) const;


protected:
  GeoInterface();
  virtual ~GeoInterface();

private:

}; // End class GeoInterface


} // End namespace otb


#endif // otb_GeoInterface_h