Salome HOME
PR: debug triangles
authorprascle <prascle>
Mon, 15 Feb 2010 16:58:17 +0000 (16:58 +0000)
committerprascle <prascle>
Mon, 15 Feb 2010 16:58:17 +0000 (16:58 +0000)
clean_configure
src/SMDS/SMDS_Mesh.cxx
src/SMDS/SMDS_Mesh.hxx
src/SMDS/SMDS_MeshNode.cxx
src/SMESH/SMESH_Gen.cxx

index f57f7b3bf98d03cab5f0acc1a75b80d039d61886..423451e2b88924cdef9bea4013418cef8f9d4aa0 100755 (executable)
@@ -31,5 +31,8 @@ find doc -name Makefile.in | xargs rm -f
 find idl -name Makefile.in | xargs rm -f
 find resources -name Makefile.in | xargs rm -f
 find salome_adm -name Makefile.in | xargs rm -f
+find adm_local -name Makefile.in | xargs rm -f
 find src -name Makefile.in | xargs rm -f
 rm -f Makefile.in
+cd adm_local/unix/config_files
+rm -f config.* depcomp install-sh l*.m4 ltmain.sh missing py-compile
index 1fbe8d3242dfeed12b3baa2fd118fe8fd394c99e..7239155356e88cacbae78ea30064b799d00b1a92 100644 (file)
 #include "SMDS_SpacePosition.hxx"
 
 #include <vtkUnstructuredGrid.h>
+#include <vtkUnstructuredGridWriter.h>
 #include <vtkUnsignedCharArray.h>
+#include <vtkCell.h>
+#include <vtkCellLinks.h>
+#include <vtkIdList.h>
 
 #include <algorithm>
 #include <map>
+#include <iostream>
+#include <fstream>
 using namespace std;
 
 #ifndef WIN32
