/*========================================================================= * * 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 itkSimplexMeshGeometry_h #define itkSimplexMeshGeometry_h #include "itkIntTypes.h" #include "itkPoint.h" #include "itkCovariantVector.h" #include #include "ITKMeshExport.h" namespace itk { /** * \class SimplexMeshGeometry * \brief handle geometric properties for vertices of a simplex mesh * * It stores and recomputes geometric properties of simplex mesh * vertices, i.e. the normal vector, the barycentric coordinates of * the point related to its three neighbor vertices, simplex angle * circumsphere and circumcircle radius and center. * * * \author Thomas Boettger. Division Medical and Biological Informatics, German Cancer Research Center, Heidelberg. * * \ingroup ITKMesh */ class ITKMesh_EXPORT SimplexMeshGeometry { public: using PointType = itk::Point; using VectorType = itk::Vector; using CovariantVectorType = itk::CovariantVector; using IndexArray = itk::FixedArray; using PointArray = itk::FixedArray; using NeighborSetType = std::set; SimplexMeshGeometry(); ~SimplexMeshGeometry(); void CopyFrom(const SimplexMeshGeometry & input); void CopyNeigborSet(const NeighborSetType * nset); /** Definition of some attributes for * faster deformable model computation */ /* stores the indices of the three direct neighbors */ IndexArray neighborIndices; /* stores the coordinates of the three direct neighbors */ PointArray neighbors; /* stores the mean curvature of the mesh in the point */ double meanCurvature; /* coordinates of the corresponding point */ PointType pos; /* coordinates of the corresponding point in previous iteration */ PointType oldPos; /** barycentric coordinates of corresponding point with respect * to its three direct neighbors */ PointType eps; /** * reference metric params */ PointType referenceMetrics; /* normal vector of corresponding point */ CovariantVectorType normal; /** stores external force component for * current deformable model iteration */ VectorType externalForce; /** stores internal force component for * current deformable model iteration */ VectorType internalForce; /** * store the location of the closest attractor to this point */ PointType closestAttractor; /** * stores the index of the closest attractor to this point */ IdentifierType closestAttractorIndex; /* stores circum circle radius */ double circleRadius; /* stores circum circle center */ PointType circleCenter; /* stores circum sphere radius */ double sphereRadius; /* stores circum sphere center */ // PointType sphereCenter; /* stores distance to foot point */ double distance; /* stores angle */ double phi; /* stores the neighbor set */ NeighborSetType * neighborSet; /* stores multiplier for interactive deformable model filter */ double multiplier; IdentifierType forceIndex; /** * Computes the center and radius of the circum circle of the * three neighbor points and of the circum sphere */ void ComputeGeometry(); protected: }; // end of class SimplexMeshGeometry } // end of namespace itk #endif