#pragma once #include namespace ImplictSIM { template class ImplictModel { public: typedef double (*disCalculationPtr)(const Eigen::Vector& point); typedef double (*gradientDirXPtr)(const Eigen::Vector& point); typedef double (*gradientDirYPtr)(const Eigen::Vector& point); typedef double (*gradientDirZPtr)(const Eigen::Vector& point); ImplictModel(disCalculationPtr disFunc_, gradientDirXPtr gradOnX_, gradientDirYPtr gradOnY_, gradientDirZPtr gradOnZ_) : disFunc(disFunc_) , gradOnX(gradOnX_) , gradOnY(gradOnY_) , gradOnZ(gradOnZ_) { } double getSignedDis(const Eigen::Vector& point) { return disFunc(point); } double getGradOnX(const Eigen::Vector& point) { return gradOnX(point); } double getGradOnY(const Eigen::Vector& point) { return gradOnY(point); } double getGradOnZ(const Eigen::Vector& point) { return gradOnZ(point); } private: disCalculationPtr disFunc; gradientDirXPtr gradOnX; gradientDirXPtr gradOnY; gradientDirXPtr gradOnZ; }; }; // namespace ImplictSIM