FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

surfacePointMerge.C

Go to the documentation of this file.
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: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines