Salome HOME
Version 1.5.0.
[modules/smesh.git] / src / SMESH_I / SMESH_Mesh_i.cxx
index c8d05d74e1035795d571eaede0204c124bb79450..9f1f9009968941fb7c867d8bc30c456300f16fbe 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 using namespace std;
 #include "SMESH_Mesh_i.hxx"
 #include "SMESH_subMesh_i.hxx"
@@ -40,22 +39,12 @@ using namespace std;
 #include "OpUtil.hxx"
 
 #include "TCollection_AsciiString.hxx"
-// #include "SMESHDS_ListOfAsciiString.hxx"
-// #include "SMESHDS_ListIteratorOfListOfAsciiString.hxx"
-#include "TColStd_ListOfInteger.hxx"
-#include "TColStd_ListOfReal.hxx"
-#include "TColStd_ListIteratorOfListOfInteger.hxx"
-#include "TColStd_ListIteratorOfListOfReal.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMESHDS_CommandType.hxx"
-#include "SMESHDS_ListOfCommand.hxx"
-#include "SMESHDS_ListIteratorOfListOfCommand.hxx"
-#include "Handle_SMESHDS_Command.hxx"
-
 #include "SMESH_MeshEditor_i.hxx"
+
 #include <string>
 #include <iostream>
-//#include <sstream>
 
 //**** SMESHDS en champ
 
@@ -67,8 +56,8 @@ using namespace std;
 
 SMESH_Mesh_i::SMESH_Mesh_i()
 {
-  MESSAGE("SMESH_Mesh_i: default constructor, not for use");
-  ASSERT(0);
+       MESSAGE("SMESH_Mesh_i: default constructor, not for use");
+       ASSERT(0);
 };
 
 //=============================================================================
@@ -77,16 +66,14 @@ SMESH_Mesh_i::SMESH_Mesh_i()
  */
 //=============================================================================
 
-SMESH_Mesh_i::SMESH_Mesh_i(SMESH_Gen_i* gen_i,
-                          GEOM::GEOM_Gen_ptr geomEngine,
-                          CORBA::Long studyId,
-                          int localId)
+SMESH_Mesh_i::SMESH_Mesh_i(SMESH_Gen_i * gen_i,
+       GEOM::GEOM_Gen_ptr geomEngine, CORBA::Long studyId, int localId)
 {
-  MESSAGE("SMESH_Mesh_i");
-  _gen_i = gen_i;
-  _id = localId;
-  _geom = GEOM::GEOM_Gen::_narrow(geomEngine);
-  _studyId = studyId;
+       MESSAGE("SMESH_Mesh_i");
+       _gen_i = gen_i;
+       _id = localId;
+       _geom = GEOM::GEOM_Gen::_narrow(geomEngine);
+       _studyId = studyId;
 }
 
 //=============================================================================
@@ -97,11 +84,10 @@ SMESH_Mesh_i::SMESH_Mesh_i(SMESH_Gen_i* gen_i,
 
 SMESH_Mesh_i::~SMESH_Mesh_i()
 {
-  MESSAGE("~SMESH_Mesh_i");
-  // ****
+       MESSAGE("~SMESH_Mesh_i");
+       // ****
 };
 
-
 //=============================================================================
 /*!
  *  
@@ -109,35 +95,33 @@ SMESH_Mesh_i::~SMESH_Mesh_i()
 //=============================================================================
 
 CORBA::Boolean SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Shape_ptr aSubShape,
-                                          SMESH::SMESH_Hypothesis_ptr anHyp)
-  throw (SALOME::SALOME_Exception)
+       SMESH::SMESH_Hypothesis_ptr anHyp) throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("AddHypothesis");
-  // **** proposer liste de subShape (selection multiple)
-
-  GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
-  if (CORBA::is_nil(mySubShape))
-    THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", \
-                                SALOME::BAD_PARAM);
-
-  SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
-  if (CORBA::is_nil(myHyp))
-    THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference", \
-                                SALOME::BAD_PARAM);
-  bool ret = false;
-  try
-    {
-      TopoDS_Shape myLocSubShape=
-       _gen_i->_ShapeReader->GetShape(_geom,mySubShape);
-      int hypId = myHyp->GetId();
-      ret = _impl->AddHypothesis(myLocSubShape, hypId);
-    }
-  catch (SALOME_Exception& S_ex)
-    {
-      THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), \
-                                  SALOME::BAD_PARAM);
-    }
-  return ret;
+       MESSAGE("AddHypothesis");
+       // **** proposer liste de subShape (selection multiple)
+
+       GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
+       if (CORBA::is_nil(mySubShape))
+               THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
+                       SALOME::BAD_PARAM);
+
+       SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
+       if (CORBA::is_nil(myHyp))
+               THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference",
+                       SALOME::BAD_PARAM);
+       bool ret = false;
+       try
+       {
+               TopoDS_Shape myLocSubShape =
+                       _gen_i->_ShapeReader->GetShape(_geom, mySubShape);
+               int hypId = myHyp->GetId();
+               ret = _impl->AddHypothesis(myLocSubShape, hypId);
+       }
+       catch(SALOME_Exception & S_ex)
+       {
+               THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
+       }
+       return ret;
 };
 
 //=============================================================================
@@ -146,52 +130,47 @@ CORBA::Boolean SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Shape_ptr aSubShape,
  */
 //=============================================================================
 
-CORBA::Boolean 
-SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Shape_ptr aSubShape,
-                              SMESH::SMESH_Hypothesis_ptr anHyp)
-  throw (SALOME::SALOME_Exception)
+CORBA::Boolean
+       SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Shape_ptr aSubShape,
+       SMESH::SMESH_Hypothesis_ptr anHyp) throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("RemoveHypothesis");
-  // **** proposer liste de subShape (selection multiple)
-
-  GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
-  if (CORBA::is_nil(mySubShape))
-    THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", \
-                                SALOME::BAD_PARAM);
-
-  SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
-  if (CORBA::is_nil(myHyp))
-    THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference", \
-                                SALOME::BAD_PARAM);
-
-  bool ret = false;
-  try
-    {
-      TopoDS_Shape myLocSubShape=
-       _gen_i->_ShapeReader->GetShape(_geom,mySubShape);
-      int hypId = myHyp->GetId();
-      ret = _impl->RemoveHypothesis(myLocSubShape, hypId);
-    }
-  catch (SALOME_Exception& S_ex)
-    {
-      THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), \
-                                  SALOME::BAD_PARAM);
-    }
-  return ret;
+       MESSAGE("RemoveHypothesis");
+       // **** proposer liste de subShape (selection multiple)
+
+       GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
+       if (CORBA::is_nil(mySubShape))
+               THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
+                       SALOME::BAD_PARAM);
+
+       SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
+       if (CORBA::is_nil(myHyp))
+               THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference",
+                       SALOME::BAD_PARAM);
+
+       bool ret = false;
+       try
+       {
+               TopoDS_Shape myLocSubShape =
+                       _gen_i->_ShapeReader->GetShape(_geom, mySubShape);
+               int hypId = myHyp->GetId();
+               ret = _impl->RemoveHypothesis(myLocSubShape, hypId);
+       }
+       catch(SALOME_Exception & S_ex)
+       {
+               THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
+       }
+       return ret;
 };
 
-//=============================================================================
-/*!
- *  
+/**
+ *@TODO Not implemented
  */
-//=============================================================================
-
-SMESH::ListOfHypothesis*
-SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Shape_ptr aSubShape)
-  throw (SALOME::SALOME_Exception)
+SMESH::ListOfHypothesis *
+       SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Shape_ptr aSubShape)
+throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("GetHypothesisList");
-  // ****
+       MESSAGE("GetHypothesisList: Not implemented");
+       return NULL;
 };
 
 //=============================================================================
@@ -199,118 +178,200 @@ SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Shape_ptr aSubShape)
  *  
  */
 //=============================================================================
-SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetElementsOnShape(GEOM::GEOM_Shape_ptr aSubShape)
-  throw (SALOME::SALOME_Exception)
+SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetElementsOnShape(GEOM::
+       GEOM_Shape_ptr aSubShape) throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("SMESH_Mesh_i::GetElementsOnShape");
-  GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
-  if (CORBA::is_nil(mySubShape))
-    THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", \
-                                SALOME::BAD_PARAM);
-
-  int subMeshId = 0;
-  try
-    {
-      SMESH_subMesh_i* subMeshServant;
-      TopoDS_Shape myLocSubShape
-       = _gen_i->_ShapeReader->GetShape(_geom,mySubShape);
-
-      //Get or Create the SMESH_subMesh object implementation
-      
-      ::SMESH_subMesh * mySubMesh
-         = _impl->GetSubMesh(myLocSubShape);
-      subMeshId = mySubMesh->GetId();
-
-      // create a new subMesh object servant if there is none for the shape
-
-      if (_mapSubMesh.find(subMeshId) != _mapSubMesh.end())
+       MESSAGE("SMESH_Mesh_i::GetElementsOnShape");
+       GEOM::GEOM_Shape_var mySubShape = GEOM::GEOM_Shape::_narrow(aSubShape);
+       if (CORBA::is_nil(mySubShape))
+               THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
+                       SALOME::BAD_PARAM);
+
+       int subMeshId = 0;
+       try
        {
-         ASSERT(_mapSubMesh_i.find(subMeshId) != _mapSubMesh_i.end());
-         subMeshServant = _mapSubMesh_i[subMeshId];
+               SMESH_subMesh_i *subMeshServant;
+               TopoDS_Shape myLocSubShape
+                       = _gen_i->_ShapeReader->GetShape(_geom, mySubShape);
+
+               //Get or Create the SMESH_subMesh object implementation
+
+               ::SMESH_subMesh * mySubMesh = _impl->GetSubMesh(myLocSubShape);
+               subMeshId = mySubMesh->GetId();
+
+               // create a new subMesh object servant if there is none for the shape
+
+               if (_mapSubMesh.find(subMeshId) != _mapSubMesh.end())
+               {
+                       ASSERT(_mapSubMesh_i.find(subMeshId) != _mapSubMesh_i.end());
+                       subMeshServant = _mapSubMesh_i[subMeshId];
+               }
+               else
+               {
+                       // create and activate the CORBA servant of Mesh
+                       subMeshServant = new SMESH_subMesh_i(_gen_i, this, subMeshId);
+                       SMESH::SMESH_subMesh_var subMesh
+                               = SMESH::SMESH_subMesh::_narrow(subMeshServant->_this());
+                       _mapSubMesh[subMeshId] = mySubMesh;
+                       _mapSubMesh_i[subMeshId] = subMeshServant;
+                       _mapSubMeshIor[subMeshId]
+                               = SMESH::SMESH_subMesh::_duplicate(subMesh);
+               }
        }
-      else
+       catch(SALOME_Exception & S_ex)
        {
-         // create and activate the CORBA servant of Mesh
-         subMeshServant = new SMESH_subMesh_i(_gen_i, this, subMeshId);
-         SMESH::SMESH_subMesh_var subMesh
-           = SMESH::SMESH_subMesh::_narrow(subMeshServant->_this());
-         _mapSubMesh[subMeshId] = mySubMesh;
-         _mapSubMesh_i[subMeshId] = subMeshServant;
-         _mapSubMeshIor[subMeshId]
-           = SMESH::SMESH_subMesh::_duplicate(subMesh);
+               THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
        }
-    }
-  catch (SALOME_Exception& S_ex)
-    {
-      THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
-    }
-
-  ASSERT(_mapSubMeshIor.find(subMeshId) != _mapSubMeshIor.end());
-  return SMESH::SMESH_subMesh::_duplicate(_mapSubMeshIor[subMeshId]);
+
+       ASSERT(_mapSubMeshIor.find(subMeshId) != _mapSubMeshIor.end());
+       return SMESH::SMESH_subMesh::_duplicate(_mapSubMeshIor[subMeshId]);
 }
 
