/*========================================================================= * * 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 itkLevelSetQuadEdgeMesh_hxx #define itkLevelSetQuadEdgeMesh_hxx namespace itk { template auto LevelSetQuadEdgeMesh::Evaluate(const InputType & iP) const -> OutputType { OutputType oValue = 0.; this->m_Mesh->GetPointData(iP, &oValue); return oValue; } template auto LevelSetQuadEdgeMesh::EvaluateGradient(const InputType & itkNotUsed(iP)) const -> GradientType { itkWarningMacro("to be implemented"); return Self::GradientType(); // Create a new object with default initializer } template auto LevelSetQuadEdgeMesh::EvaluateHessian(const InputType & itkNotUsed(iP)) const -> HessianType { itkWarningMacro("to be implemented"); return Self::HessianType(); // Create a new object with default initializer } template void LevelSetQuadEdgeMesh::Evaluate(const InputType & iP, LevelSetDataType & ioData) const { // if it has not already been computed before if (!ioData.Value.first) { ioData.Value.first = true; this->m_Mesh->GetPointData(iP, &(ioData.Value.second)); } } template void LevelSetQuadEdgeMesh::EvaluateGradient(const InputType & itkNotUsed(iP), LevelSetDataType & ioData) const { // if it has not already been computed before if (!ioData.Gradient.first) { ioData.Gradient.second = true; // compute the gradient ///\todo implement the computation of the gradient } } template void LevelSetQuadEdgeMesh::EvaluateHessian(const InputType & itkNotUsed(iP), LevelSetDataType & ioData) const { if (!ioData.Hessian.first) { ioData.Hessian.first = true; // compute the hessian ///\todo implement the computation of the hessian } } template void LevelSetQuadEdgeMesh::Initialize() { Superclass::Initialize(); this->m_Mesh = nullptr; } template void LevelSetQuadEdgeMesh::CopyInformation(const DataObject * data) { Superclass::CopyInformation(data); const auto * levelSet = dynamic_cast(data); if (!levelSet) { // pointer could not be cast back down itkExceptionMacro("itk::LevelSetQuadEdgeMesh::CopyInformation() cannot cast " << typeid(data).name() << " to " << typeid(Self *).name()); } } template void LevelSetQuadEdgeMesh::Graft(const DataObject * data) { Superclass::Graft(data); const auto * levelSet = dynamic_cast(data); if (!levelSet) { // pointer could not be cast back down itkExceptionMacro("itk::LevelSetQuadEdgeMesh::CopyInformation() cannot cast " << typeid(data).name() << " to " << typeid(Self *).name()); } this->m_Mesh = levelSet->m_Mesh; } } // namespace itk #endif // itkLevelSetQuadEdgeMesh_hxx