/*========================================================================= * * 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 itkVoronoiDiagram2D_hxx #define itkVoronoiDiagram2D_hxx #include namespace itk { template VoronoiDiagram2D::VoronoiDiagram2D() { m_NumberOfSeeds = 0; } template void VoronoiDiagram2D::PrintSelf(std::ostream & os, Indent indent) const { Superclass::PrintSelf(os, indent); os << indent << "Number Of Seeds: " << m_NumberOfSeeds << std::endl; } /* Set the seed points, specify the number of seeds as "num". */ template void VoronoiDiagram2D::SetSeeds(int num, SeedsIterator begin) { m_Seeds.clear(); auto ii(begin); for (int i = 0; i < num; ++i) { m_Seeds.push_back(*ii++); } m_NumberOfSeeds = num; } /* Set the rectangle that encloses the Voronoi Diagram. */ template void VoronoiDiagram2D::SetBoundary(PointType vorsize) { m_VoronoiBoundary[0] = vorsize[0]; m_VoronoiBoundary[1] = vorsize[1]; } template void VoronoiDiagram2D::SetOrigin(PointType vorsize) { m_VoronoiBoundaryOrigin[0] = vorsize[0]; m_VoronoiBoundaryOrigin[1] = vorsize[1]; } template void VoronoiDiagram2D::GetPoint(int pId, PointType * answer) { *answer = this->m_PointsContainer->ElementAt(pId); } template void VoronoiDiagram2D::GetCellId(CellIdentifier cellId, CellAutoPointer & cellPtr) { cellPtr.TakeNoOwnership(m_VoronoiRegions[cellId]); } template auto VoronoiDiagram2D::GetSeedsIDAroundEdge(VoronoiEdge * task) -> EdgeInfo { EdgeInfo answer; answer[0] = m_LineList[task->m_LineID][0]; answer[1] = m_LineList[task->m_LineID][1]; return (answer); } template auto VoronoiDiagram2D::EdgeBegin() -> VoronoiEdgeIterator { return m_EdgeList.begin(); } template auto VoronoiDiagram2D::EdgeEnd() -> VoronoiEdgeIterator { return m_EdgeList.end(); } template auto VoronoiDiagram2D::NeighborIdsBegin(int seeds) -> NeighborIdIterator { return m_CellNeighborsID[seeds].begin(); } template auto VoronoiDiagram2D::NeighborIdsEnd(int seeds) -> NeighborIdIterator { return m_CellNeighborsID[seeds].end(); } template auto VoronoiDiagram2D::VertexBegin() -> VertexIterator { return this->m_PointsContainer->Begin(); } template auto VoronoiDiagram2D::VertexEnd() -> VertexIterator { return this->m_PointsContainer->End(); } template auto VoronoiDiagram2D::GetSeed(int SeedID) -> PointType { PointType answer; answer[0] = m_Seeds[SeedID][0]; answer[1] = m_Seeds[SeedID][1]; return answer; } template void VoronoiDiagram2D::Reset() { m_VoronoiRegions.clear(); m_VoronoiRegions.resize(m_NumberOfSeeds); m_CellNeighborsID.resize(m_NumberOfSeeds); for (unsigned int i = 0; i < m_NumberOfSeeds; ++i) { m_VoronoiRegions[i] = new PolygonCellType; m_CellNeighborsID[i].clear(); } } template void VoronoiDiagram2D::InsertCells() { genericCellPointer cellPtr; for (unsigned int i = 0; i < m_NumberOfSeeds; ++i) { cellPtr.TakeOwnership(m_VoronoiRegions[i]); this->SetCell(i, cellPtr); } } } // end namespace itk #endif