1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
/*=========================================================================
*
* Copyright NumFOCUS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef itkQuadEdgeMeshPoint_h
#define itkQuadEdgeMeshPoint_h
#include "itkPoint.h"
#include "itkConceptChecking.h"
#include "itkGeometricalQuadEdge.h"
namespace itk
{
/**
* \class QuadEdgeMeshPoint
*
* \brief Wrapper around a itk::Point in order to add a reference
* to an entry in the edge ring.
* \ingroup ITKQuadEdgeMesh
*/
template <typename TCoordRep,
unsigned int VPointDimension,
typename TQuadEdge = GeometricalQuadEdge<unsigned long, unsigned long, bool, bool, true>>
class ITK_TEMPLATE_EXPORT QuadEdgeMeshPoint : public Point<TCoordRep, VPointDimension>
{
public:
/** Standard type alias. */
using Self = QuadEdgeMeshPoint;
using Superclass = Point<TCoordRep, VPointDimension>;
/** Types & values defined in superclass. */
static constexpr unsigned int PointDimension = VPointDimension;
using typename Superclass::ValueType;
using typename Superclass::CoordRepType;
using typename Superclass::RealType;
using typename Superclass::Iterator;
using typename Superclass::ConstIterator;
using typename Superclass::VectorType;
using ValueArrayType = ValueType[Self::PointDimension];
#ifdef ITK_USE_CONCEPT_CHECKING
// Begin concept checking
// End concept checking
#endif
public:
QuadEdgeMeshPoint() = default;
QuadEdgeMeshPoint(const Self &) = default;
QuadEdgeMeshPoint(QuadEdgeMeshPoint &&) = default;
QuadEdgeMeshPoint &
operator=(const QuadEdgeMeshPoint &) = default;
QuadEdgeMeshPoint &
operator=(QuadEdgeMeshPoint &&) = default;
~QuadEdgeMeshPoint() = default;
QuadEdgeMeshPoint(const Superclass & r);
QuadEdgeMeshPoint(const ValueType r[VPointDimension])
: Superclass(r)
{
this->Initialize();
}
Self &
operator=(const Superclass & r);
Self &
operator=(const ValueType r[VPointDimension]);
/** Accessor on m_Edge */
void
SetEdge(TQuadEdge * inputEdge);
/** Set the coordinates from a standard itk::Point */
void
SetPoint(const Superclass & point);
/** Accessor on m_Edge */
TQuadEdge *
GetEdge();
TQuadEdge *
GetEdge() const;
/** Return IsOriginalInternal of the edge.
* @sa GeometricalQuadEdge::isOriginInternal
*/
bool
IsInternal() const;
/** Return the valence of this QuadEdgeMeshPoint i.e. the number of edges constituting
* the Onext ring to which this point belongs.
* @return the valence when an entry in the Onext ring is present,
* and -1 otherwise.
*/
int
GetValence() const;
protected:
/** Resets the state of m_Edge to nullptr. */
void
Initialize();
protected:
TQuadEdge * m_Edge{}; /**< Entry edge for this point into an Onext ring */
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
# include "itkQuadEdgeMeshPoint.hxx"
#endif
#endif
|