-//=============================================================================
-/*!
- *  
+/**
+ * Translate the UpdateAll SMESHDS_Command to a set of SMESH::log_command.
+ * As the input log need to be resized, it is realocated.
+ * @param logBlock The log where to insert created commands
+ * @param index The place where to insert created commands in log. It is updated
+ * with the place to put new elements.
+ * @return The realocated and resized log.
+ * @TODO Add support for other type of elements
  */
-//=============================================================================
+SMESH::log_array_var SMESH_Mesh_i::
+       createUpdateAllCommand(SMESH::log_array_var log, int * index)
+{
+       MESSAGE("SMESH_Mesh_i::createUpdateAllCommand");
+       SMESH::log_array_var aLog=new SMESH::log_array(log->length()+3);
+       aLog->length(log->length()+3);
+       
+       for(int i=0;i<*index;i++)
+       {               
+               aLog[i]=log[i];
+       }
+       
+       log->length(0);
+       int id=*index;
+               
+       //Remove all elements
+       aLog[id].commandType=SMESH::REMOVE_ALL;
+       id++;
+       
+       //Export nodes
+       aLog[id].commandType=SMESH::ADD_NODE;
+       aLog[id].number=_impl->GetMeshDS()->NbNodes();
+
+       double * nodesCoordinates=_impl->GetMeshDS()->getNodesCoordinates();
+       aLog[id].coords=SMESH::double_array(
+               aLog[id].number*3,
+               aLog[id].number*3,
+               nodesCoordinates);
+
+       long * nodesID=_impl->GetMeshDS()->getNodesID();
+       aLog[id].indexes=SMESH::long_array(
+               aLog[id].number,
+               aLog[id].number,
+               nodesID);
+
+       id++;
+       
+       MESSAGE("Export edges");
+       //Export edges
+       aLog[id].commandType=SMESH::ADD_EDGE;
+       aLog[id].number=_impl->GetMeshDS()->NbEdges();  
+       aLog[id].coords.length(0);
+
+       long * edgesIndices=_impl->GetMeshDS()->getEdgesIndices();
+       aLog[id].indexes=SMESH::long_array(
+               aLog[id].number*3,
+               aLog[id].number*3,
+               edgesIndices);
+
+       id++;
+       
+       MESSAGE("Export triangles");
+       //Export triangles
+       aLog[id].commandType=SMESH::ADD_TRIANGLE;
+       aLog[id].number=_impl->GetMeshDS()->NbTriangles();      
+       aLog[id].coords.length(0);
+
+       long * triasIndices=_impl->GetMeshDS()->getTrianglesIndices();
+       aLog[id].indexes=SMESH::long_array(
+               aLog[id].number*4,
+               aLog[id].number*4,
+               triasIndices);
+
+       (*index)=id;
+       return aLog;
+}
 
-SMESH::log_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
- throw (SALOME::SALOME_Exception)
+/**
+ * Return the log of the current mesh. CORBA wrap of the SMESH::GetLog method
+ * with a special treatment for SMESHDS_UpdateAll commands
+ * @param clearAfterGet Tell if the log must be cleared after being returned
+ * @return the log
+ */
+SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
+       throw(SALOME::SALOME_Exception)
 {
- MESSAGE("SMESH_Mesh_i::GetLog");
-
- SMESH::log_array_var aLog;
- try
-   {
-     const SMESHDS_ListOfCommand& logDS =_impl->GetLog();
-     aLog = new SMESH::log_array;
-     int indexLog = 0;
-     int lg = logDS.Extent();
-     SCRUTE(lg);
-     aLog->length(lg);
-     SMESHDS_ListIteratorOfListOfCommand its(logDS);
-     while(its.More())
-     {
-       Handle(SMESHDS_Command) com = its.Value();
-       int comType = com->GetType();
-       //SCRUTE(comType);
-       int lgcom = com->GetNumber();
-       //SCRUTE(lgcom);
-       const TColStd_ListOfInteger& intList = com->GetIndexes();
-       int inum = intList.Extent();
-       //SCRUTE(inum);
-       TColStd_ListIteratorOfListOfInteger ii(intList);
-       const TColStd_ListOfReal& coordList = com->GetCoords();
-       int rnum = coordList.Extent();
-       //SCRUTE(rnum);
-       TColStd_ListIteratorOfListOfReal ir(coordList);
-       aLog[indexLog].commandType = comType;
-       aLog[indexLog].number = lgcom;
-       aLog[indexLog].coords.length(rnum);
-       aLog[indexLog].indexes.length(inum);
-       for (int i=0; i<rnum; i++)
-         {
-           aLog[indexLog].coords[i] = ir.Value();
-           //MESSAGE(" "<<i<<" "<<ir.Value());
-           ir.Next();
-         }
-       for (int i=0; i<inum; i++)
-         {
-           aLog[indexLog].indexes[i] = ii.Value();
-           //MESSAGE(" "<<i<<" "<<ii.Value());
-           ii.Next();
-         }
-       indexLog++;
-       its.Next();
-     }
-     if (clearAfterGet) _impl->ClearLog();
-   }
- catch (SALOME_Exception& S_ex)
-   {
-     THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
-   }
- return aLog._retn();
+       MESSAGE("SMESH_Mesh_i::GetLog");
+
+       SMESH::log_array_var aLog;
+       /*try
+       {*/
+               list < SMESHDS_Command * >logDS = _impl->GetLog();
+               aLog = new SMESH::log_array;
+               int indexLog = 0;
+               int lg = logDS.size();
+               MESSAGE("Number of command in the log: "<<lg);
+               aLog->length(lg);
+               list < SMESHDS_Command * >::iterator its = logDS.begin();
+               while (its != logDS.end())
+               {
+                       SMESHDS_Command *com = *its;
+                       int comType = com->GetType();
+                       //SCRUTE(comType);
+                       int lgcom = com->GetNumber();
+                       //SCRUTE(lgcom);
+                       const list < int >&intList = com->GetIndexes();
+                       int inum = intList.size();
+                       //SCRUTE(inum);
+                       list < int >::const_iterator ii = intList.begin();
+                       const list < double >&coordList = com->GetCoords();
+                       int rnum = coordList.size();
+                       //SCRUTE(rnum);
+                       list < double >::const_iterator ir = coordList.begin();
+                       aLog[indexLog].commandType = comType;
+                       if(comType==SMESHDS_UpdateAll)
+                       {
+                               aLog=createUpdateAllCommand(aLog, &indexLog);
+                       }
+                       else
+                       {
+                               aLog[indexLog].number = lgcom;
+                               aLog[indexLog].coords.length(rnum);
+                               aLog[indexLog].indexes.length(inum);
+                               for (int i = 0; i < rnum; i++)
+                               {
+                                       aLog[indexLog].coords[i] = *ir;
+                                       //MESSAGE(" "<<i<<" "<<ir.Value());
+                                       ir++;
+                               }
+                               for (int i = 0; i < inum; i++)
+                               {
+                                       aLog[indexLog].indexes[i] = *ii;
+                                       //MESSAGE(" "<<i<<" "<<ii.Value());
+                                       ii++;
+                               }
+                               indexLog++;
+                       }
+                       its++;
+               }
+               if (clearAfterGet) _impl->ClearLog();
+               return aLog._retn();
+       /*}
+       catch(SALOME_Exception & S_ex)
+       {
+               THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
+       }*/
 }
 
 //  SMESH::string_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
@@ -330,97 +391,97 @@ SMESH::log_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
 //        SMESHDS_ListIteratorOfListOfCommand its(logDS);
 //        while(its.More())
 //        {
