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 #ifndef itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction_h
19 #define itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction_h
20 
21 #include "itkQuadEdgeMeshFunctionBase.h"
22 
23 namespace itk
24 {
25 /**
26  * \class QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction
27  * \brief Delete the vertex, connected edges and faces and create a new face
28  * in place of the previous vertex' one-ring.
29  *
30  * \ingroup QEMeshModifierFunctions
31  * \ingroup ITKQuadEdgeMesh
32  */
33 template< typename TMesh, typename TQEType >
34 class ITK_TEMPLATE_EXPORT QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction:
35   public QuadEdgeMeshFunctionBase< TMesh, TQEType * >
36 {
37 public:
38   ITK_DISALLOW_COPY_AND_ASSIGN(QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction);
39 
40   /** Standard class type aliases. */
41   using Self = QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction;
42   using Superclass = QuadEdgeMeshFunctionBase< TMesh, TQEType * >;
43   using Pointer = SmartPointer< Self >;
44   using ConstPointer = SmartPointer< const Self >;
45 
46   itkNewMacro(Self);
47   /** Run-time type information (and related methods). */
48   itkTypeMacro(QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction, QuadEdgeMeshFunctionBase);
49 
50   /** Type of QuadEdge with which to apply slicing. */
51   using QEType = TQEType;
52 
53   using MeshType = typename Superclass::MeshType;
54   using OutputType = typename Superclass::OutputType;
55 
56   using PointIdentifier = typename MeshType::PointIdentifier;
57   using FaceRefType = typename MeshType::FaceRefType;
58 
59   /** Evaluate at the specified input position */
60   virtual OutputType Evaluate(QEType *e);
61 
GetOldPointID()62   PointIdentifier GetOldPointID()
63   {
64     return ( this->m_OldPointID );
65   }
66 
67 protected:
QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction()68   QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction() : m_OldPointID(0) {}
69   ~QuadEdgeMeshEulerOperatorDeleteCenterVertexFunction() override = default;
70 
71 private:
72   PointIdentifier m_OldPointID;
73 };
74 } // end namespace itk
75 
76 #include "itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction.hxx"
77 
78 #endif
79