/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | foam-extend: Open Source CFD \\ / O peration | Version: 4.1 \\ / A nd | Web: http://www.foam-extend.org \\/ M anipulation | For copyright notice see file Copyright ------------------------------------------------------------------------------- License This file is part of foam-extend. foam-extend 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. foam-extend 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 foam-extend. If not, see . Application surfaceFeatureConvert Description Extracts and writes surface features to file \*---------------------------------------------------------------------------*/ #include "featureEdgeMesh.H" #include "argList.H" #include "objectRegistry.H" #include "foamTime.H" #include "IFstream.H" #include "IStringStream.H" #include "OFstream.H" #include "Map.H" using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // void readNASEdges ( const fileName& inFileName, pointField& allPoints, edgeList& allEdges ) { IFstream is(inFileName); if (!is.good()) { FatalErrorIn("readNASEdges") << "Cannot read file " << inFileName << exit(FatalError); } // coordinates of point DynamicList points; // Nastran index of point dynamicLabelList pointIndices; // beams DynamicList edges; dynamicLabelList edgeIndices; while (is.good()) { string line; is.getLine(line); if (line.empty() || line[0] == '$') { // Skip empty and comment continue; } // Check if character 72 is continuation if (line.size() > 72 && line[72] == '+') { line = line.substr(0, 72); while (true) { string buf; is.getLine(buf); if (buf.size() > 72 && buf[72] == '+') { line += buf.substr(8, 64); } else { line += buf.substr(8, buf.size()-8); break; } } } // Read first word IStringStream lineStream(line); word cmd; lineStream >> cmd; if (cmd == "GRID") { label index; lineStream >> index; pointIndices.append(index); scalar x = readScalar(IStringStream(line.substr(24, 8))()); scalar y = readScalar(IStringStream(line.substr(32, 8))()); scalar z = readScalar(IStringStream(line.substr(40, 8))()); points.append(point(x, y, z)); } else if (cmd == "CBEAM") { // Read shell type since gives patchnames. label index, group, v0, v1; lineStream >> index >> group >> v0 >> v1; edgeIndices.append(index); edges.append(edge(v0, v1)); } } points.shrink(); pointIndices.shrink(); edges.shrink(); edgeIndices.shrink(); Pout<< "Read from " << inFileName << " edges:" << edges.size() << " points:" << points.size() << endl; { // Build inverse mapping (index to point) Map