diff --git a/src/fileFormats/vtk/vtkUnstructuredReader.C b/src/fileFormats/vtk/vtkUnstructuredReader.C index f3acda065aaec4f5900ed67c8c9a23b20350c3f5..8259ed192418dd149745746800fb88c2d4f920a9 100644 --- a/src/fileFormats/vtk/vtkUnstructuredReader.C +++ b/src/fileFormats/vtk/vtkUnstructuredReader.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ License namespace Foam { - defineTypeNameAndDebug(vtkUnstructuredReader, 0); + defineTypeNameAndDebug(vtkUnstructuredReader, 1); //0); template<> const char* @@ -115,18 +115,19 @@ void Foam::vtkUnstructuredReader::extractCells labelList prismPoints(6); labelList hexPoints(8); + label cellI = cells_.size(); + cells_.setSize(cellI+cellTypes.size()); + cellMap_.setSize(cells_.size(), -1); - cells_.setSize(cellTypes.size()); - cellMap_.setSize(cellTypes.size(), -1); - faces_.setSize(cellTypes.size()); - faceMap_.setSize(cellTypes.size(), -1); - lines_.setSize(cellTypes.size()); - lineMap_.setSize(cellTypes.size(), -1); + label faceI = faces_.size(); + faces_.setSize(faceI+cellTypes.size()); + faceMap_.setSize(faces_.size(), -1); + + label lineI = lines_.size(); + lines_.setSize(lineI+cellTypes.size()); + lineMap_.setSize(lines_.size(), -1); label dataIndex = 0; - label cellI = 0; - label faceI = 0; - label lineI = 0; // To mark whether unhandled type has been visited. @@ -672,10 +673,13 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile) } labelList lineVerts; readBlock(inFile, nNumbers, lineVerts); - lines_.setSize(nLines); - lineMap_.setSize(nLines); + + label lineI = lines_.size(); + lines_.setSize(lineI+nLines); + lineMap_.setSize(lines_.size()); + label elemI = 0; - forAll(lines_, lineI) + for (label i = 0; i < nLines; i++) { lineMap_[lineI] = lineI; labelList& f = lines_[lineI]; @@ -684,6 +688,7 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile) { f[fp] = lineVerts[elemI++]; } + lineI++; } } else if (tag == "POLYGONS") @@ -698,10 +703,13 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile) } labelList faceVerts; readBlock(inFile, nNumbers, faceVerts); - faces_.setSize(nFaces); - faceMap_.setSize(nFaces); + + label faceI = faces_.size(); + faces_.setSize(faceI+nFaces); + faceMap_.setSize(faces_.size()); + label elemI = 0; - forAll(faces_, faceI) + for (label i = 0; i < nFaces; i++) { faceMap_[faceI] = faceI; face& f = faces_[faceI]; @@ -710,6 +718,7 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile) { f[fp] = faceVerts[elemI++]; } + faceI++; } } else if (tag == "POINT_DATA") @@ -859,6 +868,56 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile) scalarField coords(dim*points_.size()); readBlock(inFile, coords.size(), coords); } + else if (tag == "TRIANGLE_STRIPS") + { + label nStrips(readLabel(inFile)); + label nNumbers(readLabel(inFile)); + if (debug) + { + Info<< "Reading " << nStrips << " triangle strips." << endl; + } + labelList faceVerts; + readBlock(inFile, nNumbers, faceVerts); + + // Count number of triangles + label elemI = 0; + label nTris = 0; + for (label i = 0; i < nStrips; i++) + { + label nVerts = faceVerts[elemI++]; + nTris += nVerts-2; + elemI += nVerts; + } + + + // Store + label faceI = faces_.size(); + faces_.setSize(faceI+nTris); + faceMap_.setSize(faces_.size()); + elemI = 0; + for (label i = 0; i < nStrips; i++) + { + label nVerts = faceVerts[elemI++]; + label nTris = nVerts-2; + + // Read first triangle + faceMap_[faceI] = faceI; + face& f = faces_[faceI++]; + f.setSize(3); + f[0] = faceVerts[elemI++]; + f[1] = faceVerts[elemI++]; + f[2] = faceVerts[elemI++]; + for (label triI = 1; triI < nTris; triI++) + { + faceMap_[faceI] = faceI; + face& f = faces_[faceI++]; + f.setSize(3); + f[0] = faceVerts[elemI-1]; + f[1] = faceVerts[elemI-2]; + f[2] = faceVerts[elemI++]; + } + } + } else { FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile)