Itk::FEMObject

From KitwarePublic
Jump to navigationJump to search

Return to itk::FEM framework - V4

We are proposing to develop a new ITK object (itk::FEMObject) that will hold the finite element model and will have a parallel spatial object (itk::FEMSpatialObject). This will match the current implementation for itk::Mesh and itk::MeshSpatialObject.

Proposed itk::FEMObject Class

<source lang="cpp"> template <unsigned int VDimension = 3> class ITK_EXPORT FEMObject : public DataObject { public:

 /** Standard class typedefs. */
 typedef PointSet                  Self;
 typedef DataObject                Superclass;
 typedef SmartPointer<Self>        Pointer;
 typedef SmartPointer<const Self>  ConstPointer;
   
 /** Method for creation through the object factory. */
 itkNewMacro(Self);
 /** Standard part of every itk Object. */
 itkTypeMacro(FEMObject, DataObject);
 itkStaticConstMacro(FEMDimension, unsigned int, VPointDimension);
 itkStaticConstMacro(MaxDimensions, unsigned int, 3);
 typedef unsigned long ElementIdentifier;
 typedef unsigned long NodeIdentifier;
 typedef unsigned long LoadIdentifier;
 typedef unsigned long MaterialIdentifier;
 typedef VectorContainer< ElementIdentifier, Element >   ElementContainer;
 typedef VectorContainer< NodeIdentifier, Node >         NodeContainer;
 typedef VectorContainer< LoadIdentifier, Load >         LoadContainer;
 typedef VectorContainer< MaterialIdentifier, Material > MaterialContainer;
 /** Create types that are pointers to each of the container types. */
 typedef typename ElementContainer::Pointer             ElementContainerPointer;
 typedef typename ElementContainer::ConstPointer        ElementContainerConstPointer;
 typedef typename NodeContainer::Pointer                NodeContainerPointer;
 typedef typename NodeContainer::ConstPointer           NodeContainerConstPointer;
 typedef typename LoadContainer::Pointer                LoadContainerPointer;
 typedef typename LoadContainer::ConstPointer           LoadContainerConstPointer;
 typedef typename MaterialContainer::Pointer            MaterialContainerPointer;
 typedef typename MaterialContainer::ConstPointer       MaterialContainerConstPointer;


 /** Create types that are iterators for each of the container types. */
 typedef typename
         ElementContainerPointer::ConstIterator         ElementContainerConstIterator;
 typedef typename
         ElementContainerPointer::Iterator              ElementContainerIterator;
 typedef typename
         NodeContainerPointer::ConstIterator            NodeContainerConstIterator;
 typedef typename
         NodeContainerPointer::Iterator                 NodeContainerIterator;
 typedef typename
         LoadContainerPointer::ConstIterator            LoadContainerConstIterator;
 typedef typename
         LoadContainerPointer::Iterator                 LoadContainerIterator;
 typedef typename
         MaterialContainerPointer::ConstIterator        MaterialContainerConstIterator;
 typedef typename
         MaterialContainerPointer::Iterator             MaterialContainerIterator;
 /* ADD OTHER Public Methods */

protected:

 /** Constructor for use by New() method. */
 FEMObject();
 ~FEMObject();
 void PrintSelf(std::ostream& os, Indent indent) const;


private:

 FEMObject(const Self&); //purposely not implemented
 void operator=(const Self&); //purposely not implemented
 ElementContainerPointer   m_ElementContainer;
 NodeContainerPointer      m_NodeContainer;
 LoadContainerPointer      m_LoadContainer;
 MaterialContainerPointer  m_MaterialContainer;

}; // End Class: Mesh

} // end namespace itk

</source>