X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkCommon.cxx;h=d3f6016a5c0e16c88dd363cc096e30e5d403d933;hb=3451be2e38ff6603113fb95f7498e127707de370;hp=37866ab7468aaa66b3d8063af605905c026781b5;hpb=05679c0bf1e5812389f03f0176cc9d87039b0b81;p=clitk.git diff --git a/common/clitkCommon.cxx b/common/clitkCommon.cxx index 37866ab..d3f6016 100644 --- a/common/clitkCommon.cxx +++ b/common/clitkCommon.cxx @@ -1,29 +1,24 @@ -/*------------------------------------------------------------------------- - - Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de - l'Image). All rights reserved. See Doc/License.txt or - http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - --------------------------------------------------------------------------*/ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +======================================================================-====*/ #ifndef CLITKCOMMON_CXX #define CLITKCOMMON_CXX -/** - ------------------------------------------------- - * @file clitkCommon.cxx - * @author David Sarrut - * @date 17 May 2006 07:59:06 - * - * @brief - * - * - -------------------------------------------------*/ - #include "clitkCommon.h" #include #include @@ -31,24 +26,24 @@ //------------------------------------------------------------------ // skip line which begin with a sharp '#' -void clitk::skipComment(std::istream & is) +void clitk::skipComment(std::istream & is) { char c; char line[1024]; if (is.eof()) return; - is >> c ; + is >> c ; while (is && (c == '#')) { - is.getline (line, 1024); - is >> c; - if (is.eof()) return; + is.getline (line, 1024); + is >> c; + if (is.eof()) return; } is.unget(); } //// //------------------------------------------------------------------ - + //------------------------------------------------------------------ // linear (rough) conversion from Hounsfield Unit to density -double clitk::HU2density(double HU) +double clitk::HU2density(double HU) { return (HU+1000.0)/1000.0; } //// @@ -56,15 +51,15 @@ double clitk::HU2density(double HU) //------------------------------------------------------------------ // Return filename extension -std::string clitk::GetExtension(const std::string& filename) +std::string clitk::GetExtension(const std::string& filename) { // This assumes that the final '.' in a file name is the delimiter // for the file's extension type - const std::string::size_type it = filename.find_last_of( "." ); + const std::string::size_type it = filename.find_last_of( "." ); // This determines the file's type by creating a new string // who's value is the extension of the input filename // eg. "myimage.gif" has an extension of "gif" - std::string fileExt( filename, it+1, filename.length() ); + std::string fileExt( filename, it+1, filename.length() ); return( fileExt ); } //// //------------------------------------------------------------------ @@ -75,15 +70,15 @@ void clitk::VerboseInProgress(const int nb, const int current, const int percent { static int previous = -1; const int rounded = (100*current)/nb; - if (previous==rounded) return; + if (previous==rounded) return; previous = rounded; std::ostringstream oss; - oss << rounded << '%'; + oss << std::setw(4) << rounded << '%'; std::cout << oss.str() << std::flush; - for (int i=0; i -bool clitk::IsSameType(std::string t) { - if ((t==GetTypeAsString()) || (t == "schar")) return true; else return false; +bool clitk::IsSameType(std::string t) +{ + if ((t==GetTypeAsString()) || (t == "schar")) return true; + else return false; } template<> -bool clitk::IsSameType(std::string t) { - if ((t==GetTypeAsString()) || (t == "char")) return true; else return false; +bool clitk::IsSameType(std::string t) +{ + if ((t==GetTypeAsString()) || (t == "char")) return true; + else return false; } template<> -bool clitk::IsSameType(std::string t) { - if ((t==GetTypeAsString()) || (t == "uchar")) return true; else return false; +bool clitk::IsSameType(std::string t) +{ + if ((t==GetTypeAsString()) || (t == "uchar")) return true; + else return false; } template<> -bool clitk::IsSameType(std::string t) { - if ((t==GetTypeAsString()) || (t == "ushort")) return true; else return false; +bool clitk::IsSameType(std::string t) +{ + if ((t==GetTypeAsString()) || (t == "ushort")) return true; + else return false; } //------------------------------------------------------------------ //------------------------------------------------------------------ -void clitk::FindAndReplace(std::string & line, - const std::string & tofind, - const std::string & replacement) { +void clitk::FindAndReplace(std::string & line, + const std::string & tofind, + const std::string & replacement) +{ int pos = line.find(tofind); while (pos!= (int)std::string::npos) { line.replace(pos, tofind.size(), replacement); @@ -171,9 +178,10 @@ void clitk::FindAndReplace(std::string & line, //------------------------------------------------------------------ //------------------------------------------------------------------ -void clitk::FindAndReplace(std::string & line, - const std::vector & tofind, - const std::vector & toreplace) { +void clitk::FindAndReplace(std::string & line, + const std::vector & tofind, + const std::vector & toreplace) +{ for(unsigned int i=0; i & tofind, - const std::vector & toreplace, - std::ofstream & out) { +void clitk::FindAndReplace(std::ifstream & in, + const std::vector & tofind, + const std::vector & toreplace, + std::ofstream & out) +{ std::string line; if (tofind.size() != toreplace.size()) { std::cerr << "Error' tofind' is size=" << tofind.size() << std::endl; @@ -199,9 +208,10 @@ void clitk::FindAndReplace(std::ifstream & in, //------------------------------------------------------------------ //------------------------------------------------------------------ -double clitk::ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, - const itk::ContinuousIndex pointInPlane, - const itk::ContinuousIndex normalPlane) { +double clitk::ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, + const itk::ContinuousIndex pointInPlane, + const itk::ContinuousIndex normalPlane) +{ // http://mathworld.wolfram.com/Plane.html // http://mathworld.wolfram.com/Point-PlaneDistance.html double a = normalPlane[0]; @@ -219,24 +229,26 @@ double clitk::ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousInde double d = -a*x0 - b*y0 - c*z0; DD(d); double distance = (a*x + b*y + c*z + d) / norm; - + return distance; } //------------------------------------------------------------------ //-------------------------------------------------------------------- // Open a file for reading -void clitk::openFileForReading(std::ifstream & is, const std::string & filename) { +void clitk::openFileForReading(std::ifstream & is, const std::string & filename) +{ is.open(filename.c_str(), std::ios::in); if ( is.fail() ) { itkGenericExceptionMacro(<< "Could not open file (for reading): " << filename); } } //-------------------------------------------------------------------- - + //-------------------------------------------------------------------- // Open a file for writing -void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) { +void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) +{ os.open(filename.c_str(), std::ios::out); if ( os.fail() ) { itkGenericExceptionMacro(<< "Could not open file (for writing): " << filename); @@ -245,14 +257,17 @@ void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) //-------------------------------------------------------------------- //-------------------------------------------------------------------- -double clitk::cotan(double i) { return(1.0 / tan(i)); } -double clitk::invcotan(double x) { +double clitk::cotan(double i) +{ + return(1.0 / tan(i)); +} +double clitk::invcotan(double x) +{ // http://mathworld.wolfram.com/InverseCotangent.html double y; if (x<0) { y = -0.5*M_PI-atan(x); - } - else { + } else { y = 0.5*M_PI-atan(x); } return y; @@ -261,7 +276,8 @@ double clitk::invcotan(double x) { //-------------------------------------------------------------------- std::streambuf * clitk_stdcerr_backup; -void clitk::disableStdCerr() { +void clitk::disableStdCerr() +{ clitk_stdcerr_backup = std::cerr.rdbuf(); std::stringstream oss; std::cerr.rdbuf( oss.rdbuf() ); @@ -269,10 +285,28 @@ void clitk::disableStdCerr() { //-------------------------------------------------------------------- //-------------------------------------------------------------------- -void clitk::enableStdCerr() { +void clitk::enableStdCerr() +{ std::cerr.rdbuf(clitk_stdcerr_backup); } //-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::readDoubleFromFile(const std::string & filename, std::vector & list) +{ + std::ifstream is; + clitk::openFileForReading(is, filename); + list.clear(); + while (is) { + clitk::skipComment(is); + double d; + is >> d; + if (is) list.push_back(d); + } +} +//-------------------------------------------------------------------- + + #endif /* end #define CLITKCOMMON_CXX */