00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkArrowSpatialObject_h
00018 #define __itkArrowSpatialObject_h
00019
00020 #if defined(_MSC_VER)
00021 #pragma warning ( disable : 4786 )
00022 #endif
00023
00024 #include "itkSpatialObject.h"
00025
00026 namespace itk
00027 {
00028
00039 template < unsigned int TDimension = 3 >
00040 class ITK_EXPORT ArrowSpatialObject
00041 :public SpatialObject< TDimension >
00042 {
00043
00044 public:
00045
00046 typedef ArrowSpatialObject Self;
00047 typedef SpatialObject< TDimension > Superclass;
00048 typedef SmartPointer < Self > Pointer;
00049 typedef SmartPointer < const Self > ConstPointer;
00050 typedef double ScalarType;
00051 typedef Vector<double,TDimension> VectorType;
00052 typedef Point<double,TDimension> PointType;
00053 typedef typename Superclass::TransformType TransformType;
00054 typedef typename TransformType::MatrixType MatrixType;
00055
00056
00058 itkNewMacro( Self );
00059
00061 itkTypeMacro( ArrowSpatialObject, SpatialObject );
00062
00063
00065 void SetPosition(const PointType & p)
00066 {
00067 m_Position = p;
00068 this->UpdateTransform();
00069 }
00071
00072 itkGetConstMacro(Position,PointType);
00073
00074 void SetPosition(float x, float y)
00075 {
00076 m_Position[0] = x;
00077 m_Position[1] = y;
00078 this->UpdateTransform();
00079 }
00080
00081 void SetPosition(float x, float y,float z)
00082 {
00083 m_Position[0] = x;
00084 m_Position[1] = y;
00085 m_Position[2] = z;
00086 this->UpdateTransform();
00087 }
00088
00090 void SetDirection(const VectorType & d)
00091 {
00092 m_Direction = d;
00093 this->UpdateTransform();
00094 }
00096
00097 itkGetConstMacro(Direction,VectorType);
00098
00099 void SetDirection(float x, float y)
00100 {
00101 m_Direction[0] = x;
00102 m_Direction[1] = y;
00103 this->UpdateTransform();
00104 }
00105
00106 void SetDirection(float x, float y,float z)
00107 {
00108 m_Direction[0] = x;
00109 m_Direction[1] = y;
00110 m_Direction[2] = z;
00111 this->UpdateTransform();
00112 }
00113
00115 void SetLength(double length);
00116 void SetLenght(double length)
00117 {
00118 itkWarningMacro(
00119 "Please change your code to use SetLength rather than SetLenght. "
00120 << "The latter method name was mispelled and the ITK developers failed to correct it before it was released. "
00121 << "The mispelled method name is retained in order to maintain backward compatibility.");
00122 this->SetLength(length);
00123 return;
00124 }
00126
00128 itkGetMacro(Length,double);
00129
00132 double GetLenght() {return this->GetLength();}
00133
00135 bool ComputeLocalBoundingBox() const;
00136
00138 bool IsInside( const PointType & point,
00139 unsigned int depth, char * name) const;
00140
00144 virtual bool IsInside( const PointType & point) const;
00145
00146
00147 protected:
00148
00149 ArrowSpatialObject();
00150 virtual ~ArrowSpatialObject();
00151
00153 void UpdateTransform();
00154
00156 virtual void PrintSelf( std::ostream& os, Indent indent ) const;
00157
00158 private:
00159 ArrowSpatialObject(const Self&);
00160 void operator=(const Self&);
00161
00162 VectorType m_Direction;
00163 PointType m_Position;
00164 double m_Length;
00165
00166 };
00167
00168 }
00169
00170 #ifndef ITK_MANUAL_INSTANTIATION
00171 #include "itkArrowSpatialObject.txx"
00172 #endif
00173
00174 #endif // __itkArrowSpatialObject_h
00175