00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkSimplexMesh_h
00018 #define __itkSimplexMesh_h
00019
00020 #if defined(_MSC_VER)
00021 #pragma warning ( disable : 4786 )
00022 #endif
00023
00024 #include "itkMesh.h"
00025 #include "itkSimplexMeshGeometry.h"
00026 #include "itkVertexCell.h"
00027 #include "itkTriangleCell.h"
00028 #include "itkCellInterface.h"
00029 #include "itkMapContainer.h"
00030 #include "itkFixedArray.h"
00031 #include "itkNumericTraits.h"
00032 #include <itkCovariantVector.h>
00033 #include <vector>
00034 #include <algorithm>
00035 #include <set>
00036
00037 namespace itk
00038 {
00051 template <typename TPixelType, unsigned int VDimension = 3,
00052 typename TMeshTraits = DefaultStaticMeshTraits< TPixelType , VDimension, VDimension, TPixelType , TPixelType , TPixelType >
00053 >
00054 class SimplexMesh : public Mesh<TPixelType, VDimension, TMeshTraits>
00055 {
00056 public:
00058 typedef SimplexMesh Self;
00059
00061 typedef Mesh<TPixelType, VDimension, TMeshTraits> Superclass;
00062
00064 typedef SmartPointer<Self> Pointer;
00065
00067 typedef SmartPointer<const Self> ConstPointer;
00068
00070 typedef typename SimplexMeshGeometry::IndexArray IndexArray;
00071
00073 typedef std::set<unsigned long> NeighborSetType;
00074
00076 typedef typename NeighborSetType::iterator NeighborSetIterator;
00077
00079 typedef std::vector<unsigned long> NeighborListType;
00080
00082 typedef typename TMeshTraits::PointType PointType;
00083
00085 typedef typename TMeshTraits::PointIdentifier PointIdentifier;
00086
00088 typedef typename PointType::VectorType VectorType;
00089
00091 typedef CovariantVector<typename VectorType::ValueType, 3> CovariantVectorType;
00092
00093
00095 typedef typename Superclass::CellType CellType;
00096
00098 typedef typename CellType::CellAutoPointer CellAutoPointer;
00099
00101 typedef itk::LineCell<CellType> LineType;
00102
00104 typedef itk::MapContainer<unsigned long, SimplexMeshGeometry *> GeometryMapType;
00105
00107 typedef typename GeometryMapType::Pointer GeometryMapPointer;
00108
00110 typedef typename GeometryMapType::Iterator GeometryMapIterator;
00111
00112
00114 itkNewMacro(Self);
00115
00117 itkTypeMacro(SimplexMesh, Mesh);
00118
00120 typedef TMeshTraits MeshTraits;
00121 typedef typename MeshTraits::PixelType PixelType;
00122 typedef typename MeshTraits::PointsContainer PointsContainer;
00123 typedef typename Superclass::PointsContainerPointer PointsContainerPointer;
00124 typedef typename Superclass::PointsContainer::Iterator PointsContainerIterator;
00125 typedef typename Superclass::PointsContainerConstIterator PointsContainerConstIterator;
00126 typedef typename Superclass::CellsContainerPointer CellsContainerPointer;
00127 typedef typename Superclass::CellsContainerIterator CellsContainerIterator;
00128
00130 itkSetMacro(GeometryData, GeometryMapPointer );
00131
00133 itkGetConstReferenceMacro(GeometryData, GeometryMapPointer );
00134
00136 itkSetMacro(LastCellId, unsigned long);
00137
00139 itkGetMacro(LastCellId, unsigned long);
00140
00145 virtual void CopyInformation(const DataObject *data);
00146
00147
00154 unsigned long AddEdge(unsigned long startPointId, unsigned long endPointId);
00155
00156
00164 unsigned long AddFace(CellAutoPointer &cellPointer);
00165
00170 unsigned long ReplaceFace(unsigned long replaceIndex, CellAutoPointer &cellPointer);
00171
00175 IndexArray GetNeighbors(unsigned long pointId) const;
00176
00180 NeighborListType* GetNeighbors(unsigned long pointId, unsigned int radius, NeighborListType* list = NULL) const;
00181
00187 void AddNeighbor(unsigned long pointId, unsigned long neighborId);
00188
00192 void ReplaceNeighbor(unsigned long pointId, unsigned long oldNeighborId,unsigned long newNeighborIdx);
00193
00197 void SwapNeighbors(unsigned long pointId, unsigned long firstNeighborId,unsigned long secondNeighborId);
00198
00202 void SetGeometryData(unsigned long pointId, SimplexMeshGeometry*);
00203
00207 void SetBarycentricCoordinates(unsigned long idx, PointType values);
00208
00212 PointType GetBarycentricCoordinates(unsigned long idx) const;
00213
00217 void SetReferenceMetrics(unsigned long idx, PointType values);
00218
00222 PointType GetReferenceMetrics(unsigned long idx) const;
00223
00227 void SetPhi(unsigned long idx, double values);
00228
00232 double GetPhi(unsigned long idx) const;
00233
00237 void SetMeanCurvature(unsigned long idx, double values);
00238
00242 double GetMeanCurvature(unsigned long idx) const;
00243
00247 void SetRadius(unsigned long idx, double values);
00248
00252 double GetRadius(unsigned long idx) const;
00253
00257 void SetDistance(unsigned long idx, double values);
00258
00262 double GetDistance(unsigned long idx) const;
00263
00265 CovariantVectorType ComputeNormal(unsigned long idx ) const;
00266
00267 protected:
00269 SimplexMesh();
00270 virtual ~SimplexMesh();
00271 void PrintSelf(std::ostream& os, Indent indent) const;
00273
00277 GeometryMapPointer m_GeometryData;
00278
00279
00286 unsigned long m_LastCellId;
00287
00288
00289 private:
00290 SimplexMesh(const Self&);
00291
00292
00293
00294
00295 };
00296
00297 }
00298
00299 #ifndef ITK_MANUAL_INSTANTIATION
00300 #include "itkSimplexMesh.txx"
00301 #endif
00302
00303 #endif
00304