-//     Handle(SMESHDS_Command) com = its.Value();
-//     int comType = com->GetType();
-//     SCRUTE(comType);
-//     int lgcom = com->GetNumber();
-//     SCRUTE(lgcom);
-//     logSize += lgcom;
-//     aLog->length(logSize);
-//     SCRUTE(logSize);
-//     const TColStd_ListOfInteger& intList = com->GetIndexes();
-//     TColStd_ListIteratorOfListOfInteger ii(intList);
-//     const TColStd_ListOfReal& coordList = com->GetCoords();
-//     TColStd_ListIteratorOfListOfReal ir(coordList);
-//     for (int icom = 1; icom <= lgcom; icom++)
-//       {
-//         ostringstream S;
-//         switch (comType)
-//           {
-//           case SMESHDS_AddNode:
-//             S << "AddNode " << ii.Value(); ii.Next();
-//             S << " " << ir.Value(); ir.Next(); 
-//             S << " " << ir.Value(); ir.Next();
-//             S << " " << ir.Value(); ir.Next();
-//             break;
-//           case SMESHDS_AddEdge:
-//             S << "AddEdge " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddTriangle:
-//             S << "AddFace " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddQuadrangle:
-//             S << "AddFace " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddTetrahedron:
-//             S << "AddVolume " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddPyramid:
-//             S << "AddVolume " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddPrism:
-//             S << "AddVolume " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_AddHexahedron:
-//             S << "AddVolume " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             S << " " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_RemoveNode:
-//             S << "RemoveNode " << ii.Value(); ii.Next();
-//             break;
-//           case SMESHDS_RemoveElement:
-//             S << "RemoveElement " << ii.Value(); ii.Next();
-//             break;
-//           default:
-//             ASSERT(0);
-//             break;
-//           }
-//         string ch = S.str();
-//         SCRUTE(ch);
-//         aLog[indexLog++] = CORBA::string_dup(ch.c_str());
-//       }
-//     its.Next();
+//      Handle(SMESHDS_Command) com = its.Value();
+//      int comType = com->GetType();
+//      SCRUTE(comType);
+//      int lgcom = com->GetNumber();
+//      SCRUTE(lgcom);
+//      logSize += lgcom;
+//      aLog->length(logSize);
+//      SCRUTE(logSize);
+//      const TColStd_ListOfInteger& intList = com->GetIndexes();
+//      TColStd_ListIteratorOfListOfInteger ii(intList);
+//      const TColStd_ListOfReal& coordList = com->GetCoords();
+//      TColStd_ListIteratorOfListOfReal ir(coordList);
+//      for (int icom = 1; icom <= lgcom; icom++)
+//        {
+//          ostringstream S;
+//          switch (comType)
+//            {
+//            case SMESHDS_AddNode:
+//          S << "AddNode " << ii.Value(); ii.Next();
+//          S << " " << ir.Value(); ir.Next(); 
+//          S << " " << ir.Value(); ir.Next();
+//          S << " " << ir.Value(); ir.Next();
+//          break;
+//            case SMESHDS_AddEdge:
+//          S << "AddEdge " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddTriangle:
+//          S << "AddFace " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddQuadrangle:
+//          S << "AddFace " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddTetrahedron:
+//          S << "AddVolume " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddPyramid:
+//          S << "AddVolume " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddPrism:
+//          S << "AddVolume " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_AddHexahedron:
+//          S << "AddVolume " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          S << " " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_RemoveNode:
+//          S << "RemoveNode " << ii.Value(); ii.Next();
+//          break;
+//            case SMESHDS_RemoveElement:
+//          S << "RemoveElement " << ii.Value(); ii.Next();
+//          break;
+//            default:
+//          ASSERT(0);
+//          break;
+//            }
+//          string ch = S.str();
+//          SCRUTE(ch);
+//          aLog[indexLog++] = CORBA::string_dup(ch.c_str());
+//        }
+//      its.Next();
 //        }
 //        if (clearAfterGet) _impl->ClearLog();
 //      }
@@ -437,11 +498,10 @@ SMESH::log_array* SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
  */
 //=============================================================================
 
-void SMESH_Mesh_i::ClearLog()
-  throw (SALOME::SALOME_Exception)
+void SMESH_Mesh_i::ClearLog() throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("SMESH_Mesh_i::ClearLog");
-  // ****
+       MESSAGE("SMESH_Mesh_i::ClearLog");
+       // ****
 }
 
 //=============================================================================
