From 190bbd69de1feb663bf3d3ead69af112312b9eff Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@Germany> Date: Mon, 7 Dec 2009 13:06:03 +0100 Subject: [PATCH] add corners() method to boundBox --- .../surface/surfaceCheck/surfaceCheck.C | 114 ++++++++++++------ src/OpenFOAM/meshes/boundBox/boundBox.C | 20 +++ src/OpenFOAM/meshes/boundBox/boundBox.H | 2 + 3 files changed, 96 insertions(+), 40 deletions(-) diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index 854cea06991..da3bccb7d4b 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -37,7 +37,12 @@ License using namespace Foam; // Does face use valid vertices? -bool validTri(const bool verbose, const triSurface& surf, const label faceI) +bool validTri +( + const bool verbose, + const triSurface& surf, + const label faceI +) { // Simple check on indices ok. @@ -175,6 +180,11 @@ int main(int argc, char *argv[]) argList::addBoolOption("checkSelfIntersection"); argList::addBoolOption("verbose"); + argList::addBoolOption + ( + "blockMesh", + "write vertices/blocks for blockMeshDict" + ); argList args(argc, argv); @@ -182,7 +192,7 @@ int main(int argc, char *argv[]) bool verbose = args.optionFound("verbose"); fileName surfFileName(args.additionalArgs()[0]); - Pout<< "Reading surface from " << surfFileName << " ..." << nl << endl; + Info<< "Reading surface from " << surfFileName << " ..." << nl << endl; // Read @@ -191,9 +201,33 @@ int main(int argc, char *argv[]) triSurface surf(surfFileName); - Pout<< "Statistics:" << endl; - surf.writeStats(Pout); - Pout<< endl; + Info<< "Statistics:" << endl; + surf.writeStats(Info); + Info<< endl; + + // write bounding box corners + if (args.optionFound("blockMesh")) + { + pointField cornerPts = boundBox(surf.points()).corners(); + + Info<<"// blockMeshDict info" << nl; + + Info<<"vertices\n(" << nl; + forAll(cornerPts, ptI) + { + Info << " " << cornerPts[ptI] << nl; + } + + // number of divisions needs adjustment later + Info<<");\n" << nl + <<"blocks\n" + <<"(\n" + <<" hex (0 1 2 3 4 5 6 7) (10 10 10) simpleGrading (1 1 1)\n" + <<");\n" << nl; + + Info<<"edges();" << nl + <<"patches();" << endl; + } // Region sizes @@ -220,14 +254,14 @@ int main(int argc, char *argv[]) } } - Pout<< "Region\tSize" << nl + Info<< "Region\tSize" << nl << "------\t----" << nl; forAll(surf.patches(), patchI) { - Pout<< surf.patches()[patchI].name() << '\t' + Info<< surf.patches()[patchI].name() << '\t' << regionSize[patchI] << nl; } - Pout<< nl << endl; + Info<< nl << endl; } @@ -247,19 +281,19 @@ int main(int argc, char *argv[]) if (illegalFaces.size()) { - Pout<< "Surface has " << illegalFaces.size() + Info<< "Surface has " << illegalFaces.size() << " illegal triangles." << endl; OFstream str("illegalFaces"); - Pout<< "Dumping conflicting face labels to " << str.name() << endl + Info<< "Dumping conflicting face labels to " << str.name() << endl << "Paste this into the input for surfaceSubset" << endl; str << illegalFaces; } else { - Pout<< "Surface has no illegal triangles." << endl; + Info<< "Surface has no illegal triangles." << endl; } - Pout<< endl; + Info<< endl; } @@ -312,28 +346,28 @@ int main(int argc, char *argv[]) labelList binCount = countBins(0, 1, 20, triQ); - Pout<< "Triangle quality (equilateral=1, collapsed=0):" + Info<< "Triangle quality (equilateral=1, collapsed=0):" << endl; - OSstream& os = Pout; + OSstream& os = Info; os.width(4); scalar dist = (1.0 - 0.0)/20.0; scalar min = 0; forAll(binCount, binI) { - Pout<< " " << min << " .. " << min+dist << " : " + Info<< " " << min << " .. " << min+dist << " : " << 1.0/surf.size() * binCount[binI] << endl; min += dist; } - Pout<< endl; + Info<< endl; label minIndex = findMin(triQ); label maxIndex = findMax(triQ); - Pout<< " min " << triQ[minIndex] << " for triangle " << minIndex + Info<< " min " << triQ[minIndex] << " for triangle " << minIndex << nl << " max " << triQ[maxIndex] << " for triangle " << maxIndex << nl @@ -360,7 +394,7 @@ int main(int argc, char *argv[]) } OFstream str("badFaces"); - Pout<< "Dumping bad quality faces to " << str.name() << endl + Info<< "Dumping bad quality faces to " << str.name() << endl << "Paste this into the input for surfaceSubset" << nl << nl << endl; @@ -390,7 +424,7 @@ int main(int argc, char *argv[]) const edge& maxE = edges[maxEdgeI]; - Pout<< "Edges:" << nl + Info<< "Edges:" << nl << " min " << edgeMag[minEdgeI] << " for edge " << minEdgeI << " points " << localPoints[minE[0]] << localPoints[minE[1]] << nl @@ -411,7 +445,7 @@ int main(int argc, char *argv[]) const boundBox bb(localPoints); scalar smallDim = 1E-6 * bb.mag(); - Pout<< "Checking for points less than 1E-6 of bounding box (" + Info<< "Checking for points less than 1E-6 of bounding box (" << bb.span() << " meter) apart." << endl; @@ -450,7 +484,7 @@ int main(int argc, char *argv[]) if (edgeI == -1) { - Pout<< " close unconnected points " + Info<< " close unconnected points " << ptI << ' ' << localPoints[ptI] << " and " << prevPtI << ' ' << localPoints[prevPtI] @@ -460,7 +494,7 @@ int main(int argc, char *argv[]) } else { - Pout<< " small edge between points " + Info<< " small edge between points " << ptI << ' ' << localPoints[ptI] << " and " << prevPtI << ' ' << localPoints[prevPtI] @@ -471,7 +505,7 @@ int main(int argc, char *argv[]) } } - Pout<< "Found " << nClose << " nearby points." << nl + Info<< "Found " << nClose << " nearby points." << nl << endl; } @@ -516,25 +550,25 @@ int main(int argc, char *argv[]) if ((nSingleEdges != 0) || (nMultEdges != 0)) { - Pout<< "Surface is not closed since not all edges connected to " + Info<< "Surface is not closed since not all edges connected to " << "two faces:" << endl << " connected to one face : " << nSingleEdges << endl << " connected to >2 faces : " << nMultEdges << endl; - Pout<< "Conflicting face labels:" << problemFaces.size() << endl; + Info<< "Conflicting face labels:" << problemFaces.size() << endl; OFstream str("problemFaces"); - Pout<< "Dumping conflicting face labels to " << str.name() << endl + Info<< "Dumping conflicting face labels to " << str.name() << endl << "Paste this into the input for surfaceSubset" << endl; str << problemFaces; } else { - Pout<< "Surface is closed. All edges connected to two faces." << endl; + Info<< "Surface is closed. All edges connected to two faces." << endl; } - Pout<< endl; + Info<< endl; @@ -544,11 +578,11 @@ int main(int argc, char *argv[]) labelList faceZone; label numZones = surf.markZones(boolList(surf.nEdges(), false), faceZone); - Pout<< "Number of unconnected parts : " << numZones << endl; + Info<< "Number of unconnected parts : " << numZones << endl; if (numZones > 1) { - Pout<< "Splitting surface into parts ..." << endl << endl; + Info<< "Splitting surface into parts ..." << endl << endl; fileName surfFileNameBase(surfFileName.name()); @@ -585,7 +619,7 @@ int main(int argc, char *argv[]) + ".ftr" ); - Pout<< "writing part " << zone << " size " << subSurf.size() + Info<< "writing part " << zone << " size " << subSurf.size() << " to " << subFileName << endl; subSurf.write(subFileName); @@ -608,15 +642,15 @@ int main(int argc, char *argv[]) labelList normalZone; label numNormalZones = PatchTools::markZones(surf, borderEdge, normalZone); - Pout<< endl + Info<< endl << "Number of zones (connected area with consistent normal) : " << numNormalZones << endl; if (numNormalZones > 1) { - Pout<< "More than one normal orientation." << endl; + Info<< "More than one normal orientation." << endl; } - Pout<< endl; + Info<< endl; @@ -625,19 +659,19 @@ int main(int argc, char *argv[]) if (checkSelfIntersection) { - Pout<< "Checking self-intersection." << endl; + Info<< "Checking self-intersection." << endl; triSurfaceSearch querySurf(surf); surfaceIntersection inter(querySurf); if (inter.cutEdges().empty() && inter.cutPoints().empty()) { - Pout<< "Surface is not self-intersecting" << endl; + Info<< "Surface is not self-intersecting" << endl; } else { - Pout<< "Surface is self-intersecting" << endl; - Pout<< "Writing edges of intersection to selfInter.obj" << endl; + Info<< "Surface is self-intersecting" << endl; + Info<< "Writing edges of intersection to selfInter.obj" << endl; OFstream intStream("selfInter.obj"); forAll(inter.cutPoints(), cutPointI) @@ -654,11 +688,11 @@ int main(int argc, char *argv[]) intStream << "l " << e.start()+1 << ' ' << e.end()+1 << endl; } } - Pout<< endl; + Info<< endl; } - Pout<< "End\n" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/src/OpenFOAM/meshes/boundBox/boundBox.C b/src/OpenFOAM/meshes/boundBox/boundBox.C index 15de6f2cf7f..eb8ec29866d 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBox.C +++ b/src/OpenFOAM/meshes/boundBox/boundBox.C @@ -110,6 +110,26 @@ Foam::boundBox::boundBox(Istream& is) } +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::tmp<Foam::pointField> Foam::boundBox::corners() const +{ + tmp<pointField> tPts = tmp<pointField>(new pointField(8)); + pointField& pt = tPts(); + + pt[0] = min_; // min-x, min-y, min-z + pt[1] = point(max_.x(), min_.y(), min_.z()); // max-x, min-y, min-z + pt[2] = point(max_.x(), max_.y(), min_.z()); // max-x, max-y, min-z + pt[3] = point(min_.x(), max_.y(), min_.z()); // min-x, max-y, min-z + pt[4] = point(min_.x(), min_.y(), max_.z()); // min-x, min-y, max-z + pt[5] = point(max_.x(), min_.y(), max_.z()); // max-x, min-y, max-z + pt[6] = max_; // max-x, max-y, max-z + pt[7] = point(min_.x(), max_.y(), max_.z()); // min-x, max-y, max-z + + return tPts; +} + + // * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // Foam::Ostream& Foam::operator<<(Ostream& os, const boundBox& bb) diff --git a/src/OpenFOAM/meshes/boundBox/boundBox.H b/src/OpenFOAM/meshes/boundBox/boundBox.H index 38b852ef66a..29cfa1fe299 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBox.H +++ b/src/OpenFOAM/meshes/boundBox/boundBox.H @@ -171,6 +171,8 @@ public: return cmptAv(span()); } + //- Return corner points in an order corresponding to a 'hex' cell + tmp<pointField> corners() const; // Query -- GitLab