]> SALOME platform Git repositories - plugins/netgenplugin.git/commitdiff
Salome HOME
0020682: EDF 1222 SMESH: 3D mesh from a skin mesh and with volumic cells
authoreap <eap@opencascade.com>
Fri, 12 Mar 2010 08:34:55 +0000 (08:34 +0000)
committereap <eap@opencascade.com>
Fri, 12 Mar 2010 08:34:55 +0000 (08:34 +0000)
* Pb with internal face (StudyFiss_bugNetgen3D.hdf)

+  static SMESH_ComputeErrorPtr readErrors(const std::vector< const SMDS_MeshNode* >& nodeVec);

which is used to show links that lead to "some edges multiple times in surface mesh" error

src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_Mesher.hxx

index e86bf08e75b9ba3e577626bd6c50ae45de3e5bc0..28fdd4d45db07f17cdcef3f9c9226b094c1c807b 100644 (file)
 #include "NETGENPlugin_Hypothesis_2D.hxx"
 #include "NETGENPlugin_SimpleHypothesis_3D.hxx"
 
-#include <SMESH_Mesh.hxx>
+#include <SMDS_MeshElement.hxx>
+#include <SMDS_MeshNode.hxx>
+#include <SMESHDS_Mesh.hxx>
 #include <SMESH_Comment.hxx>
 #include <SMESH_ComputeError.hxx>
-#include <SMESH_subMesh.hxx>
+#include <SMESH_File.hxx>
+#include <SMESH_Mesh.hxx>
 #include <SMESH_MesherHelper.hxx>
-#include <SMESHDS_Mesh.hxx>
-#include <SMDS_MeshElement.hxx>
-#include <SMDS_MeshNode.hxx>
+#include <SMESH_subMesh.hxx>
 #include <utilities.h>
 
 #include <vector>
@@ -1268,31 +1269,48 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
 
 //================================================================================
 /*!
- * \brief remove given file
+ * \brief Remove "test.out" and "problemfaces" files in current directory
  */
 //================================================================================
 
-static void removeFile( const TCollection_AsciiString& fileName )
+void NETGENPlugin_Mesher::RemoveTmpFiles()
 {
-  try {
-    OSD_File( fileName ).Remove();
-  }
-  catch ( Standard_ProgramError ) {
-    MESSAGE("Can't remove file: " << fileName.ToCString() << " ; file does not exist or permission denied");
-  }
+  SMESH_File("test.out").remove();
+  SMESH_File("problemfaces").remove();
+  SMESH_File("occmesh.rep").remove();
 }
 
 //================================================================================
 /*!
- * \brief Remove "test.out" and "problemfaces" files in current directory
+ * \brief Read mesh entities preventing successful computation from "test.out" file
  */
 //================================================================================
 
-void NETGENPlugin_Mesher::RemoveTmpFiles()
+SMESH_ComputeErrorPtr
+NETGENPlugin_Mesher::readErrors(const vector<const SMDS_MeshNode* >& nodeVec)
 {
-  removeFile("test.out");
-  removeFile("problemfaces");
-  removeFile("occmesh.rep");
+  SMESH_ComputeErrorPtr err = SMESH_ComputeError::New
+    (COMPERR_BAD_INPUT_MESH, "some edges multiple times in surface mesh");
+  SMESH_File file("test.out");
+  vector<int> edge(2);
+  const char* badEdgeStr = " multiple times in surface mesh";
+  const int   badEdgeStrLen = strlen( badEdgeStr );
+  while( !file.eof() )
+  {
+    if ( strncmp( file, "Edge ", 5 ) == 0 &&
+         file.getInts( edge ) &&
+         strncmp( file, badEdgeStr, badEdgeStrLen ) == 0 &&
+         edge[0] < nodeVec.size() && edge[1] < nodeVec.size())
+    {
+      err->myBadElements.push_back( new SMDS_MeshEdge( nodeVec[ edge[0]], nodeVec[ edge[1]] ));
+      file += badEdgeStrLen;
+    }
+    else
+    {
+      ++file;
+    }
+  }
+  return err;
 }
 
 //================================================================================
index d10d771eca5b63f18406e7ffecf9a0c371fb4908..20c2fcb1c7d316a6984f5d354ec7c640faa9f76f 100644 (file)
@@ -31,6 +31,7 @@
 #include "NETGENPlugin_Defs.hxx"
 #include "StdMeshers_FaceSide.hxx"
 #include <map>
+#include <vector>
 
 class SMESH_Mesh;
 class SMESH_Comment;
@@ -98,6 +99,8 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher
 
   static void RemoveTmpFiles();
 
+  static SMESH_ComputeErrorPtr readErrors(const std::vector< const SMDS_MeshNode* >& nodeVec);
+
  private:
   SMESH_Mesh*          _mesh;
   const TopoDS_Shape&  _shape;