@@ -450,11 +510,10 @@ void SMESH_Mesh_i::ClearLog()
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetId()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::GetId()throw(SALOME::SALOME_Exception)
 {
-  MESSAGE("SMESH_Mesh_i::GetId");
-  return _id;
+       MESSAGE("SMESH_Mesh_i::GetId");
+       return _id;
 }
 
 //=============================================================================
@@ -463,21 +522,21 @@ CORBA::Long SMESH_Mesh_i::GetId()
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetStudyId()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::GetStudyId()throw(SALOME::SALOME_Exception)
 {
-  return _studyId;
+       return _studyId;
 }
+
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 
-void SMESH_Mesh_i::SetImpl(::SMESH_Mesh* impl)
+void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl)
 {
-  MESSAGE("SMESH_Mesh_i::SetImpl");
-  _impl = impl;
+       MESSAGE("SMESH_Mesh_i::SetImpl");
+       _impl = impl;
 }
 
 //=============================================================================
@@ -486,10 +545,10 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh* impl)
  */
 //=============================================================================
 
-::SMESH_Mesh& SMESH_Mesh_i::GetImpl()
+::SMESH_Mesh & SMESH_Mesh_i::GetImpl()
 {
-  MESSAGE("SMESH_Mesh_i::GetImpl()");
-  return  *_impl;
+       MESSAGE("SMESH_Mesh_i::GetImpl()");
+       return *_impl;
 }
 
 //=============================================================================
@@ -500,8 +559,8 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh* impl)
 
 GEOM::GEOM_Gen_ptr SMESH_Mesh_i::GetGeomEngine()
 {
-  MESSAGE("SMESH_Mesh_i::GetGeomEngine");
-  return GEOM::GEOM_Gen::_duplicate(_geom);
+       MESSAGE("SMESH_Mesh_i::GetGeomEngine");
+       return GEOM::GEOM_Gen::_duplicate(_geom);
 }
 
 //=============================================================================
@@ -512,9 +571,9 @@ GEOM::GEOM_Gen_ptr SMESH_Mesh_i::GetGeomEngine()
 
 void SMESH_Mesh_i::SetIor(SMESH::SMESH_Mesh_ptr myIor)
 {
-  MESSAGE("SMESH_Mesh_i::SetIor");
-  _myIor = SMESH::SMESH_Mesh::_duplicate(myIor);
-  ASSERT(! CORBA::is_nil(_myIor));
+       MESSAGE("SMESH_Mesh_i::SetIor");
+       _myIor = SMESH::SMESH_Mesh::_duplicate(myIor);
+       ASSERT(!CORBA::is_nil(_myIor));
 }
 
 //=============================================================================
@@ -525,10 +584,11 @@ void SMESH_Mesh_i::SetIor(SMESH::SMESH_Mesh_ptr myIor)
 
 SMESH::SMESH_Mesh_ptr SMESH_Mesh_i::GetIor()
 {
-  MESSAGE("SMESH_Mesh_i::GetIor");
-  ASSERT(! CORBA::is_nil(_myIor));
-  return SMESH::SMESH_Mesh::_duplicate(_myIor);
+       MESSAGE("SMESH_Mesh_i::GetIor");
+       ASSERT(!CORBA::is_nil(_myIor));
+       return SMESH::SMESH_Mesh::_duplicate(_myIor);
 }
+
 //=============================================================================
 /*!
  *  
@@ -537,9 +597,10 @@ SMESH::SMESH_Mesh_ptr SMESH_Mesh_i::GetIor()
 
 SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
 {
-  SMESH_MeshEditor_i* aMeshEditor =  new  SMESH_MeshEditor_i(_impl->GetMeshDS());
-  SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
-  return aMesh._retn();
+       SMESH_MeshEditor_i *aMeshEditor =
+               new SMESH_MeshEditor_i(_impl->GetMeshDS());
+       SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
+       return aMesh._retn();
 }
 
 //=============================================================================
@@ -548,35 +609,21 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
  */
 //=============================================================================
 
