From 59bfd4ecef4228cae5a96c6c34cce6646e385d43 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@Germany> Date: Fri, 14 Nov 2008 19:10:01 +0100 Subject: [PATCH] added surfaceCoordinateSystemTransform --- .../Make/files | 3 + .../Make/options | 5 + .../coordinateSystems | 83 +++++++ .../surfaceCoordinateSystemTransform.C | 235 ++++++++++++++++++ src/surfMesh/MeshedSurface/MeshedSurface.H | 29 +-- .../UnsortedMeshedSurface.H | 40 +-- 6 files changed, 358 insertions(+), 37 deletions(-) create mode 100644 applications/utilities/surface/surfaceCoordinateSystemTransform/Make/files create mode 100644 applications/utilities/surface/surfaceCoordinateSystemTransform/Make/options create mode 100644 applications/utilities/surface/surfaceCoordinateSystemTransform/coordinateSystems create mode 100644 applications/utilities/surface/surfaceCoordinateSystemTransform/surfaceCoordinateSystemTransform.C diff --git a/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/files b/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/files new file mode 100644 index 00000000000..b937625a710 --- /dev/null +++ b/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/files @@ -0,0 +1,3 @@ +surfaceCoordinateSystemTransform.C + +EXE = $(FOAM_APPBIN)/surfaceCoordinateSystemTransform diff --git a/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/options b/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/options new file mode 100644 index 00000000000..42b30c86523 --- /dev/null +++ b/applications/utilities/surface/surfaceCoordinateSystemTransform/Make/options @@ -0,0 +1,5 @@ +EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude + +EXE_LIBS = -lmeshTools -lsurfMesh diff --git a/applications/utilities/surface/surfaceCoordinateSystemTransform/coordinateSystems b/applications/utilities/surface/surfaceCoordinateSystemTransform/coordinateSystems new file mode 100644 index 00000000000..b414b6b81b7 --- /dev/null +++ b/applications/utilities/surface/surfaceCoordinateSystemTransform/coordinateSystems @@ -0,0 +1,83 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class IOPtrList<coordinateSystem>; + object coordinateSystems; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +7 +( +system_9 +{ + type cartesian; + origin (1.03291515 -0.114391257 -0.0826236662); + e3 (1 0 0); + e1 (0 1 0); + // STARCDRotation (0 90 90); +} + +system_10 +{ + type cartesian; + origin (0.623151719 -0.286472935 -0.113933262); + e3 (0.99508851 0.09829095 0.01173645); + e1 (0.01179356 0 -0.99993045); + // STARCDRotation (5.6403745 -0.0664172952 89.3275351); +} + +system_15 +{ + type cartesian; + origin (0.644772231 -0.240036493 0.155972187); + e3 (-0.01346388 -0.90616979 -0.42269969); + e1 (0.00627978 0.42265304 -0.90626981); + // STARCDRotation (-90.8512386 0 115.005148); +} + +system_16 +{ + type cartesian; + origin (0.540824938 -0.240036415 0.15928296); + e3 (-0.01346388 -0.90616979 -0.42269969); + e1 (0.00627978 0.42265304 -0.90626981); + // STARCDRotation (-90.8512386 0 115.005148); +} + +system_17 +{ + type cartesian; + origin (0.436877646 -0.240036339 0.162593737); + e3 (-0.01346388 -0.90616979 -0.42269969); + e1 (0.00627978 0.42265304 -0.90626981); + // STARCDRotation (-90.8512386 0 115.005148); +} + +system_18 +{ + type cartesian; + origin (0.332930354 -0.240036261 0.16590451); + e3 (-0.01346388 -0.90616979 -0.42269969); + e1 (0.00627978 0.42265304 -0.90626981); + // STARCDRotation (-90.8512386 0 115.005148); +} + +system_21 +{ + type cartesian; + origin (0.55863733 -0.300866705 0.00317260982); + e3 (0.42110287 0.02470132 -0.90667647); + e1 (0.90646036 0.02342535 0.42164069); + // STARCDRotation (-178.185897 -0.71772221 -155.059695); +} +) + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/surface/surfaceCoordinateSystemTransform/surfaceCoordinateSystemTransform.C b/applications/utilities/surface/surfaceCoordinateSystemTransform/surfaceCoordinateSystemTransform.C new file mode 100644 index 00000000000..cd71efcecd9 --- /dev/null +++ b/applications/utilities/surface/surfaceCoordinateSystemTransform/surfaceCoordinateSystemTransform.C @@ -0,0 +1,235 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + surfaceMeshCoordinateSystemTransform + +Description + + Transform (scale/rotate/translate) a surface based on + a coordinateSystem. + +Usage + - surfaceMeshCoordinateSystemTransform inputFile outputFile [OPTION] + + @param -clean \n + Perform some surface checking/cleanup on the input surface + + @param -scale \<scale\> \n + Specify a scaling factor for writing the files + + @param -triSurface \n + Use triSurface library for input/output + + @param -dict \<dictionary\> \n + Specify an alternative dictionary for coordinateSystems. + +Note + The filename extensions are used to determine the file format type. + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "timeSelector.H" +#include "Time.H" + +#include "MeshedSurfaces.H" +#include "UnsortedMeshedSurfaces.H" +#include "coordinateSystems.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Main program: + +int main(int argc, char *argv[]) +{ + argList::noParallel(); + argList::validArgs.append("inputFile"); + argList::validArgs.append("outputFile"); + argList::validOptions.insert("scale", "scale"); + argList::validOptions.insert("unsorted", ""); + argList::validOptions.insert("from", "sourceCoordinateSystem"); + argList::validOptions.insert("to", "targetCoordinateSystem"); + argList::validOptions.insert("dict", "dictionary"); + + argList args(argc, argv); + Time runTime(args.rootPath(), args.caseName()); + const stringList& params = args.additionalArgs(); + + word dictName("coordinateSystems"); + fileName dictPath(runTime.constant()); + fileName dictLocal; + + if (args.options().found("dict")) + { + wordList elems(fileName(args.options()["dict"]).components()); + dictName = elems[elems.size()-1]; + dictPath = elems[0]; + dictLocal = ""; + + if (elems.size() == 1) + { + dictPath = "."; + } + else if (elems.size() > 2) + { + dictLocal = fileName(SubList<word>(elems, elems.size()-2, 1)); + } + } + + autoPtr<coordinateSystem> fromCsys; + autoPtr<coordinateSystem> toCsys; + + if (args.options().found("from") || args.options().found("to")) + { + IOobject csDictIo + ( + dictName, + dictPath, + dictLocal, + runTime, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ); + + if (!csDictIo.headerOk()) + { + FatalErrorIn(args.executable()) + << "Cannot open coordinateSystems file\n " + << csDictIo.objectPath() << nl + << exit(FatalError); + } + + coordinateSystems csLst(csDictIo); + + if (args.options().found("from")) + { + word csName(args.options()["from"]); + + label csId = csLst.find(csName); + if (csId < 0) + { + FatalErrorIn(args.executable()) + << "Cannot find -from " << csName << nl + << "available coordinateSystems: " << csLst.toc() << nl + << exit(FatalError); + } + + fromCsys.reset(new coordinateSystem(csLst[csId])); + } + + if (args.options().found("to")) + { + word csName(args.options()["to"]); + + label csId = csLst.find(csName); + if (csId < 0) + { + FatalErrorIn(args.executable()) + << "Cannot find -to " << csName << nl + << "available coordinateSystems: " << csLst.toc() << nl + << exit(FatalError); + } + + toCsys.reset(new coordinateSystem(csLst[csId])); + } + + + // maybe fix this later + if (fromCsys.valid() && toCsys.valid()) + { + FatalErrorIn(args.executable()) + << "Only allowed -from or -to option at the moment." + << exit(FatalError); + } + } + + scalar scaleFactor = 0; + if (args.options().found("scale")) + { + IStringStream(args.options()["scale"])() >> scaleFactor; + } + + fileName importName(params[0]); + fileName exportName(params[1]); + + if (importName == exportName) + { + FatalErrorIn(args.executable()) + << "Output file " << exportName << " would overwrite input file." + << exit(FatalError); + } + + if + ( + !meshedSurface::canRead(importName.ext(), true) + || !meshedSurface::canWrite(exportName.ext(), true) + ) + { + return 1; + } + + + { + meshedSurface surf(importName); + + if (args.options().found("clean")) + { + surf.cleanup(true); + surf.checkOrientation(true); + } + + if (fromCsys.valid()) + { + tmp<pointField> tpf = fromCsys().localPosition(surf.points()); + surf.movePoints(tpf()); + } + + if (toCsys.valid()) + { + tmp<pointField> tpf = toCsys().globalPosition(surf.points()); + surf.movePoints(tpf()); + } + + Info<< "writing " << exportName; + if (scaleFactor <= 0) + { + Info<< " without scaling" << endl; + } + else + { + Info<< " with scaling " << scaleFactor << endl; + surf.scalePoints(scaleFactor); + } + surf.write(exportName); + } + + Info<< "\nEnd\n" << endl; + + return 0; +} + +// ************************************************************************* // diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H index 2216a22f9fa..0498bce023e 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.H +++ b/src/surfMesh/MeshedSurface/MeshedSurface.H @@ -117,23 +117,6 @@ private: //- Read OpenFOAM Surface format bool read(Istream&); - -protected: - - // Protected Member functions - - //- Return non-const access to global points - pointField& points() - { - return const_cast<pointField&>(ParentType::points()); - } - - //- Return non-const access to the faces - List<Face>& faces() - { - return static_cast<List<Face> &>(*this); - } - public: //- Runtime type information @@ -308,12 +291,24 @@ public: return ParentType::points(); } + //- Return non-const access to global points + pointField& points() + { + return const_cast<pointField&>(ParentType::points()); + } + //- Return const access to the faces const List<Face>& faces() const { return static_cast<const List<Face> &>(*this); } + //- Return non-const access to the faces + List<Face>& faces() + { + return static_cast<List<Face> &>(*this); + } + const surfGroupList& patches() const { return patches_; diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H index dd803e93f95..ad3968acb9b 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H @@ -128,8 +128,6 @@ private: protected: - // Static protected functions - // Protected Member functions //- Sets default patch names based on the maximum patch number @@ -148,24 +146,6 @@ protected: //- Sets patch names from hashed values (name -> id) void setPatches(const HashTable<label>& groupToPatch); - //- Return non-const access to global points - pointField& points() - { - return const_cast<pointField&>(ParentType::points()); - } - - //- Return non-const access to the faces - List<Face>& faces() - { - return static_cast<List<Face> &>(*this); - } - - //- Return non-const access to the region Ids - List<label>& regions() - { - return regions_; - } - public: //- Runtime type information @@ -338,23 +318,43 @@ public: return ParentType::points(); } + //- Return non-const access to global points + pointField& points() + { + return const_cast<pointField&>(ParentType::points()); + } + //- Return const access to the faces const List<Face>& faces() const { return static_cast<const List<Face> &>(*this); } + //- Return non-const access to the faces + List<Face>& faces() + { + return static_cast<List<Face> &>(*this); + } + //- Return const access to the regions const List<label>& regions() const { return regions_; } + //- Return non-const access to the region Ids + List<label>& regions() + { + return regions_; + } + + //- Return const access to the patches const surfPatchIdentifierList& patches() const { return patches_; } + //- Return non-const access to the patches surfPatchIdentifierList& patches() { return patches_; -- GitLab