diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index 65561dfcb72d211de01cd88e77691fcd3b2da01e..cb4f795bc662fa13e9cc8a80dc0f873b9baf3f98 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -29,7 +29,6 @@ License #include "IFstream.H" #include "OFstream.H" #include "Time.H" -#include "SortableList.H" #include "ListOps.H" #include "polyBoundaryMesh.H" #include "polyMesh.H" @@ -42,38 +41,14 @@ License template<class Face> Foam::wordHashSet Foam::MeshedSurface<Face>::readTypes() { - wordHashSet known(2*fileExtensionConstructorTablePtr_->size()); - - forAllIter - ( - typename fileExtensionConstructorTable::iterator, - *fileExtensionConstructorTablePtr_, - iter - ) - { - known.insert(iter.key()); - } - - return known; + return wordHashSet(*fileExtensionConstructorTablePtr_); } template<class Face> Foam::wordHashSet Foam::MeshedSurface<Face>::writeTypes() { - wordHashSet supported(2*writefileExtensionMemberFunctionTablePtr_->size()); - - forAllIter - ( - typename writefileExtensionMemberFunctionTable::iterator, - *writefileExtensionMemberFunctionTablePtr_, - iter - ) - { - supported.insert(iter.key()); - } - - return supported; + return wordHashSet(*writefileExtensionMemberFunctionTablePtr_); } @@ -91,11 +66,16 @@ bool Foam::MeshedSurface<Face>::canReadType { return true; } - - wordHashSet available = readTypes(); - available += SiblingType::readTypes(); - - return checkSupport(available, ext, verbose, "reading"); + else + { + return checkSupport + ( + readTypes() | SiblingType::readTypes(), + ext, + verbose, + "reading" + ); + } } @@ -141,8 +121,9 @@ void Foam::MeshedSurface<Face>::write { if (debug) { - Info<< "MeshedSurface::write(const fileName&, const MeshedSurface&) : " - "writing MeshedSurface to " << fName + Info<< "MeshedSurface::write" + "(const fileName&, const MeshedSurface&) : " + "writing to " << fName << endl; } diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C index 07d2110f2d61ec7eab6c4e1228b3435da6d448a5..b37bc840205871c3356c2c5da7bc511f9b75e57f 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C +++ b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C @@ -69,7 +69,7 @@ Foam::MeshedSurface<Face>::New ( "MeshedSurface<Face>::New" "(const fileName&, const word&) : " - "constructing UnsortedMeshedSurface" + "constructing MeshedSurface" ) << "Unknown file extension " << ext << nl << nl << "Valid types are :" << nl << supported diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C index 2804d867dbdb03fce3745ed4de96c74ce6c550f3..a4273ec54038f40da13e1f49eb0f2e4df4e9617e 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C @@ -29,11 +29,8 @@ License #include "IFstream.H" #include "OFstream.H" #include "Time.H" -#include "boundBox.H" #include "polyBoundaryMesh.H" #include "polyMesh.H" -#include "primitivePatch.H" -#include "SortableList.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -42,38 +39,14 @@ License template<class Face> Foam::wordHashSet Foam::UnsortedMeshedSurface<Face>::readTypes() { - wordHashSet supported(2*fileExtensionConstructorTablePtr_->size()); - - forAllIter - ( - typename fileExtensionConstructorTable::iterator, - *fileExtensionConstructorTablePtr_, - iter - ) - { - supported.insert(iter.key()); - } - - return supported; + return wordHashSet(*fileExtensionConstructorTablePtr_); } template<class Face> Foam::wordHashSet Foam::UnsortedMeshedSurface<Face>::writeTypes() { - wordHashSet supported(2*writefileExtensionMemberFunctionTablePtr_->size()); - - forAllIter - ( - typename writefileExtensionMemberFunctionTable::iterator, - *writefileExtensionMemberFunctionTablePtr_, - iter - ) - { - supported.insert(iter.key()); - } - - return supported; + return wordHashSet(*writefileExtensionMemberFunctionTablePtr_); } @@ -89,11 +62,16 @@ bool Foam::UnsortedMeshedSurface<Face>::canReadType { return true; } - - wordHashSet available = readTypes(); - available += SiblingType::readTypes();; - - return checkSupport(available, ext, verbose, "reading"); + else + { + return checkSupport + ( + readTypes() | SiblingType::readTypes(), + ext, + verbose, + "reading" + ); + } } @@ -139,8 +117,9 @@ void Foam::UnsortedMeshedSurface<Face>::write { if (debug) { - Info<< "UnsortedMeshedSurface::write(const fileName&, const UnsortedMeshedSurface&) : " - "writing UnsortedMeshedSurface to " << fName + Info<< "UnsortedMeshedSurface::write" + "(const fileName&, const UnsortedMeshedSurface&) : " + "writing to " << fName << endl; } diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H index 779a85ba7a649f65ae8bd79252d16b037b4e472b..b95dfd7e20b3186da0de004f57cb97bfb675dd7d 100644 --- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H @@ -107,37 +107,37 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface - // The output is always sorted by regions. + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // The output is always sorted by regions. + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is always sorted by regions. static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is always sorted by regions. static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C index 852622a8dccaa3af03a354488acd18ee245a90ed..6e2ea87e9195a031839069dabd5655a924d285d3 100644 --- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C @@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, AC3DsurfaceFormat, face, write, @@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, AC3DsurfaceFormat, triFace, write, @@ -76,7 +76,7 @@ addNamedTemplatedToMemberFunctionSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, AC3DsurfaceFormat, face, write, @@ -85,7 +85,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, AC3DsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H index 1e22ffec4d8a152866e541c4bcc98cdb9abb6617..fefe168db813d0dea72f2ed7d2a19d2bf15e57d1 100644 --- a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H @@ -95,37 +95,37 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface - // The output is sorted by regions + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // The output is sorted by regions + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by regions static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by regions static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C index a090693ff504514ad6b3551bc815475b59c91b2c..1675ee289a94aed7e095b8d7dcb7a39d3dd56d00 100644 --- a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C @@ -55,7 +55,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, GTSsurfaceFormat, face, write, @@ -64,7 +64,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, GTSsurfaceFormat, triFace, write, @@ -72,10 +72,9 @@ addNamedTemplatedToMemberFunctionSelectionTable gts ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, GTSsurfaceFormat, face, write, @@ -84,7 +83,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, GTSsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H index e5c9d92b60ee0187c4279a0ac190fe489ee90068..6545592730d7264754a738eca7f386b3a89a87c3 100644 --- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H @@ -109,37 +109,37 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface - // The output is sorted by regions + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // The output is sorted by regions + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by regions static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by regions static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C index f7ec7482944df45d158286bbe29c0228444d2b4a..64bc69760fa51ee255cc483051fe560f233d7bee 100644 --- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C @@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, OBJsurfaceFormat, face, write, @@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, OBJsurfaceFormat, triFace, write, @@ -73,10 +73,9 @@ addNamedTemplatedToMemberFunctionSelectionTable obj ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, OBJsurfaceFormat, face, write, @@ -85,7 +84,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, OBJsurfaceFormat, triFace, write, @@ -93,6 +92,7 @@ addNamedTemplatedToMemberFunctionSelectionTable obj ); + } } diff --git a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H index 6b8e8ac69594151c0a12fbdabcf2e2c31a73aa71..242bacbd207483879b7f68c3b9457ca3e0866745 100644 --- a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H @@ -91,37 +91,37 @@ public: // Member Functions - //- Write UnsortedMeshedSurface - // The output is sorted by region. + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // The output is sorted by region. + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by region. static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by region. static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C index 16ab5a06dce2055423245b83a09b70a8cf782eea..86cb25aa3203984448e326d4abc3c4516bf1f5b4 100644 --- a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C @@ -38,7 +38,7 @@ namespace fileFormats addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, SMESHsurfaceFormat, face, write, @@ -47,7 +47,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, SMESHsurfaceFormat, triFace, write, @@ -55,10 +55,9 @@ addNamedTemplatedToMemberFunctionSelectionTable smesh ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, SMESHsurfaceFormat, face, write, @@ -67,7 +66,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, SMESHsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H index 1afb83496b4acacccc8d7e24f625ec3f7038b305..6a47537881a4a69677db0a8b2fbbb1de7979c72f 100644 --- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H @@ -119,19 +119,19 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface - // The output is sorted by regions + //- Write MeshedSurface static void write ( const fileName&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // The output is sorted by regions static void write ( const fileName&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); //- Write to Ostream as one large file - not really useful diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C index 7f34860feab670ceaa6dcb7f7819abbf4dd1ce26..5cf59da6c8aab69cc43d5f6cafb4d581e0be96af 100644 --- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C @@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STARCDsurfaceFormat, face, write, @@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STARCDsurfaceFormat, triFace, write, @@ -76,7 +76,7 @@ addNamedTemplatedToMemberFunctionSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STARCDsurfaceFormat, face, write, @@ -85,7 +85,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STARCDsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C index cce059b27afaa68c860af3a4245c13ecf5ad57b5..5367e130a65aa36666233a830410a4fb3936add5 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C @@ -25,6 +25,7 @@ License \*---------------------------------------------------------------------------*/ #include "STLsurfaceFormat.H" +#include "ListOps.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -289,35 +290,70 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read // read in the values STLsurfaceFormatCore reader(fName); - // generate the faces: - List<Face>& faceLst = this->storedFaces(); - faceLst.setSize(reader.regions().size()); - - // transfer + // transfer points this->storedPoints().transfer(reader.points()); - this->storedRegions().transfer(reader.regions()); - label ptI = 0; - forAll(faceLst, faceI) + // get the original region information + List<word> names(xferMove(reader.names())); + List<label> unsortedRegions(xferMove(reader.regions())); + + // and determine the sorted order: + // avoid SortableList since we discard the main list anyhow + List<label> faceMap; + sortedOrder(unsortedRegions, faceMap); + + // generate the sorted faces and sorted regions: + List<Face> faceLst(faceMap.size()); + + DynamicList<label> dynPatchSizes; + label prevRegion = -1; + label regionSize = 0; + + forAll(faceMap, faceI) { - triFace fTri; + const label startPt = 3*faceMap[faceI]; + const label regionI = unsortedRegions[faceMap[faceI]]; - fTri[0] = ptI++; - fTri[1] = ptI++; - fTri[2] = ptI++; + faceLst[faceI] = triFace(startPt, startPt+1, startPt+2); - faceLst[faceI] = fTri; + if (prevRegion != regionI) + { + if (regionSize) + { + dynPatchSizes.append(regionSize); + } + prevRegion = regionI; + regionSize = 0; + } + regionSize++; } - if (reader.binary()) + if (regionSize) { - this->setPatches(reader.maxRegionId()); + dynPatchSizes.append(regionSize); } - else + + // transfer: + this->storedFaces().transfer(faceLst); + unsortedRegions.clear(); + faceMap.clear(); + + label start = 0; + surfGroupList newPatches(dynPatchSizes.size()); + forAll(newPatches, patchI) { - this->setPatches(reader.groupToPatch()); + newPatches[patchI] = surfGroup + ( + names[patchI], + dynPatchSizes[patchI], + start, + patchI + ); + + start += dynPatchSizes[patchI]; } + this->addPatches(newPatches); this->stitchFaces(SMALL); return true; } diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H index da5f9e904761ddbc71b49df58e57dbab49287d68..8d3f7c662d56b8a43f182fe35a1cf4f937ebab29 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H @@ -28,6 +28,10 @@ Class Description Provide a means of reading/writing STL files (ASCII and binary). +Note + For efficiency, the regions are sorted before creating the faces. + The class is thus derived from MeshedSurface. + SourceFiles STLsurfaceFormat.C STLsurfaceFormatASCII.L @@ -49,13 +53,13 @@ namespace fileFormats { /*---------------------------------------------------------------------------*\ - Class STLsurfaceFormat Declaration + Class STLsurfaceFormat Declaration \*---------------------------------------------------------------------------*/ template<class Face> class STLsurfaceFormat : - public UnsortedMeshedSurface<Face> + public MeshedSurface<Face> { // Private Member Functions @@ -106,14 +110,13 @@ public: // Selectors - //- Read file and return keyedSurface //- Read file and return surface - static autoPtr<UnsortedMeshedSurface<Face> > New + static autoPtr<MeshedSurface<Face> > New ( const fileName& fName ) { - return autoPtr<UnsortedMeshedSurface<Face> > + return autoPtr<MeshedSurface<Face> > ( new STLsurfaceFormat<Face>(fName) ); @@ -128,33 +131,33 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface (as ASCII) sorted by region + //- Write MeshedSurface (as ASCII) static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write MeshedSurface (as ASCII) + //- Write MeshedSurface static void write ( - Ostream&, + const fileName&, const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // ASCII output is sorted by region; binary output is unsorted + //- Write UnsortedMeshedSurface (as ASCII) sorted by region static void write ( - const fileName&, + Ostream&, const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // ASCII output is sorted by region; binary output is unsorted static void write ( const fileName&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); //- Write object (only ASCII output) diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L index 0d38a882a5c317a1c3313941ea2f5010a5b29e4a..e01b96fbb85162286583c337f0facce39d6775bf 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L @@ -72,14 +72,14 @@ class STLASCIILexer { // Private data - short groupID_; // current region - short maxGroupID_; // max region + label groupID_; // current region label lineNo_; word startError_; DynamicList<point> points_; DynamicList<label> facets_; - HashTable<label> groupToPatch_; + DynamicList<word> names_; + HashTable<label> nameIndex_; public: @@ -110,11 +110,10 @@ public: } //- region names - HashTable<label>& groupToPatch() + DynamicList<word>& names() { - return groupToPatch_; + return names_; } - }; @@ -122,7 +121,6 @@ STLASCIILexer::STLASCIILexer(istream* is, const label approxNpoints) : yyFlexLexer(is), groupID_(-1), - maxGroupID_(-1), lineNo_(1), points_(approxNpoints), facets_(approxNpoints) @@ -237,37 +235,35 @@ endsolid {space}("endsolid"|"ENDSOLID")({some_space}{word})* } <readSolidName>{string} { - word group(Foam::string::validate<word>(YYText())); - - HashTable<label>::const_iterator findGroup = - groupToPatch_.find(group); + word name(Foam::string::validate<word>(YYText())); - if (findGroup != groupToPatch_.end()) + HashTable<label>::const_iterator fnd = nameIndex_.find(name); + if (fnd != nameIndex_.end()) { - groupID_ = findGroup(); + groupID_ = fnd(); } else { - groupID_ = ++maxGroupID_; - groupToPatch_.insert(group, groupID_); + groupID_ = names_.size(); + names_.append(name); + nameIndex_.insert(name, groupID_); } BEGIN(INITIAL); } <readSolidName>{space}\n { - word group("solid"); + word name("solid"); - HashTable<label>::const_iterator findGroup = - groupToPatch_.find(group); - - if (findGroup != groupToPatch_.end()) + HashTable<label>::const_iterator fnd = nameIndex_.find(name); + if (fnd != nameIndex_.end()) { - groupID_ = findGroup(); + groupID_ = fnd(); } else { - groupID_ = ++maxGroupID_; - groupToPatch_.insert(group, groupID_); + groupID_ = names_.size(); + names_.append(name); + nameIndex_.insert(name, groupID_); } lineNo_++; @@ -394,7 +390,8 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readASCII // transfer to normal lists points_.transfer(lexer.points()); regions_.transfer(lexer.facets()); - groupToPatch_.transfer(lexer.groupToPatch()); + names_.transfer(lexer.names()); + return true; } diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C index f05748b2f6b23b4a20afd537eec136bf285e599b..7aa29789e2ec8d10517437de0dbba2cf8c901a84 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C @@ -26,6 +26,7 @@ License #include "STLsurfaceFormatCore.H" #include "OSspecific.H" +#include "Map.H" #undef DEBUG_STLBINARY @@ -143,6 +144,9 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY points_.setSize(3*nTris); regions_.setSize(nTris); + Map<label> regionToPatch; + DynamicList<word> dynNames; + label ptI = 0; forAll(regions_, faceI) { @@ -155,20 +159,31 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY points_[ptI++] = stlTri.c(); // interprete colour as a region - regions_[faceI] = stlTri.region(); - if (maxRegionId_ < stlTri.region()) + const label stlRegion = stlTri.region(); + + Map<label>::const_iterator fnd = regionToPatch.find(stlRegion); + label regionI; + if (fnd != regionToPatch.end()) + { + regionI = fnd(); + } + else { - maxRegionId_ = stlTri.region(); + regionI = dynNames.size(); + dynNames.append(word("patch") + ::Foam::name(regionI)); + regionToPatch.insert(stlRegion, regionI); } + regions_[faceI] = regionI; + #ifdef DEBUG_STLBINARY - if (prevRegion != stlTri.region()) + if (prevRegion != regionI) { if (prevRegion != -1) { Info<< "endsolid region" << prevRegion << nl; } - prevRegion = stlTri.region(); + prevRegion = regionI; Info<< "solid region" << prevRegion << nl; } @@ -183,6 +198,8 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY #endif } + names_.transfer(dynNames); + return true; } @@ -197,8 +214,7 @@ Foam::fileFormats::STLsurfaceFormatCore::STLsurfaceFormatCore binary_(false), points_(0), regions_(0), - maxRegionId_(0), - groupToPatch_(0) + names_(0) { off_t fileSize = Foam::size(fName); @@ -228,14 +244,17 @@ void Foam::fileFormats::STLsurfaceFormatCore::writeHeaderBINARY unsigned int nTris ) { - // Write the STL header, avoid possible trailing junk - string header("STL binary file", headerSize); - for (label i = header.size(); i < headerSize; ++i) + // STL header with extra information about nTris + char header[headerSize]; + sprintf(header, "STL binary file %u facets", nTris); + + // avoid trailing junk + for (size_t i = strlen(header); i < headerSize; ++i) { header[i] = 0; } - os.write(header.c_str(), headerSize); + os.write(header, headerSize); os.write(reinterpret_cast<char*>(&nTris), sizeof(unsigned int)); } diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H index 6fcc49455373135af7b98589e2d112102979eae0..399aa0ecb78e8e56c7b7a4b759e1c5ecdd7a4449 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H @@ -67,9 +67,8 @@ class STLsurfaceFormatCore //- The regions associated with the faces List<label> regions_; - label maxRegionId_; - - HashTable<label> groupToPatch_; + //- The solid names, in the order of their first appearance + List<word> names_; // Private Member Functions @@ -93,7 +92,7 @@ public: // Static Data //- The number of bytes in the STL binary header - static const int headerSize = 80; + static const unsigned int headerSize = 80; // Static Member Functions @@ -128,7 +127,7 @@ public: { points_.clear(); regions_.clear(); - groupToPatch_.clear(); + names_.clear(); } //- Return full access to the faces @@ -143,16 +142,10 @@ public: return regions_; } - //- The max regionId when reading binary files - label maxRegionId() const - { - return maxRegionId_; - } - - //- The group/patch information when reading ASCII files - const HashTable<label>& groupToPatch() const + //- The list of solid names in the order of their first appearance + List<word>& names() { - return groupToPatch_; + return names_; } }; diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C index 6c8f0744bd90ddb866ecc2a691686715ac03cab6..39ef3de94b1f17cb7873a8b8683d13126a4bec59 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C @@ -38,7 +38,7 @@ namespace fileFormats addNamedTemplatedToRunTimeSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, face, fileExtension, @@ -46,7 +46,7 @@ addNamedTemplatedToRunTimeSelectionTable ); addNamedTemplatedToRunTimeSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, triFace, fileExtension, @@ -55,7 +55,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToRunTimeSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, face, fileExtension, @@ -63,7 +63,7 @@ addNamedTemplatedToRunTimeSelectionTable ); addNamedTemplatedToRunTimeSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, triFace, fileExtension, @@ -73,7 +73,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, face, write, @@ -82,7 +82,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, triFace, write, @@ -92,7 +92,7 @@ addNamedTemplatedToMemberFunctionSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, face, write, @@ -101,7 +101,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, STLsurfaceFormat, triFace, write, @@ -109,10 +109,9 @@ addNamedTemplatedToMemberFunctionSelectionTable stlb ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STLsurfaceFormat, face, write, @@ -121,7 +120,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STLsurfaceFormat, triFace, write, @@ -131,7 +130,7 @@ addNamedTemplatedToMemberFunctionSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STLsurfaceFormat, face, write, @@ -140,7 +139,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, STLsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C index 49d1d8fda170fda482a33859fe793258f700e271..cb8193eee86c2bdb4cd3e1ece477b28b37b15a55 100644 --- a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C +++ b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C @@ -165,6 +165,7 @@ Foam::fileFormats::surfaceFormatsCore::findMeshName return findMeshName(d, meshSubDir); } + // Returns patch info. // Sets faceMap to the indexing according to patch numbers. // Patch numbers start at 0. diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C index 25c83c82f500d49c17e9ea6fecbe6f73fdb0f39b..7c552a81c8840d189dc03faa17a00f602bbb7841 100644 --- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C @@ -156,12 +156,11 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read word rawName(lineStream); word groupName("patch" + rawName(1, rawName.size()-1)); - HashTable<label>::const_iterator findGroup = - groupToPatch.find(groupName); + HashTable<label>::const_iterator fnd = groupToPatch.find(groupName); - if (findGroup != groupToPatch.end()) + if (fnd != groupToPatch.end()) { - groupID = findGroup(); + groupID = fnd(); } else { @@ -187,7 +186,6 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read this->storedPoints().transfer(pointLst); this->storedRegions().transfer(regionLst); - label ptI = 0; forAll(faceLst, faceI) { const label startPt = 3 * faceI; diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H index 03f098e40355fe6021350ba9da27ec2f3a5aeff2..ac5e473bf309ccbbe7d7dad963a1d5e6a5100d57 100644 --- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H @@ -103,37 +103,37 @@ public: //- Read from file virtual bool read(const fileName&); - //- Write UnsortedMeshedSurface - // By default, the output is not sorted by regions + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // By default, the output is not sorted by regions + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // By default, the output is not sorted by regions static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // By default, the output is not sorted by regions static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C index 558109bc0dda0578087dc36cc537a668d9c22ce3..43e0cdf4925393eae8f8a856209d45692dafcc0c 100644 --- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C @@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, TRIsurfaceFormat, face, write, @@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, TRIsurfaceFormat, triFace, write, @@ -73,10 +73,9 @@ addNamedTemplatedToMemberFunctionSelectionTable tri ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, TRIsurfaceFormat, face, write, @@ -85,7 +84,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, TRIsurfaceFormat, triFace, write, diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H index a5942359645fea0a52095f5dbb71c97714db30b1..f1f5bf8224c58d72b26c8624beaf561f143170be 100644 --- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H +++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H @@ -88,37 +88,37 @@ public: // Write - //- Write UnsortedMeshedSurface - // By default, the output is not sorted by regions. + //- Write MeshedSurface static void write ( Ostream&, - const UnsortedMeshedSurface<Face>& + const MeshedSurface<Face>& ); - //- Write UnsortedMeshedSurface - // By default, the output is not sorted by regions. + //- Write MeshedSurface static void write ( const fileName& fName, - const UnsortedMeshedSurface<Face>& surf + const MeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); } - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // By default, the output is not sorted by regions. static void write ( Ostream&, - const MeshedSurface<Face>& + const UnsortedMeshedSurface<Face>& ); - //- Write MeshedSurface + //- Write UnsortedMeshedSurface + // By default, the output is not sorted by regions. static void write ( const fileName& fName, - const MeshedSurface<Face>& surf + const UnsortedMeshedSurface<Face>& surf ) { write(OFstream(fName)(), surf); diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C index 8bcfea2355f4855560a147741f8e9e4c26148218..7d461a0cd31c8cb47448f26b8409a0a939d38813 100644 --- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C +++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C @@ -38,7 +38,7 @@ namespace fileFormats addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, VTKsurfaceFormat, face, write, @@ -47,7 +47,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - UnsortedMeshedSurface, + MeshedSurface, VTKsurfaceFormat, triFace, write, @@ -55,10 +55,9 @@ addNamedTemplatedToMemberFunctionSelectionTable vtk ); - addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, VTKsurfaceFormat, face, write, @@ -67,7 +66,7 @@ addNamedTemplatedToMemberFunctionSelectionTable ); addNamedTemplatedToMemberFunctionSelectionTable ( - MeshedSurface, + UnsortedMeshedSurface, VTKsurfaceFormat, triFace, write, @@ -75,6 +74,7 @@ addNamedTemplatedToMemberFunctionSelectionTable vtk ); + } }