void Foam::fileFormats::OFSsurfaceFormat<Face>::write ( const fileName& filename, const MeshedSurfaceProxy<Face>& surf ) { const List<Face>& faceLst = surf.faces(); const List<label>& faceMap = surf.faceMap(); OFstream os(filename); if (!os.good()) { FatalErrorIn ( "fileFormats::OFSsurfaceFormat::write" "(const fileName&, const MeshedSurfaceProxy<Face>&)" ) << "Cannot open file for writing " << filename << exit(FatalError); } OFSsurfaceFormatCore::writeHeader(os, surf.points(), surf.surfZones()); const List<surfZone>& zones = surf.surfZones(); const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1); if (useFaceMap) { os << "\n// faces:" << nl << faceLst.size() << token::BEGIN_LIST << nl; label faceI = 0; forAll(zones, zoneI) { // Print all faces belonging to this zone const surfZone& zone = zones[zoneI]; forAll(zone, localFaceI) { os << faceLst[faceMap[faceI++]] << nl; } } os << token::END_LIST << nl; } else {
void Foam::fileFormats::X3DsurfaceFormat<Face>::write ( const fileName& filename, const MeshedSurfaceProxy<Face>& surf ) { const pointField& pointLst = surf.points(); const List<Face>& faceLst = surf.faces(); const List<label>& faceMap = surf.faceMap(); // for no zones, suppress the group name const List<surfZone>& zones = ( surf.surfZones().empty() ? surfaceFormatsCore::oneZone(faceLst, "") : surf.surfZones() ); const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1); OFstream os(filename); if (!os.good()) { FatalErrorIn ( "fileFormats::X3DsurfaceFormat::write" "(const fileName&, const MeshedSurfaceProxy<Face>&)" ) << "Cannot open file for writing " << filename << exit(FatalError); } writeHeader(os); os << "\n" "<Group>\n" " <Shape>\n"; writeAppearance(os); // NOTE: we could provide an optimized IndexedTriangleSet output for // triangulated surfaces too os << " <IndexedFaceSet coordIndex='\n"; label faceIndex = 0; forAll(zones, zoneI) { const surfZone& zone = zones[zoneI]; if (useFaceMap) { forAll(zone, localFaceI) { const Face& f = faceLst[faceMap[faceIndex++]]; forAll(f, fp) { os << f[fp] << ' '; } os << "-1\n"; } } else { forAll(zone, localFaceI) { const Face& f = faceLst[faceIndex++]; forAll(f, fp) { os << f[fp] << ' '; } os << "-1\n"; } } }
void Foam::fileFormats::SMESHsurfaceFormat<Face>::write ( const fileName& filename, const MeshedSurfaceProxy<Face>& surf ) { const pointField& pointLst = surf.points(); const List<Face>& faceLst = surf.faces(); const List<label>& faceMap = surf.faceMap(); const List<surfZone>& zones = ( surf.surfZones().empty() ? surfaceFormatsCore::oneZone(faceLst) : surf.surfZones() ); const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1); OFstream os(filename); if (!os.good()) { FatalErrorInFunction << "Cannot open file for writing " << filename << exit(FatalError); } // Write header os << "# tetgen .smesh file written " << clock::dateTime().c_str() << nl << "# <points count=\"" << pointLst.size() << "\">" << nl << pointLst.size() << " 3" << nl; // 3: dimensions // Write vertex coords forAll(pointLst, ptI) { const point& pt = pointLst[ptI]; os << ptI << ' ' << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl; } os << "# </points>" << nl << nl << "# <faces count=\"" << faceLst.size() << "\">" << endl; os << faceLst.size() << " 1" << endl; // one attribute: zone number label faceIndex = 0; forAll(zones, zoneI) { const surfZone& zone = zones[zoneI]; if (useFaceMap) { forAll(zone, localFaceI) { const Face& f = faceLst[faceMap[faceIndex++]]; os << f.size(); forAll(f, fp) { os << ' ' << f[fp]; } os << ' ' << zoneI << endl; } } else { forAll(zones[zoneI], localFaceI) { const Face& f = faceLst[faceIndex++]; os << f.size(); forAll(f, fp) { os << ' ' << f[fp]; } os << ' ' << zoneI << endl; } } }
void Foam::fileFormats::VTKsurfaceFormat<Face>::write ( const fileName& filename, const MeshedSurfaceProxy<Face>& surf ) { const pointField& pointLst = surf.points(); const List<Face>& faceLst = surf.faces(); const List<label>& faceMap = surf.faceMap(); const List<surfZone>& zones = ( surf.surfZones().size() > 1 ? surf.surfZones() : oneZone(faceLst) ); const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1); OFstream os(filename); if (!os.good()) { FatalErrorIn ( "fileFormats::VTKsurfaceFormat::write" "(const fileName&, const MeshedSurfaceProxy<Face>&)" ) << "Cannot open file for writing " << filename << exit(FatalError); } writeHeader(os, pointLst); writeHeaderPolygons(os, faceLst); label faceIndex = 0; forAll(zones, zoneI) { const surfZone& zone = zones[zoneI]; if (useFaceMap) { forAll(zone, localFaceI) { const Face& f = faceLst[faceMap[faceIndex++]]; os << f.size(); forAll(f, fp) { os << ' ' << f[fp]; } os << ' ' << nl; } } else { forAll(zone, localFaceI) { const Face& f = faceLst[faceIndex++]; os << f.size(); forAll(f, fp) { os << ' ' << f[fp]; } os << ' ' << nl; } } }
void Foam::fileFormats::WRLsurfaceFormat<Face>::write ( const fileName& filename, const MeshedSurfaceProxy<Face>& surf ) { const pointField& pointLst = surf.points(); const List<Face>& faceLst = surf.faces(); const List<label>& faceMap = surf.faceMap(); // for no zones, suppress the group name const List<surfZone>& zones = ( surf.surfZones().empty() ? surfaceFormatsCore::oneZone(faceLst, "") : surf.surfZones() ); const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1); OFstream os(filename); if (!os.good()) { FatalErrorInFunction << "Cannot open file for writing " << filename << exit(FatalError); } writeHeader(os, pointLst, faceLst.size(), zones); os << "\n" "Group {\n" " children [\n" " Shape {\n"; writeAppearance(os); os << " geometry IndexedFaceSet {\n" " coord Coordinate {\n" " point [\n"; // Write vertex coords forAll(pointLst, ptI) { const point& pt = pointLst[ptI]; os << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl; } os << " ]\n" // end point " }\n" // end coord Coordinate " coordIndex [\n"; label faceIndex = 0; forAll(zones, zoneI) { const surfZone& zone = zones[zoneI]; if (useFaceMap) { forAll(zone, localFacei) { const Face& f = faceLst[faceMap[faceIndex++]]; forAll(f, fp) { os << f[fp] << ' '; } os << "-1,\n"; } } else { forAll(zone, localFacei) { const Face& f = faceLst[faceIndex++]; forAll(f, fp) { os << ' ' << f[fp]; } os << " -1,\n"; } } }