From 4fbca00961e00c21466e653393cb4ddb96a77bc4 Mon Sep 17 00:00:00 2001 From: Philippose Rajan Date: Wed, 18 Aug 2010 19:54:12 +0000 Subject: [PATCH] * Improved the Extended STL export code to hopefully speed it up substantially --- libsrc/interface/writeuser.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/libsrc/interface/writeuser.cpp b/libsrc/interface/writeuser.cpp index 60d7f44e..f3d75d94 100644 --- a/libsrc/interface/writeuser.cpp +++ b/libsrc/interface/writeuser.cpp @@ -349,7 +349,6 @@ void WriteSTLFormat (const Mesh & mesh, * STL into named boundary faces * when using a third-party mesher */ - void WriteSTLExtFormat (const Mesh & mesh, const string & filename) { @@ -359,33 +358,45 @@ void WriteSTLExtFormat (const Mesh & mesh, outfile.precision(10); + int numBCs = 0; + Array faceBCs; + TABLE faceBCMapping; + + faceBCs.SetSize(mesh.GetNFD()); + faceBCMapping.SetSize(mesh.GetNFD()); + + faceBCs = -1; // Collect the BC numbers used in the mesh for(int faceNr = 1; faceNr <= mesh.GetNFD(); faceNr++) { int bcNum = mesh.GetFaceDescriptor(faceNr).BCProperty(); - if(!faceBCs.Contains(bcNum)) + if(faceBCs.Pos(bcNum) < 0) { - faceBCs.Append(bcNum); + numBCs++; + faceBCs.Set(numBCs,bcNum); + faceBCMapping.Add1(numBCs,faceNr); } + else + { + faceBCMapping.Add1(faceBCs.Pos(bcNum)+1,faceNr); + } } + faceBCs.SetSize(numBCs); + faceBCMapping.ChangeSize(numBCs); + // Now actually write the data to file for(int bcInd = 1; bcInd <= faceBCs.Size(); bcInd++) { outfile << "solid Boundary_" << faceBCs.Elem(bcInd) << "\n"; - for(int faceNr = 1;faceNr <= mesh.GetNFD(); faceNr++) + for(int faceNr = 1;faceNr <= faceBCMapping.EntrySize(bcInd); faceNr++) { - if(mesh.GetFaceDescriptor(faceNr).BCProperty() != faceBCs.Elem(bcInd)) - { - continue; - } - Array faceSei; - mesh.GetSurfaceElementsOfFace(faceNr,faceSei); + mesh.GetSurfaceElementsOfFace(faceBCMapping.Get(bcInd,faceNr),faceSei); for (int i = 0; i < faceSei.Size(); i++) {