ITK  4.2.0
Insight Segmentation and Registration Toolkit
itkFEMElementStd.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 
19 #ifndef __itkFEMElementStd_h
20 #define __itkFEMElementStd_h
21 
22 #include "itkFEMElementBase.h"
23 
24 namespace itk
25 {
26 namespace fem
27 {
55 template <unsigned int VNumberOfNodes, unsigned int VNumberOfSpatialDimensions, class TBaseClass = Element>
56 class ElementStd : public TBaseClass
57 {
58 public:
59 
61  typedef ElementStd Self;
62  typedef TBaseClass Superclass;
65 
67  itkTypeMacro(ElementStd, TBaseClass);
68 
69 // FIXME: Add concept cheking for TBaseClass, and TPointClass
70 
71  // Repeat typedefs and enums from parent class
72 
73  typedef typename Superclass::Float Float;
74  typedef typename Superclass::MatrixType MatrixType;
75  typedef typename Superclass::VectorType VectorType;
76  typedef typename Superclass::LoadType LoadType;
77  typedef typename Superclass::LoadPointer LoadPointer;
78  typedef typename Superclass::NodeIDType NodeIDType;
79  typedef typename Superclass::DegreeOfFreedomIDType DegreeOfFreedomIDType;
80  typedef typename Superclass::Node Node;
81  enum { InvalidDegreeOfFreedomID = Superclass::InvalidDegreeOfFreedomID };
82 
86  enum { NumberOfNodes = VNumberOfNodes };
87 
91  enum { NumberOfSpatialDimensions = VNumberOfSpatialDimensions };
92 
96  ElementStd();
97 
98  // ////////////////////////////////////////////////////////////////////////
102  virtual unsigned int GetNumberOfNodes(void) const
103  {
104  return NumberOfNodes;
105  }
106 
111  virtual NodeIDType GetNode(unsigned int n) const
112  {
113  if( n >= NumberOfNodes )
114  {
115  return 0;
116  }
117  return this->m_node[n];
118  }
119 
120  virtual void SetNode(unsigned int n, NodeIDType node)
121  {
122  this->SetNodeInternal(n,node);
123  }
124  virtual void SetNode(unsigned int n, typename Superclass::Node::Pointer node)
125  {
126  this->SetNodeInternal(n,node);
127  }
128 
130  virtual const VectorType & GetNodeCoordinates(unsigned int n) const
131  {
132  return m_node[n]->GetCoordinates();
133  }
134 
136  virtual unsigned int GetNumberOfSpatialDimensions() const
137  {
139  }
140 
141  // ////////////////////////////////////////////////////////////////////////
142 protected:
143 
144  virtual void PrintSelf(std::ostream& os, Indent indent) const;
145 
146  virtual void SetNodeInternal(unsigned int n, const Node *node)
147  {
148  if( n >= NumberOfNodes )
149  {
150  return;
151  }
152  this->m_node[n] = node;
153  }
158 };
159 
160 }
161 } // end namespace itk::fem
162 
163 #ifndef ITK_MANUAL_INSTANTIATION
164 #include "itkFEMElementStd.hxx"
165 #endif
166 
167 #endif // #ifndef __itkFEMElementStd_h
168