00001 /*---------------------------------------------------------------------------*\ 00002 ========= | 00003 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 00004 \\ / O peration | 00005 \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. 00006 \\/ M anipulation | 00007 ------------------------------------------------------------------------------- 00008 License 00009 This file is part of OpenFOAM. 00010 00011 OpenFOAM is free software: you can redistribute it and/or modify it 00012 under the terms of the GNU General Public License as published by 00013 the Free Software Foundation, either version 3 of the License, or 00014 (at your option) any later version. 00015 00016 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT 00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00018 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 00019 for more details. 00020 00021 You should have received a copy of the GNU General Public License 00022 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. 00023 00024 Application 00025 surfacePointMerge 00026 00027 Description 00028 Merges points on surface if they are within absolute distance. 00029 00030 Since absolute distance use with care! 00031 00032 Usage 00033 00034 - surfacePointMerge [OPTIONS] <Foam surface file> <(absolute) merge distance> <Foam output surface file> 00035 00036 @param <Foam surface file> \n 00037 @todo Detailed description of argument. 00038 00039 @param <(absolute) merge distance> \n 00040 @todo Detailed description of argument. 00041 00042 @param <Foam output surface file> \n 00043 @todo Detailed description of argument. 00044 00045 @param -case <dir>\n 00046 Case directory. 00047 00048 @param -help \n 00049 Display help message. 00050 00051 @param -doc \n 00052 Display Doxygen API documentation page for this application. 00053 00054 @param -srcDoc \n 00055 Display Doxygen source documentation page for this application. 00056 00057 \*---------------------------------------------------------------------------*/ 00058 00059 #include <triSurface/triSurface.H> 00060 #include <meshTools/triSurfaceTools.H> 00061 #include <OpenFOAM/argList.H> 00062 #include <OpenFOAM/OFstream.H> 00063 #include <OpenFOAM/boundBox.H> 00064 00065 using namespace Foam; 00066 00067 00068 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00069 // Main program: 00070 00071 int main(int argc, char *argv[]) 00072 { 00073 argList::noParallel(); 00074 argList::validArgs.clear(); 00075 argList::validArgs.append("surface file"); 00076 argList::validArgs.append("merge distance"); 00077 argList::validArgs.append("output file"); 00078 argList args(argc, argv); 00079 00080 fileName surfFileName(args.additionalArgs()[0]); 00081 scalar mergeTol(readScalar(IStringStream(args.additionalArgs()[1])())); 00082 fileName outFileName(args.additionalArgs()[2]); 00083 00084 Info<< "Reading surface from " << surfFileName << " ..." << endl; 00085 Info<< "Merging points within " << mergeTol << " meter." << endl; 00086 00087 triSurface surf1(surfFileName); 00088 00089 Info<< "Original surface:" << endl; 00090 00091 surf1.writeStats(Info); 00092 00093 00094 triSurface cleanSurf(surf1); 00095 00096 while(true) 00097 { 00098 label nOldVert = cleanSurf.nPoints(); 00099 00100 cleanSurf = triSurfaceTools::mergePoints(cleanSurf, mergeTol); 00101 00102 Info<< "After merging points:" << endl; 00103 00104 cleanSurf.writeStats(Info); 00105 00106 if (nOldVert == cleanSurf.nPoints()) 00107 { 00108 break; 00109 } 00110 } 00111 00112 cleanSurf.write(outFileName); 00113 00114 Info << "End\n" << endl; 00115 00116 return 0; 00117 } 00118 00119 00120 // ************************ vim: set sw=4 sts=4 et: ************************ //