Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Modules/Core/Common/include/itkCommonEnums.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ class CommonEnums
QUADRATIC_EDGE_CELL = 7,
QUADRATIC_TRIANGLE_CELL = 8,
LAST_ITK_CELL = 9,
POLYLINE_CELL = 10,
MAX_ITK_CELLS = 255
};

Expand Down
139 changes: 139 additions & 0 deletions Modules/Core/Common/include/itkPolyLineCell.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
/*=========================================================================
*
* 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
*
* http://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 itkPolyLineCell_h
#define itkPolyLineCell_h

#include "itkVertexCell.h"
namespace itk
{
/** \class PolyLineCell
* \brief Represents a series of connected line segments for a Mesh.
*
* PolyLineCell represents a series of connected line segments for a Mesh.
*
* Template parameters for PolyLineCell:
*
* \tparam TPixelType The type associated with a point, cell, or boundary
* for use in storing its data.
*
* \tparam TCellTraits Type information of mesh containing cell.
*
* \ingroup MeshObjects
* \ingroup ITKCommon
*/

template <typename TCellInterface>
class ITK_TEMPLATE_EXPORT PolyLineCell : public TCellInterface
{
public:
ITK_DISALLOW_COPY_AND_MOVE(PolyLineCell);

/** Standard class type aliases. */
itkCellCommonTypedefs(PolyLineCell);
itkCellInheritedTypedefs(TCellInterface);

/** Standard part of every itk Object. */
itkTypeMacro(PolyLineCell, CellInterface);

/** The type of boundary for this lines's vertices. */
using VertexType = VertexCell<TCellInterface>;
using VertexAutoPointer = typename VertexType::SelfAutoPointer;

/** Line-specific topology numbers. */
static constexpr unsigned int CellDimension = 1;

/** Implement the standard CellInterface. */
CellGeometryEnum
GetType() const override
{
return CellGeometryEnum::POLYLINE_CELL;
}
void
MakeCopy(CellAutoPointer &) const override;

unsigned int
GetDimension() const override;

unsigned int
GetNumberOfPoints() const override;

CellFeatureCount
GetNumberOfBoundaryFeatures(int dimension) const override;

bool
GetBoundaryFeature(int dimension, CellFeatureIdentifier, CellAutoPointer &) override;

void
ClearPoints();

void
SetPointIds(PointIdConstIterator first) override;

void
SetPointIds(PointIdConstIterator first, PointIdConstIterator last) override;

void
SetPointIds(int dummy, int num, PointIdConstIterator first);

void
SetPointId(int localId, PointIdentifier) override;
PointIdIterator
PointIdsBegin() override;

PointIdConstIterator
PointIdsBegin() const override;

PointIdIterator
PointIdsEnd() override;

PointIdConstIterator
PointIdsEnd() const override;

/** Line-specific interface. */
virtual CellFeatureCount
GetNumberOfVertices() const;

virtual bool
GetVertex(CellFeatureIdentifier, VertexAutoPointer &);

/** Visitor interface */
itkCellVisitMacro(CellGeometryEnum::LINE_CELL);

/** Constructor and destructor */
PolyLineCell() = default;
PolyLineCell(PointIdentifier NumberOfPoints)
{
for (PointIdentifier i = 0; i < NumberOfPoints; ++i)
{
m_PointIds.push_back(NumericTraits<PointIdentifier>::max());
}
}

~PolyLineCell() override = default;

protected:
/** For storing the points needed for a line segment. */
std::vector<PointIdentifier> m_PointIds;
};
} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
# include "itkPolyLineCell.hxx"
#endif

#endif
Loading