From 85190a16b608c080b37dc2cd32f3e33cc4903802 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 11 Feb 2011 12:32:11 +0000 Subject: [PATCH] ENH: featureEdgeMesh : moved new stuff to extendedFeatureEdgeMesh --- .../surfaceFeatureExtract.C | 37 +- src/edgeMesh/Make/files | 3 + .../extendedFeatureEdgeMesh.C | 1028 +++++++++++++++++ .../extendedFeatureEdgeMesh.H | 377 ++++++ .../extendedFeatureEdgeMeshI.H} | 53 +- .../featureEdgeMesh/featureEdgeMesh.C | 953 +-------------- .../featureEdgeMesh/featureEdgeMesh.H | 304 +---- 7 files changed, 1504 insertions(+), 1251 deletions(-) create mode 100644 src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.C create mode 100644 src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.H rename src/edgeMesh/{featureEdgeMesh/featureEdgeMeshI.H => extendedFeatureEdgeMesh/extendedFeatureEdgeMeshI.H} (66%) diff --git a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C index b0d3d83ec0..6d83d18363 100644 --- a/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C +++ b/applications/utilities/surface/surfaceFeatureExtract/surfaceFeatureExtract.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,6 +36,7 @@ Description #include "Time.H" #include "surfaceFeatures.H" #include "featureEdgeMesh.H" +#include "extendedFeatureEdgeMesh.H" #include "treeBoundBox.H" #include "meshTools.H" #include "OFstream.H" @@ -298,20 +299,46 @@ int main(int argc, char *argv[]) // Extracting and writing a featureEdgeMesh - Pout<< nl << "Writing featureEdgeMesh to constant/featureEdgeMesh." - << endl; - - featureEdgeMesh feMesh + extendedFeatureEdgeMesh feMesh ( newSet, runTime, surfFileName.lessExt().name() + ".featureEdgeMesh" ); + Info<< nl << "Writing extendedFeatureEdgeMesh to " << feMesh.objectPath() + << endl; + + feMesh.writeObj(surfFileName.lessExt().name()); feMesh.write(); + + // Write a featureEdgeMesh for backwards compatibility + { + featureEdgeMesh bfeMesh + ( + IOobject + ( + surfFileName.lessExt().name() + ".eMesh", // name + runTime.constant(), // instance + "triSurface", + runTime, // registry + IOobject::NO_READ, + IOobject::AUTO_WRITE, + false + ), + feMesh.points(), + feMesh.edges() + ); + + Info<< nl << "Writing featureEdgeMesh to " + << bfeMesh.objectPath() << endl; + + bfeMesh.regIOobject::write(); + } + Info<< "End\n" << endl; return 0; diff --git a/src/edgeMesh/Make/files b/src/edgeMesh/Make/files index cdad239999..52f985de8c 100644 --- a/src/edgeMesh/Make/files +++ b/src/edgeMesh/Make/files @@ -20,7 +20,10 @@ $(edgeFormats)/starcd/STARCDedgeFormatRunTime.C $(edgeFormats)/vtk/VTKedgeFormat.C $(edgeFormats)/vtk/VTKedgeFormatRunTime.C +extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.C + featureEdgeMesh/featureEdgeMesh.C + LIB = $(FOAM_LIBBIN)/libedgeMesh diff --git a/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.C b/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.C new file mode 100644 index 0000000000..c4f536e209 --- /dev/null +++ b/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMesh.C @@ -0,0 +1,1028 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-2011 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 3 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, see . + +\*---------------------------------------------------------------------------*/ + +#include "extendedFeatureEdgeMesh.H" +#include "triSurface.H" +#include "Random.H" +#include "Time.H" +#include "meshTools.H" +#include "linePointRef.H" +#include "ListListOps.H" +#include "OFstream.H" +#include "IFstream.H" +#include "unitConversion.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(Foam::extendedFeatureEdgeMesh, 0); + +Foam::scalar Foam::extendedFeatureEdgeMesh::cosNormalAngleTol_ = + Foam::cos(degToRad(0.1)); + + +Foam::label Foam::extendedFeatureEdgeMesh::convexStart_ = 0; + + +Foam::label Foam::extendedFeatureEdgeMesh::externalStart_ = 0; + + +Foam::label Foam::extendedFeatureEdgeMesh::nPointTypes = 4; + + +Foam::label Foam::extendedFeatureEdgeMesh::nEdgeTypes = 5; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::extendedFeatureEdgeMesh::extendedFeatureEdgeMesh(const IOobject& io) +: + regIOobject(io), + edgeMesh(pointField(0), edgeList(0)), + concaveStart_(0), + mixedStart_(0), + nonFeatureStart_(0), + internalStart_(0), + flatStart_(0), + openStart_(0), + multipleStart_(0), + normals_(0), + edgeDirections_(0), + edgeNormals_(0), + featurePointNormals_(0), + regionEdges_(0), + edgeTree_(), + edgeTreesByType_() +{ + if + ( + io.readOpt() == IOobject::MUST_READ + || io.readOpt() == IOobject::MUST_READ_IF_MODIFIED + || (io.readOpt() == IOobject::READ_IF_PRESENT && headerOk()) + ) + { + if (readOpt() == IOobject::MUST_READ_IF_MODIFIED) + { + WarningIn + ( + "extendedFeatureEdgeMesh::extendedFeatureEdgeMesh" + "(const IOobject&)" + ) << "Specified IOobject::MUST_READ_IF_MODIFIED but class" + << " does not support automatic rereading." + << endl; + } + + Istream& is = readStream(typeName); + + is >> *this + >> concaveStart_ + >> mixedStart_ + >> nonFeatureStart_ + >> internalStart_ + >> flatStart_ + >> openStart_ + >> multipleStart_ + >> normals_ + >> edgeNormals_ + >> featurePointNormals_ + >> regionEdges_; + + close(); + + { + // Calculate edgeDirections + + const edgeList& eds(edges()); + + const pointField& pts(points()); + + edgeDirections_.setSize(eds.size()); + + forAll(eds, eI) + { + edgeDirections_[eI] = eds[eI].vec(pts); + } + + edgeDirections_ /= mag(edgeDirections_); + } + } + + if (debug) + { + Pout<< "extendedFeatureEdgeMesh::extendedFeatureEdgeMesh :" + << " constructed from IOobject :" + << " points:" << points().size() + << " edges:" << edges().size() + << endl; + } +} + + +Foam::extendedFeatureEdgeMesh::extendedFeatureEdgeMesh +( + const IOobject& io, + const extendedFeatureEdgeMesh& fem +) +: + regIOobject(io), + edgeMesh(fem), + concaveStart_(fem.concaveStart()), + mixedStart_(fem.mixedStart()), + nonFeatureStart_(fem.nonFeatureStart()), + internalStart_(fem.internalStart()), + flatStart_(fem.flatStart()), + openStart_(fem.openStart()), + multipleStart_(fem.multipleStart()), + normals_(fem.normals()), + edgeDirections_(fem.edgeDirections()), + edgeNormals_(fem.edgeNormals()), + featurePointNormals_(fem.featurePointNormals()), + regionEdges_(fem.regionEdges()), + edgeTree_(), + edgeTreesByType_() +{} + + +Foam::extendedFeatureEdgeMesh::extendedFeatureEdgeMesh +( + const IOobject& io, + const Xfer& pointLst, + const Xfer& edgeLst +) +: + regIOobject(io), + edgeMesh(pointLst, edgeLst), + concaveStart_(0), + mixedStart_(0), + nonFeatureStart_(0), + internalStart_(0), + flatStart_(0), + openStart_(0), + multipleStart_(0), + normals_(0), + edgeDirections_(0), + edgeNormals_(0), + featurePointNormals_(0), + regionEdges_(0), + edgeTree_(), + edgeTreesByType_() +{} + + +Foam::extendedFeatureEdgeMesh::extendedFeatureEdgeMesh +( + const surfaceFeatures& sFeat, + const objectRegistry& obr, + const fileName& sFeatFileName +) +: + regIOobject + ( + IOobject + ( + sFeatFileName, + obr.time().constant(), + "extendedFeatureEdgeMesh", + obr, + IOobject::NO_READ, + IOobject::NO_WRITE + ) + ), + edgeMesh(pointField(0), edgeList(0)), + concaveStart_(-1), + mixedStart_(-1), + nonFeatureStart_(-1), + internalStart_(-1), + flatStart_(-1), + openStart_(-1), + multipleStart_(-1), + normals_(0), + edgeDirections_(0), + edgeNormals_(0), + featurePointNormals_(0), + regionEdges_(0), + edgeTree_(), + edgeTreesByType_() +{ + // Extract and reorder the data from surfaceFeatures + + // References to the surfaceFeatures data + const triSurface& surf(sFeat.surface()); + const pointField& sFeatLocalPts(surf.localPoints()); + const edgeList& sFeatEds(surf.edges()); + + // Filling the extendedFeatureEdgeMesh with the raw geometrical data. + + label nFeatEds = sFeat.featureEdges().size(); + + DynamicList tmpPts; + edgeList eds(nFeatEds); + DynamicList norms; + vectorField edgeDirections(nFeatEds); + labelListList edgeNormals(nFeatEds); + DynamicList