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 }
00070
00071 itkGetConstMacro(Position,PointType);
00072
00073 void SetPosition(float x, float y)
00074 {
00075 m_Position[0] = x;
00076 m_Position[1] = y;
00077 this->UpdateTransform();
00078 }
00079
00080 void SetPosition(float x, float y,float z)
00081 {
00082 m_Position[0] = x;
00083 m_Position[1] = y;
00084 m_Position[2] = z;
00085 this->UpdateTransform();
00086 }
00087
00089 void SetDirection(const VectorType & d)
00090 {
00091 m_Direction = d;
00092 this->UpdateTransform();
00093 }
00094
00095 itkGetConstMacro(Direction,VectorType);
00096
00097 void SetDirection(float x, float y)
00098 {
00099 m_Direction[0] = x;
00100 m_Direction[1] = y;
00101 this->UpdateTransform();
00102 }
00103
00104 void SetDirection(float x, float y,float z)
00105 {
00106 m_Direction[0] = x;
00107 m_Direction[1] = y;
00108 m_Direction[2] = z;
00109 this->UpdateTransform();
00110 }
00111
00113 void SetLength(double length);
00114 void SetLenght(double length){this->SetLength(length); return;}
00115
00117 itkGetMacro(Length,double);
00118
00121 double GetLenght() {return this->GetLength();}
00122
00124 bool ComputeLocalBoundingBox() const;
00125
00127 bool IsInside( const PointType & point,
00128 unsigned int depth, char * name) const;
00129
00133 virtual bool IsInside( const PointType & point) const;
00134
00135
00136 protected:
00137
00138 ArrowSpatialObject();
00139 virtual ~ArrowSpatialObject();
00140
00142 void UpdateTransform();
00143
00145 virtual void PrintSelf( std::ostream& os, Indent indent ) const;
00146
00147 private:
00148
00149 VectorType m_Direction;
00150 PointType m_Position;
00151 double m_Length;
00152
00153 };
00154
00155 }
00156
00157 #ifndef ITK_MANUAL_INSTANTIATION
00158 #include "itkArrowSpatialObject.txx"
00159 #endif
00160
00161 #endif // __itkArrowSpatialObject_h