ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
00001 /*========================================================================= 00002 * 00003 * Copyright Insight Software Consortium 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0.txt 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 *=========================================================================*/ 00018 #ifndef __itkTriangleCell_h 00019 #define __itkTriangleCell_h 00020 00021 #include "itkLineCell.h" 00022 #include "itkTriangleCellTopology.h" 00023 00024 #include <vector> 00025 00026 namespace itk 00027 { 00044 template< typename TCellInterface > 00045 class ITK_EXPORT TriangleCell: 00046 public TCellInterface, private TriangleCellTopology 00047 { 00048 public: 00050 itkCellCommonTypedefs(TriangleCell); 00051 itkCellInheritedTypedefs(TCellInterface); 00053 00055 itkTypeMacro(TriangleCell, CellInterface); 00056 00058 typedef VertexCell< TCellInterface > VertexType; 00059 typedef typename VertexType::SelfAutoPointer VertexAutoPointer; 00060 00062 typedef LineCell< TCellInterface > EdgeType; 00063 typedef typename EdgeType::SelfAutoPointer EdgeAutoPointer; 00064 00066 itkStaticConstMacro(NumberOfPoints, unsigned int, 3); 00067 itkStaticConstMacro(NumberOfVertices, unsigned int, 3); 00068 itkStaticConstMacro(NumberOfEdges, unsigned int, 3); 00069 itkStaticConstMacro(CellDimension, unsigned int, 2); 00071 00073 virtual CellGeometry GetType(void) const 00074 { return Superclass::TRIANGLE_CELL; } 00075 virtual void MakeCopy(CellAutoPointer &) const; 00077 00078 virtual unsigned int GetDimension(void) const; 00079 00080 virtual unsigned int GetNumberOfPoints(void) const; 00081 00082 virtual CellFeatureCount GetNumberOfBoundaryFeatures(int dimension) const; 00083 00084 virtual bool GetBoundaryFeature(int dimension, CellFeatureIdentifier, 00085 CellAutoPointer &); 00086 virtual void SetPointIds(PointIdConstIterator first); 00087 00088 virtual void SetPointIds(PointIdConstIterator first, 00089 PointIdConstIterator last); 00090 00091 virtual void SetPointId(int localId, PointIdentifier); 00092 virtual PointIdIterator PointIdsBegin(void); 00093 00094 virtual PointIdConstIterator PointIdsBegin(void) const; 00095 00096 virtual PointIdIterator PointIdsEnd(void); 00097 00098 virtual PointIdConstIterator PointIdsEnd(void) const; 00099 00101 virtual CellFeatureCount GetNumberOfVertices(void) const; 00102 00103 virtual CellFeatureCount GetNumberOfEdges(void) const; 00104 00105 virtual bool GetVertex(CellFeatureIdentifier, VertexAutoPointer &); 00106 virtual bool GetEdge(CellFeatureIdentifier, EdgeAutoPointer &); 00107 00108 virtual bool EvaluatePosition(CoordRepType *, 00109 PointsContainer *, 00110 CoordRepType *, 00111 CoordRepType[], 00112 double *, 00113 InterpolationWeightType *); 00114 00116 itkCellVisitMacro(Superclass::TRIANGLE_CELL); 00117 00119 CoordRepType ComputeArea(PointsContainer *); 00120 00121 PointType ComputeBarycenter(CoordRepType *, 00122 PointsContainer *); 00123 00124 PointType ComputeCenterOfGravity(PointsContainer *); 00125 00126 PointType ComputeCircumCenter(PointsContainer *); 00127 00128 public: 00129 TriangleCell(): 00130 m_PointIds( NumberOfPoints, NumericTraits< PointIdentifier >::max() ) 00131 {} 00132 ~TriangleCell() {} 00133 protected: 00135 std::vector< PointIdentifier > m_PointIds; 00136 private: 00137 TriangleCell(const Self &); //purposely not implemented 00138 void operator=(const Self &); //purposely not implemented 00140 00143 double DistanceToLine(PointType x, PointType p1, PointType p2, 00144 double & t, CoordRepType *closestPoint); 00145 00146 double DistanceToLine(PointType x, PointType p1, PointType p2, 00147 double & t, PointType & closestPoint); 00148 }; 00149 } // end namespace itk 00150 00151 #ifndef ITK_MANUAL_INSTANTIATION 00152 #include "itkTriangleCell.hxx" 00153 #endif 00154 00155 #endif 00156