-void SMESH_Mesh_i::ExportMED( const char* file )
-  throw (SALOME::SALOME_Exception)
-{
-  _impl->ExportMED( file );
-}
-void SMESH_Mesh_i::ExportDAT( const char* file )
-  throw (SALOME::SALOME_Exception)
-{
-  _impl->ExportDAT( file );
-}
-void SMESH_Mesh_i::ExportUNV( const char* file )
-  throw (SALOME::SALOME_Exception)
+SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()throw(SALOME::SALOME_Exception)
 {
-  _impl->ExportUNV( file );
+       SMESH_MEDMesh_i *aMedMesh = new SMESH_MEDMesh_i(this);
+       SALOME_MED::MESH_var aMesh = aMedMesh->_this();
+       return aMesh._retn();
 }
 
-
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
-
-SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbNodes()throw(SALOME::SALOME_Exception)
 {
-  SMESH_MEDMesh_i* aMedMesh =  new  SMESH_MEDMesh_i( this );
-  SALOME_MED::MESH_var aMesh = aMedMesh->_this();
-  return aMesh._retn();
+       return _impl->NbNodes();
 }
 
 //=============================================================================
@@ -584,10 +631,9 @@ SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()
  *  
  */
 //=============================================================================
-CORBA::Long SMESH_Mesh_i::NbNodes()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbEdges()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbNodes();
+       return _impl->NbEdges();
 }
 
 //=============================================================================
@@ -595,31 +641,19 @@ CORBA::Long SMESH_Mesh_i::NbNodes()
  *  
  */
 //=============================================================================
-CORBA::Long SMESH_Mesh_i::NbEdges()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbFaces()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbEdges();
+       return _impl->NbFaces();
 }
 
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-CORBA::Long SMESH_Mesh_i::NbFaces()
-    throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbTriangles()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbFaces();
+       return _impl->NbTriangles();
 }
-CORBA::Long SMESH_Mesh_i::NbTriangles()
-    throw (SALOME::SALOME_Exception)
-{
-  return _impl->NbTriangles();
-}
-CORBA::Long SMESH_Mesh_i::NbQuadrangles()
-    throw (SALOME::SALOME_Exception)
+
+CORBA::Long SMESH_Mesh_i::NbQuadrangles()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbQuadrangles();
+       return _impl->NbQuadrangles();
 }
 
 //=============================================================================
@@ -627,20 +661,19 @@ CORBA::Long SMESH_Mesh_i::NbQuadrangles()
  *  
  */
 //=============================================================================
-CORBA::Long SMESH_Mesh_i::NbVolumes()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbVolumes()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbVolumes();
+       return _impl->NbVolumes();
 }
-CORBA::Long SMESH_Mesh_i::NbTetras()
-  throw (SALOME::SALOME_Exception)
+
+CORBA::Long SMESH_Mesh_i::NbTetras()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbTetras();
+       return _impl->NbTetras();
 }
-CORBA::Long SMESH_Mesh_i::NbHexas()
-  throw (SALOME::SALOME_Exception)
+
+CORBA::Long SMESH_Mesh_i::NbHexas()throw(SALOME::SALOME_Exception)
 {
-  return _impl->NbHexas();
+       return _impl->NbHexas();
 }
 
 //=============================================================================
@@ -648,8 +681,18 @@ CORBA::Long SMESH_Mesh_i::NbHexas()
  *  
  */
 //=============================================================================
-CORBA::Long SMESH_Mesh_i::NbSubMesh()
-  throw (SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception)
+{
+       return _impl->NbSubMesh();
+}
+
+/*!
+ * Export mesh to a file
+ * @param fileName file name where to export the file
+ * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+ */
+void SMESH_Mesh_i::Export(const char* fileName, const char* fileType)
+       throw (SALOME::SALOME_Exception)
 {
-  return _impl->NbSubMesh();
+       _impl->Export(fileName, fileType);
 }