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 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){this->SetLength(length); return;}
00118
00120 itkGetMacro(Length,double);
00121
00124 double GetLenght() {return this->GetLength();}
00125
00127 bool ComputeLocalBoundingBox() const;
00128
00130 bool IsInside( const PointType & point,
00131 unsigned int depth, char * name) const;
00132
00136 virtual bool IsInside( const PointType & point) const;
00137
00138
00139 protected:
00140
00141 ArrowSpatialObject();
00142 virtual ~ArrowSpatialObject();
00143
00145 void UpdateTransform();
00146
00148 virtual void PrintSelf( std::ostream& os, Indent indent ) const;
00149
00150 private:
00151 ArrowSpatialObject(const Self&);
00152 void operator=(const Self&);
00153
00154 VectorType m_Direction;
00155 PointType m_Position;
00156 double m_Length;
00157
00158 };
00159
00160 }
00161
00162 #ifndef ITK_MANUAL_INSTANTIATION
00163 #include "itkArrowSpatialObject.txx"
00164 #endif
00165
00166 #endif // __itkArrowSpatialObject_h
00167