@@ -358,7 +364,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         int ID)
 {
     //MESSAGE("AddFaceWithID " << ID)
-  SMDS_MeshFace * face=createTriangle(n1, n2, n3, myElementIDFactory->GetFreeID());
+  SMDS_MeshFace * face=createTriangle(n1, n2, n3, ID);
 
   if (face && !registerElement(ID, face)) {
     RemoveElement(face, false);
@@ -1208,7 +1214,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolume
 ///////////////////////////////////////////////////////////////////////////////
 bool SMDS_Mesh::registerElement(int ID, SMDS_MeshElement* element)
 {
-  //MESSAGE("registerElement " << ID)
+  //MESSAGE("registerElement " << ID);
   if ((ID < myIDElements.size()) && myIDElements[ID] >= 0) // --- already bound
   {
     MESSAGE(" --------------------------------- already bound "<< ID << " " << myIDElements[ID]);
@@ -1231,7 +1237,7 @@ bool SMDS_Mesh::registerElement(int ID, SMDS_MeshElement* element)
   }
 
   myIDElements[ID] = vtkId;
-  //MESSAGE("smds:" << ID << " vtk:" << cellId );
+  //MESSAGE("smds:" << ID << " vtk:" << vtkId );
 
   if (vtkId >= myVtkIndex.size()) // --- resize local vector
   {
@@ -1297,6 +1303,7 @@ SMDS_MeshFace * SMDS_Mesh::createTriangle(const SMDS_MeshNode * node1,
     face = facevtk;
     adjustmyCellsCapacity(ID);
     myCells[ID] = face;
+    //MESSAGE("createTriangle " << ID << " " << face);
     myInfo.myNbTriangles++;
     return face;
   }
@@ -2129,7 +2136,10 @@ void SMDS_Mesh::DebugStats() const
 ///////////////////////////////////////////////////////////////////////////////
 int SMDS_Mesh::NbNodes() const
 {
-        return myNodes.size();
+       //MESSAGE(myGrid->GetNumberOfPoints());
+       //MESSAGE(myInfo.NbNodes());
+       //MESSAGE(myNodeMax);
+    return myInfo.NbNodes();
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -3562,6 +3572,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 void SMDS_Mesh::updateNodeMinMax()
 {
   myNodeMin = 0;
+  if (myNodes.size() == 0)
+  {
+       myNodeMax=0;
+       return;
+  }
   while (!myNodes[myNodeMin] && (myNodeMin<myNodes.size()))
     myNodeMin++;
   myNodeMax=myNodes.size()-1;
@@ -3594,3 +3609,51 @@ void SMDS_Mesh::adjustStructure()
   myGrid->GetPoints()->GetData()->SetNumberOfTuples(myNodeIDFactory->GetMaxID()+1);
 }
 
+void SMDS_Mesh::dumpGrid(string ficdump)
+{
+       MESSAGE("SMDS_Mesh::dumpGrid " << ficdump);
+  vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New();
+  aWriter->SetFileName(ficdump.c_str());
+  aWriter->SetInput(myGrid);
+  if(myGrid->GetNumberOfCells())
+  {
+    aWriter->Write();
+  }
+  aWriter->Delete();
+  ficdump = ficdump + "_connectivity";
+  ofstream ficcon(ficdump.c_str(), ios::out);
+  int nbPoints = myGrid->GetNumberOfPoints();
+  ficcon << "-------------------------------- points " <<  nbPoints << endl;
+  for (int i=0; i<nbPoints; i++)
+  {
+       ficcon << i << " " << *(myGrid->GetPoint(i)) << " " << *(myGrid->GetPoint(i)+1) << " " << " " << *(myGrid->GetPoint(i)+2) << endl;
+  }
+  int nbCells = myGrid->GetNumberOfCells();
+  ficcon << "-------------------------------- cells " <<  nbCells << endl;
+  for (int i=0; i<nbCells; i++)
+  {
+       ficcon << i << " - " << myGrid->GetCell(i)->GetCellType() << " -";
+       int nbptcell = myGrid->GetCell(i)->GetNumberOfPoints();
+       vtkIdList *listid = myGrid->GetCell(i)->GetPointIds();
+       for (int j=0; j<nbptcell; j++)
+       {
+               ficcon << " " <<  listid->GetId(j);
+       }
+       ficcon << endl;
+  }
+  ficcon << "-------------------------------- connectivity " <<  nbPoints << endl;
+       vtkCellLinks *links = myGrid->GetCellLinks();
+  for (int i=0; i<nbPoints; i++)
+  {
+       int ncells = links->GetNcells(i);
+       vtkIdType *cells = links->GetCells(i);
+       ficcon << i << " - " << ncells << " -";
+       for (int j=0; j<ncells; j++)
+       {
+               ficcon << " " << cells[j];
+       }
+       ficcon << endl;
+  }
+  ficcon.close();
+
+}
index 7b00f886310df11b370a54b021297c1f59db1e92..f32a366fecf8143e8052735815c675edd0c6d668 100644 (file)
@@ -569,6 +569,7 @@ public:
   void incrementNodesCapacity(int nbNodes);
   void incrementCellsCapacity(int nbCells);
   void adjustStructure();
+  void dumpGrid(string ficdump="dumpGrid");
   
   int myCellLinksSize;
 
index f7fe97cd30fac4eff867abca12fdcf97c5ddfa3b..888d8967bd51323a6340bac216866fe3f596158f 100644 (file)
@@ -36,6 +36,8 @@
 #define protected protected
 
 #include "utilities.h"
+#include "Utils_SALOME_Exception.hxx"
+#include <cassert>
 
 using namespace std;
 
@@ -191,6 +193,12 @@ private:
       int vtkId = myCells[iter];
       int smdsId = myMesh->fromVtkToSmds(vtkId);
       const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
+      if (!elem)
+      {
+         assert(0);
+         throw SALOME_Exception("SMDS_MeshNode_MyInvIterator problem Null element");
+      }
+      //MESSAGE("vtkId " << vtkId << " smdsId " << smdsId << " " << (elem!=0));
       iter++;
       return elem;
   }    
@@ -200,7 +208,7 @@ SMDS_ElemIteratorPtr SMDS_MeshNode::
        GetInverseElementIterator(SMDSAbs_ElementType type) const
 {
     vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myID);
-    //MESSAGE("ncells " << l.ncells);
+    //MESSAGE("myID " << myID << " ncells " << l.ncells);
     return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
 }
 
@@ -223,16 +231,19 @@ private:
                            SMDSAbs_ElementType type):
     myMesh(mesh), myCells(cells), myNcells(ncells), myType(type), iter(0)
   {
-        for (; iter<ncells; iter++)
+       //MESSAGE("myNcells " << myNcells);
+       for (; iter<ncells; iter++)
         {
            int vtkId = myCells[iter];
            int smdsId = myMesh->fromVtkToSmds(vtkId);
+           //MESSAGE("vtkId " << vtkId << " smdsId " << smdsId);
            const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
            if (elem->GetType() == type)
                myFiltCells.push_back((SMDS_MeshElement*)elem);
         }
         myNcells = myFiltCells.size();
-        iter = 0;
+               //MESSAGE("myNcells " << myNcells);
+       iter = 0;
         //MESSAGE("SMDS_MeshNode_MyIterator (filter) " << ncells << " " << myNcells);
   }
 
index 8fb0ec276f84ce1f9b44752c584508aa41d3e137..0cbac04e861b3810b88992836397e468be0e04dc 100644 (file)
@@ -307,6 +307,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh &          aMesh,
   cerr << "total elements and nodes in submesh sets:" << total << endl;
   cerr << "Number of node objects " << SMDS_MeshNode::nbNodes << endl;
   cerr << "Number of cell objects " << SMDS_MeshCell::nbCells << endl;
+  //myMesh->dumpGrid();
   return ret;
 }