]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
NRI : Bad merge
authornri <nri@opencascade.com>
Wed, 9 Jul 2003 08:17:18 +0000 (08:17 +0000)
committernri <nri@opencascade.com>
Wed, 9 Jul 2003 08:17:18 +0000 (08:17 +0000)
ARCHIMEDE/Archimede_VolumeSection.cxx [deleted file]
ARCHIMEDE/Archimede_VolumeSection.hxx [deleted file]
ARCHIMEDE/Makefile.in [deleted file]
GEOM/GEOM_Gen_i.cc [deleted file]
GEOM/GEOM_Gen_i.hh [deleted file]
GEOM/GEOM_Shape_i.cc [deleted file]
GEOM/GEOM_Shape_i.hh [deleted file]
GEOM/Makefile.in [deleted file]
GEOM/geom.cxx [deleted file]

diff --git a/ARCHIMEDE/Archimede_VolumeSection.cxx b/ARCHIMEDE/Archimede_VolumeSection.cxx
deleted file mode 100644 (file)
index 86d058a..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-//  GEOM ARCHIMEDE : algorithm implementation
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : Archimede_VolumeSection.cxx
-//  Author : Nicolas REJNERI
-//  Module : GEOM
-//  $Header$
-
-using namespace std;
-#include "Archimede_VolumeSection.hxx"
-#include "utilities.h"
-
-#include <iostream.h>
-#include <BRepMesh_IncrementalMesh.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopLoc_Location.hxx>
-#include <Poly_Triangulation.hxx>
-#include <Poly_Array1OfTriangle.hxx>
-#include <BRep_Tool.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Shape.hxx>
-#include <math_Matrix.hxx>
-#include <math.h>
-#include <GC_MakePlane.hxx>
-#include <stdlib.h>
-#include <gp_Trsf.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Pln.hxx>
-
-#include <GeomAPI_ProjectPointOnSurf.hxx>
-#include <Geom_RectangularTrimmedSurface.hxx>
-
-//------------------------------------------------------------------------------------------------------- 
-//----------------------------------- Methodes publiques -------------------------------------------------
-//------------------------------------------------------------------------------------------------------- 
-
-//  Maillage de la shape
-VolumeSection::VolumeSection(TopoDS_Shape S , Standard_Real Precision):myShape(S),Tolerance(Precision)
-{
-  // Maillage de la shape myShape
-  BRepMesh_IncrementalMesh(myShape,Tolerance);
-}
-
-TopoDS_Shape VolumeSection::GetShape()
-{
-  return myShape;
-}
-
-void VolumeSection::SetPlane(Handle (Geom_Plane) P)
-{
-  myPlane = P;
-}
-
-void VolumeSection::CenterOfGravity()
-{
-  Standard_Integer i;
-  Standard_Integer nbNodes;
-  TopExp_Explorer ex;
-  TopLoc_Location L;
-  
-  // Boucle sur les faces de la shape
-  
-  Xmin = 1000000000;
-  Ymin = 1000000000;
-  Zmin = 1000000000;
-  Xmax = -1000000000;
-  Ymax = -1000000000;
-  Zmax = -1000000000;
-  
-  for (ex.Init(myShape, TopAbs_FACE); ex.More(); ex.Next()) 
-    {
-      TopoDS_Face F = TopoDS::Face(ex.Current());
-      Handle(Poly_Triangulation) Tr = BRep_Tool::Triangulation(F, L);
-      if(Tr.IsNull())
-       MESSAGE("Error, null layer" )
-      nbNodes = Tr->NbNodes();
-      const TColgp_Array1OfPnt& Nodes = Tr->Nodes();
-      
-      // Calcul des dimensions de la boite englobante du solide
-      
-      for(i=1;i<=nbNodes;i++)
-       {
-         InitPoint = Nodes(i).Transformed(L.Transformation());
-         if(InitPoint.X() < Xmin)
-           Xmin = InitPoint.X();
-         if(InitPoint.X() > Xmax)
-           Xmax = InitPoint.X();
-         if(InitPoint.Y() < Ymin)
-           Ymin = InitPoint.Y();
-         if(InitPoint.Y() > Ymax)
-           Ymax = InitPoint.Y();
-         if(InitPoint.Z() < Zmin)
-           Zmin = InitPoint.Z();
-         if(InitPoint.Z() > Zmax)
-           Zmax = InitPoint.Z();
-         
-       }
-    }
-  
-  // Creation du point d'initialisation, c'est à dire le centre de gravité 
-  //géométrique de la boite englobante
-  
-  InitPoint.SetX(0.5 * (Xmin + Xmax));
-  InitPoint.SetY(0.5 * (Ymin + Ymax));
-  InitPoint.SetZ(0);
-}
-
-Standard_Real VolumeSection::CalculateVolume(Standard_Real Elevation)
-{
-  Standard_Integer i,noeud[3],flag[3];
-  Standard_Integer nbNodes;
-  TopExp_Explorer ex;
-  TopLoc_Location L;
-  Standard_Real z[3];
-  Standard_Real Volume=0;
-  Standard_Real Determinant=0;
-  gp_Pnt P[3];
-  
-  // Projection du point d'initialisation sur le plan de section
-  
-  InitPoint.SetZ(Elevation);
-
-  for (ex.Init(myShape, TopAbs_FACE); ex.More(); ex.Next()) 
-    {
-      TopoDS_Face F = TopoDS::Face(ex.Current());
-      Handle(Poly_Triangulation) Tr = BRep_Tool::Triangulation(F, L);
-      if(Tr.IsNull())
-       MESSAGE("Error, null layer" )
-      const Poly_Array1OfTriangle& triangles = Tr->Triangles();
-      Standard_Integer nbTriangles = Tr->NbTriangles();
-      nbNodes = Tr->NbNodes();
-      const TColgp_Array1OfPnt& Nodes = Tr->Nodes();
-      
-      // Calcul des volumes de chaque triangle, de chaque face 
-      //en tenant compte des triangles coupés par le plan de section
-      
-      for (i=1;i<=nbTriangles;i++) 
-       {
-         Determinant=0;
-         //Gardons la meme orientation des noeuds
-         if (F.Orientation()  == TopAbs_REVERSED)
-           triangles(i).Get(noeud[0], noeud[2], noeud[1]);
-         else 
-           triangles(i).Get(noeud[0], noeud[1], noeud[2]);
-         
-          P[0] = Nodes(noeud[0]).Transformed(L.Transformation());
-         z[0] = P[0].Z();
-         P[1] = Nodes(noeud[1]).Transformed(L.Transformation());
-         z[1] = P[1].Z();
-          P[2] = Nodes(noeud[2]).Transformed(L.Transformation());
-          z[2] = P[2].Z();
-
-         // Determination des cas aux limites pour les triangles
-         Standard_Integer i,compteur=0;
-
-         for (i=0;i<=2;i++)
-           {
-              flag[i]=Standard_False;
-             if(z[i]>=Elevation)
-               {
-                 flag[i]=Standard_True;
-                 compteur++;
-               }
-           }
-         
-         switch(compteur)
-           {
-           case 0:
-             Determinant = ElementaryVolume(P[0],P[1],P[2]);
-             break;
-             
-           case 1:
-             for (i=0;i<=2;i++)
-               {
-                 if (flag[i]==Standard_True)
-                   {
-                     gp_Pnt Result1 = Intersection(P[i],P[(i+1)%3],Elevation);
-                     gp_Pnt Result2 = Intersection(P[i],P[(i+2)%3],Elevation);
-                     Determinant = ElementaryVolume(Result1,P[(i+1)%3],P[(i+2)%3])
-                       + ElementaryVolume(Result1,P[(i+2)%3],Result2);
-                   }
-               }
-             break;
-             
-           case 2:
-             for (i=0;i<=2;i++)
-               {
-                 if (flag[i]==Standard_False)
-                   {
-                     gp_Pnt Result1 = Intersection(P[i],P[(i+1)%3],Elevation);
-                     gp_Pnt Result2 = Intersection(P[i],P[(i+2)%3],Elevation);
-                     Determinant = ElementaryVolume(P[i],Result1,Result2);
-                   }
-               }
-             break;
-             
-           case 3:
-             break;
-           }
-         Volume += Determinant;
-       }
-    }
-  
-  return Volume;
-}
-
-Standard_Real VolumeSection::Archimede(Standard_Real Constante , Standard_Real Epsilon)
-{
-  // Resolution de l equation V(h) = Constante a l aide de l algorithme de dichotomie avec ponderation type
-  // Lagrange
-  
-  Standard_Real c,Binf,Bsup;
-  Standard_Real tempBsupVolume=0;
-  Standard_Real tempBinfVolume=0;
-  Standard_Real tempCVolume = 0;
-
-  Binf = Zmin;
-  Bsup = Zmax;
-  if(Binf>Bsup)
-    {
-      MESSAGE("error, Bound + < Bound - in dichotomy")
-      return -1;
-    }
-  tempBsupVolume = CalculateVolume(Bsup);
-  tempBinfVolume = CalculateVolume(Binf);
-  
-  if (Constante>tempBsupVolume || Constante<tempBinfVolume)
-    {
-      MESSAGE("error, algorithm start Impossible. Wrong constant value" )
-      return -1;
-    }
-  
-  c = ((Binf*(tempBsupVolume-Constante))-(Bsup*(tempBinfVolume-Constante)))
-    /((tempBsupVolume-Constante)-(tempBinfVolume-Constante));
-  tempCVolume = CalculateVolume(c);
-  
-  
-  if(Abs(tempCVolume-Constante)<=Epsilon)
-    {
-      goto endMethod;
-    }
-  else
-    {
-      while((Bsup-Binf)>Epsilon)
-       { 
-         if((tempBinfVolume-Constante)*(tempCVolume-Constante)>0 && Abs(tempCVolume-Constante)>Epsilon)
-           {
-             Binf = c;
-             tempBinfVolume=tempCVolume;
-             
-             c = ((Binf*(tempBsupVolume-Constante))-(Bsup*(tempBinfVolume-Constante)))
-               /((tempBsupVolume-Constante)-(tempBinfVolume-Constante));
- tempCVolume=CalculateVolume(c);
-           }
-         else if((tempBinfVolume-Constante)*(tempCVolume-Constante)<0 && Abs(tempCVolume-Constante)>Epsilon)
-           {
-             Bsup = c;
-             tempBsupVolume =tempCVolume;
-
-             c = ((Binf*(tempBsupVolume-Constante))-(Bsup*(tempBinfVolume-Constante)))
-               /((tempBsupVolume-Constante)-(tempBinfVolume-Constante));
- tempCVolume=CalculateVolume(c);
-           }
-         else
-           {
-             goto endMethod;
-           }
-       }
-      goto endMethod;
-      
-    }
- endMethod:
-  MESSAGE("La ligne de flottaison correspondant a la constante :"<<Constante<<" est a la cote Z = "<<c)
-  
-  return c;
-}
-
-void VolumeSection::MakeRotation(gp_Dir PlaneDirection)
-{
-  gp_Dir Zdirection(0.0,0.0,1.0);
-  Standard_Real VariationAngle = 0;
-  gp_Pnt RotationAxeLocation(0.0,0.0,0.0);
-  gp_Dir RotationAxeDirection(1.0,1.0,1.0);
-  gp_Ax1 RotationAxe(RotationAxeLocation,RotationAxeDirection);
-  gp_Trsf Transformation;
-  
-  VariationAngle = Zdirection.Angle(PlaneDirection);
-  RotationAxe.SetDirection(PlaneDirection.Crossed(Zdirection));
-  Transformation.SetRotation(RotationAxe,VariationAngle);
-  TopLoc_Location L(Transformation);
-  myShape.Move(L);
-  myPlane->Transform(Transformation);
-}
-
-Handle (Geom_RectangularTrimmedSurface) VolumeSection::TrimSurf()
-{
-  Standard_Real Umin,Umax,Vmin,Vmax;
-  gp_Pnt Pmin(Xmin,Ymin,Zmin);
-  GeomAPI_ProjectPointOnSurf Projection(Pmin,myPlane);
-  Projection.Parameters(1,Umin,Vmin);
-  gp_Pnt Pmax(Xmax,Ymax,Zmax);
-  GeomAPI_ProjectPointOnSurf Projection2(Pmax,myPlane);
-  Projection2.Parameters(1,Umax,Vmax);
-  Handle (Geom_RectangularTrimmedSurface) Plane = new Geom_RectangularTrimmedSurface(myPlane,Umin,Umax,Vmin,Vmax);
-  return Plane;
-}
-
-Handle (Geom_RectangularTrimmedSurface) VolumeSection::InvMakeRotation(gp_Dir PlaneDirection, Handle (Geom_RectangularTrimmedSurface) SurfTrim)
-{
-  gp_Dir Zdirection(0.0,0.0,1.0);
-  Standard_Real VariationAngle = 0;
-  gp_Pnt RotationAxeLocation(0.0,0.0,0.0);
-  gp_Dir RotationAxeDirection(1.0,1.0,1.0);
-  gp_Ax1 RotationAxe(RotationAxeLocation,RotationAxeDirection);
-  gp_Trsf Transformation;
-
-  VariationAngle = Zdirection.Angle(PlaneDirection);
-  RotationAxe.SetDirection(PlaneDirection.Crossed(Zdirection));
-  Transformation.SetRotation(RotationAxe,-VariationAngle);
-  SurfTrim->Transform(Transformation);
-  TopLoc_Location L(Transformation);
-  myShape.Move(L);
-  
-  return SurfTrim;
-}
-
-Handle (Geom_RectangularTrimmedSurface) VolumeSection::AjustePlan(Handle (Geom_RectangularTrimmedSurface) SurfTrim, Standard_Real Cote, gp_Pnt PosPlan)
-{
-  gp_Trsf Transformation;
-  gp_Pnt PosArchi(PosPlan.X(),PosPlan.Y(),Cote);
-  
-  Transformation.SetTranslation(PosPlan,PosArchi);
-  SurfTrim->Transform(Transformation);
-  
-  return SurfTrim;
-      
-}
-
-//------------------------------------------------------------------------------------------------------- 
-//----------------------------------- Methodes privees ---------------------------------------------------
-//------------------------------------------------------------------------------------------------------- 
-
-
- //Fonction calculant l'intersection de la droite passant par les points P1 et P2 
-//avec le plan horizontal Z=Hauteur
-gp_Pnt VolumeSection::Intersection(gp_Pnt P1,gp_Pnt P2,Standard_Real Hauteur)
-{
-  Standard_Real constante;
-  gp_Pnt Point;
-
-  constante = (Hauteur-P1.Z())/(P2.Z()-P1.Z());
-  Point.SetX(P1.X()*(1-constante) + constante*P2.X());
-  Point.SetY(P1.Y()*(1-constante) + constante*P2.Y());
-  Point.SetZ(Hauteur);
-  
-  return Point;
-}
-
-//Fonction calculant le volume élémentaire de chaque tétraedre à partir de 3 points
-Standard_Real VolumeSection::ElementaryVolume(gp_Pnt P1,gp_Pnt P2,gp_Pnt P3)
-{
-  Standard_Real Determinant;
-  
-  math_Matrix M(1,3,1,3);
-  
-  M(1,1)=P1.X()-InitPoint.X();
-  M(1,2)=P2.X()-InitPoint.X();
-  M(1,3)=P3.X()-InitPoint.X();
-  M(2,1)=P1.Y()-InitPoint.Y();
-  M(2,2)=P2.Y()-InitPoint.Y();
-  M(2,3)=P3.Y()-InitPoint.Y();
-  M(3,1)=P1.Z()-InitPoint.Z();
-  M(3,2)=P2.Z()-InitPoint.Z();
-  M(3,3)=P3.Z()-InitPoint.Z();
-  
-  Determinant = (1.0/6) * M.Determinant();
-
-  return Determinant;
-}
-
-void VolumeSection::getZ( double& min, double& max)
-{
-  min = Zmin;
-  max = Zmax;
-}
diff --git a/ARCHIMEDE/Archimede_VolumeSection.hxx b/ARCHIMEDE/Archimede_VolumeSection.hxx
deleted file mode 100644 (file)
index 757efa2..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-//  GEOM ARCHIMEDE : algorithm implementation
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : Archimede_VolumeSection.hxx
-//  Author : Nicolas REJNERI
-//  Module : GEOM
-//  $Header$
-
-#ifndef ARCHIMEDE_VOLUMESECTION_HXX
-#define ARCHIMEDE_VOLUMESECTION_HXX
-
-#include <gp_Pnt.hxx>
-#include <gp_Dir.hxx>
-#include <TopoDS_Shape.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_RectangularTrimmedSurface.hxx>
-
-class VolumeSection{
-
-public:
-  // Constructeur effectuant le maillage de peau de la shape
-  VolumeSection(TopoDS_Shape , Standard_Real); 
-
-  //Methode qui affecte à un point,les coordonnées de centre de la boite englobante de la shape 
-  void CenterOfGravity();
-
-  // Methode qui calcule le volume sous un plan Z = h
-  Standard_Real CalculateVolume(Standard_Real); 
-
-  // Methode qui resout l'equation V(h)=constante
-  Standard_Real Archimede(Standard_Real , Standard_Real); 
-
-  // Methode permettant de "setter" un plan afin de l'utiliser à l'interieur de la classe
-  void SetPlane(Handle (Geom_Plane));
-
-  // Methode permettant de récupérer la shape modifiée à l'extérieur de la classe
-  TopoDS_Shape GetShape();
-
-  // Methode effectuant la rotation du plan et de la shape
-  void MakeRotation(gp_Dir);
-
-  // Methode effectuant la rotation inverse du plan et de la shape
-  Handle (Geom_RectangularTrimmedSurface) InvMakeRotation(gp_Dir,Handle(Geom_RectangularTrimmedSurface));
-
-  // Methode permettant de découper le plan selon une projection de la Shape
-  Handle (Geom_RectangularTrimmedSurface) TrimSurf();
-
-  // Methode permmettant de deplacer le plan jusqu'a la position donnée par Archimède
-  Handle (Geom_RectangularTrimmedSurface) AjustePlan(Handle(Geom_RectangularTrimmedSurface),Standard_Real,gp_Pnt);
-
-  void getZ( double& min, double& max);
-  
-private:
-  
-  TopoDS_Shape  myShape;
-  Standard_Real Tolerance;
-  gp_Pnt        InitPoint;
-  Standard_Real Zmin,Zmax,Ymin,Ymax,Xmin,Xmax;
-  Handle(Geom_Plane) myPlane;
-  
-  Standard_Real ElementaryVolume(gp_Pnt,gp_Pnt,gp_Pnt);
-  gp_Pnt        Intersection(gp_Pnt,gp_Pnt,Standard_Real);
-  
-};
-#endif
diff --git a/ARCHIMEDE/Makefile.in b/ARCHIMEDE/Makefile.in
deleted file mode 100644 (file)
index 16847d7..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#  GEOM ARCHIMEDE : algorithm implementation
-#
-#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-# 
-#  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-#
-#
-#
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI
-#  Module : GEOM
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libGeometryArchimede.la 
-LIB_SRC = Archimede_VolumeSection.cxx
-LIB_CLIENT_IDL = 
-
-# header files 
-EXPORT_HEADERS = Archimede_VolumeSection.hxx
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(QT_INCLUDES)
-CXXFLAGS += $(OCC_CXXFLAGS)
-LDFLAGS  += $(OCC_LIBS)
-
-# additional file to be cleaned
-MOSTLYCLEAN =
-CLEAN =
-DISTCLEAN =
-
-@CONCLUDE@
-
diff --git a/GEOM/GEOM_Gen_i.cc b/GEOM/GEOM_Gen_i.cc
deleted file mode 100644 (file)
index 344dd05..0000000
+++ /dev/null
@@ -1,4908 +0,0 @@
-//  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : GEOM_GEN_i.cc file
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
-
-using namespace std;
-#include "GEOM_Gen_i.hh"
-
-#include "Partition_Spliter.hxx"
-#include "Archimede_VolumeSection.hxx"
-
-#include "Utils_CorbaException.hxx"
-#include "utilities.h"
-
-#include <stdio.h>
-
-// Cascade headers
-
-#include <Standard_Failure.hxx>
-
-#include <gp_Circ.hxx>
-#include <gp_Pln.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_Line.hxx>
-#include <GeomFill_Line.hxx>
-#include <GeomFill_AppSurf.hxx>
-#include <GeomFill_SectionGenerator.hxx>
-#include <Geom_BSplineSurface.hxx>
-#include <Geom_TrimmedCurve.hxx>
-#include <GC_MakeArcOfCircle.hxx>
-#include <GC_Root.hxx>
-
-#include <BRepCheck_Analyzer.hxx>
-#include <BRepAlgoAPI.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <BRepBuilderAPI_Copy.hxx>
-#include <BRepAlgoAPI_Common.hxx>
-#include <BRepAlgoAPI_Cut.hxx>
-#include <BRepAlgoAPI_Fuse.hxx>
-#include <BRepAlgoAPI_Section.hxx>
-#include <BRepOffsetAPI_Sewing.hxx>
-#include <BRepOffsetAPI_MakePipe.hxx>
-
-#include <BRepBuilderAPI_MakeVertex.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <BRepBuilderAPI_MakeFace.hxx>
-
-#include <BRepLib.hxx>
-#include <BRepBndLib.hxx>
-#include <Bnd_Box.hxx>
-
-#include <BRepBuilderAPI_MakeShell.hxx>
-#include <BRepPrim_Builder.hxx>
-#include <BRepBuilderAPI_MakeSolid.hxx>
-#include <BRepClass3d_SolidClassifier.hxx>
-
-#include <BRepBuilderAPI_MakeWire.hxx>
-#include <BRepBuilderAPI_Transform.hxx>
-#include <BRepPrimAPI_MakeRevol.hxx>
-#include <BRepPrimAPI_MakePrism.hxx>
-#include <BRepPrimAPI_MakeTorus.hxx>
-#include <BRepPrimAPI_MakeBox.hxx>
-#include <BRepPrimAPI_MakeSphere.hxx>
-#include <BRepPrimAPI_MakeCylinder.hxx>
-#include <BRepPrimAPI_MakeCone.hxx>
-#include <BRepFilletAPI_MakeFillet.hxx>
-#include <BRepFilletAPI_MakeChamfer.hxx>
-#include <BRepTools.hxx>
-#include <BRepTools_Quilt.hxx>
-#include <BRep_Tool.hxx>
-
-#include <GeomAPI_ProjectPointOnCurve.hxx>
-
-#include <BRepGProp.hxx>
-#include <GProp_GProps.hxx>
-#include <Precision.hxx>
-
-//VRV: OCC 4.0 migration
-#include <STEPControl_Reader.hxx>
-#include <IGESControl_Reader.hxx>
-//VRV: OCC 4.0 migration
-
-#include <IFSelect_ReturnStatus.hxx>
-#include <TColStd_HSequenceOfTransient.hxx>
-
-//VRV: OCC 4.0 migration
-#include <IGESControl_Writer.hxx>
-#include <IGESControl_Controller.hxx>
-#include <STEPControl_Writer.hxx>
-#include <Interface_Static.hxx>
-//#include <STEPControlStd_StepModelType.hxx>
-//VRV: OCC 4.0 migration
-
-#include <TopoDS_Shape.hxx>
-#include <TopAbs.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopoDS_Solid.hxx>
-
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopTools_MapOfShape.hxx>
-#include <TopTools_MapIteratorOfMapOfShape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TopTools_Array1OfShape.hxx>
-
-#include <IGESData_IGESEntity.hxx>
-
-#include <TDF_Tool.hxx>
-#include <TDF_Label.hxx>
-#include <TDataStd_Name.hxx>
-#include <TDataStd_Comment.hxx>
-#include <TDF_Reference.hxx>
-#include <TDF_Data.hxx>
-#include <TNaming_Builder.hxx>
-#include <TNaming_NamedShape.hxx>
-#include <TNaming_Tool.hxx>
-//  #include <TDocStd_Owner.hxx>
-
-#include "SALOMEDS_Tool.hxx"
-#include "GEOMDS_Commands.hxx"
-#include "GEOMDS_Explorer.hxx"
-
-#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
-
-//============================================================================
-// function : GEOM_Gen_i()
-// purpose  : constructor to be called for servant creation. 
-//============================================================================
-GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb,
-                      PortableServer::POA_ptr poa,
-                      PortableServer::ObjectId * contId, 
-                      const char *instanceName, 
-                      const char *interfaceName) :
-  Engines_Component_i(orb, poa, contId, instanceName, interfaceName)
-{
-  _thisObj = this ;
-  _id = _poa->activate_object(_thisObj);
-  // SCRUTE(this)
-  name_service = new SALOME_NamingService(_orb);
-  myOCAFApp    = new GEOMDS_Application();
-  myStudyID    = -1;
-  GetCurrentStudy(0);//for correct work of SuperVisor
-}
-
-
-
-//============================================================================
-// function : ~GEOM_Gen_i()
-// purpose  : destructor
-//============================================================================
-GEOM_Gen_i::~GEOM_Gen_i() {
-  delete name_service;
-}
-
-
-//============================================================================
-// function : IORToLocalPersistentID()
-// purpose  :
-//============================================================================
-char* GEOM_Gen_i::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
-                                        const char* IORString,
-                                        CORBA::Boolean isMultiFile,
-                                        CORBA::Boolean isASCII)
-{
-  GEOM::GEOM_Shape_var aShape = GEOM::GEOM_Shape::_narrow(_orb->string_to_object(IORString));
-  if (!CORBA::is_nil(aShape)) {
-    return strdup(aShape->ShapeId());
-  }
-  return 0;
-}
-
-
-//============================================================================
-// function : LocalPersistentIDToIOR()
-// purpose  : Create/Load CORBA object from a persistent ref (an entry)
-//          : Used when a study is loaded
-//          : The IOR (IORName) of object created is returned
-//============================================================================
-char* GEOM_Gen_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
-                                        const char* aLocalPersistentID,
-                                        CORBA::Boolean isMultiFile,
-                                        CORBA::Boolean isASCII) 
-{ 
-  SALOMEDS::Study_var myStudy = theSObject->GetStudy();
-  GetCurrentStudy(myStudy->StudyId());
-  Handle(TDocStd_Document) aDoc = Handle(TDocStd_Document)::DownCast(myStudyIDToDoc(myStudy->StudyId()));
-  CORBA::String_var aPersRefString = aLocalPersistentID;
-
-  /* For a GEOM::GEOM_Shape the pers_ref is the Entry in the OCAF document */
-  TCollection_ExtendedString MainIOR;
-  TDF_Label Lab;
-  TDF_Tool::Label(aDoc->GetData(), aPersRefString, Lab );
-  
-  Handle(TNaming_NamedShape) NS;
-  Lab.FindAttribute( TNaming_NamedShape::GetID(), NS );
-  TopoDS_Shape S = TNaming_Tool::GetShape(NS);
-
-  /* shapetype, index=0, topo, orb, shapetype, ismain=true and name are setted and modified later ? */
-  GEOM::GEOM_Shape_var result = CreateObject(S);
-  GEOMDS_Commands GC( aDoc->Main() ) ;
-  
-  if ( GC.HasIOR(Lab) ) { /* shape already created/loaded */
-    return 0 ;
-  }
-
-  /******************* Dependent object (not a main shape) *********************/
-  if( GC.IsDependentShape(Lab) ) {
-    
-    TDF_Label mainLabel ;
-    Standard_Boolean mainShapeOk = GC.GetMainShapeLabel(Lab, mainLabel) ;
-    
-    /* Main object not yet loaded we load/create it */
-    if( !GC.HasIOR(mainLabel) ) {
-      
-      TCollection_AsciiString entry;
-      TDF_Tool::Entry(mainLabel,entry);
-      CORBA::String_var ent = strdup(entry.ToCString());
-      
-      /* Create the main object recursively */
-      MainIOR = LocalPersistentIDToIOR(theSObject, ent, isMultiFile, isASCII) ;
-    } else {
-      GC.ReturnNameIOR( mainLabel, MainIOR ); 
-    }
-    
-    result->MainName( TCollection_AsciiString(MainIOR).ToCString() ) ;      
-    result->IsMainShape(false) ;
-    result->ShapeId(aPersRefString);
-    
-    Handle(TDF_Reference) aRef;
-    Lab.FindAttribute( TDF_Reference::GetID(), aRef );
-    TDF_Label myL = aRef->Get() ;
-    Handle(TNaming_NamedShape) NN;
-    myL.FindAttribute( TNaming_NamedShape::GetID(), NN );
-    TopoDS_Shape mainTopo = TNaming_Tool::GetShape(NN);
-
-    GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
-    
-    if(S.ShapeType() != TopAbs_COMPOUND) {
-      /* to set the index of a unique sub shape (Explode All ONLY for the moment !) */
-      ListOfID->length(1);
-      int index = 1;
-      TopTools_MapOfShape M;
-      TopExp_Explorer Exp ;
-      for( Exp.Init(mainTopo, TopAbs_ShapeEnum( result->ShapeType() )) ; Exp.More(); Exp.Next() )  {
-       if ( M.Add(Exp.Current()) ) {
-         if(Exp.Current().IsSame(S) ) {
-           ListOfID[0] = index;
-           break;
-         }
-         index++ ;
-       }       
-      }
-      result->Index(ListOfID) ;
-      return result->Name(); 
-    }
-    else {
-      /* Here is a TopAbs_COMPOUND : we set the list/index for a compound : containing two or more sub shapes  */
-      /* Warning : the Corba shape has a shapetype Compound : in GEOMDS_Client we have to retrieve the kind of */
-      /* subshapes contained in this compound !                                                                */
-      TopTools_SequenceOfShape SS;
-      TopoDS_Iterator it ;
-      TopExp_Explorer exp ;
-      TopAbs_ShapeEnum subType ;
-      
-      /* Set all sub shapes in a sequence of shapes  */
-      for ( it.Initialize( S, true, true ) ; it.More(); it.Next() ) {
-       subType = it.Value().ShapeType() ;
-       SS.Append( it.Value() ) ;
-      }
-      
-      ListOfID->length( SS.Length() ) ;
-      int j, k ;  /* in TopTools_SequenceOfShape index start at 1 */
-      
-      for( k=1; k<=SS.Length(); k++ ) {
-       j = 1 ;
-       for( exp.Init( mainTopo, subType ); exp.More(); exp.Next() ) {  
-         if( exp.Current().IsSame( SS.Value(k) ) ) {
-           ListOfID[k-1] = j ;
-         }
-         j++ ;
-       }
-      }
-      result->Index(ListOfID) ;
-      return result->Name();
-    }
-    
-  }
-  /******************* Independent object (not a sub shape) *********************/
-  else {
-    result->IsMainShape(true) ;
-    if( !GC.AddIORNameAttribute(Lab, result->Name() ) )  {
-      MESSAGE("in LocalPersistentIDToIOR, NAME/IOR attribute already exist." << endl ) ;
-    }
-    Handle(TNaming_NamedShape) NamedShape ;  
-    bool notTested = Lab.FindAttribute(TNaming_NamedShape::GetID(), NamedShape) ;
-    result->ShapeId(aPersRefString);
-    return result->Name(); 
-  }
-}
-
-//============================================================================
-// function : CanPublishInStudy
-// purpose  : 
-//============================================================================
-bool GEOM_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
-{
-  GEOM::GEOM_Shape_var aShape = GEOM::GEOM_Shape::_narrow(theIOR);
-  return !(aShape->_is_nil());
-}
-
-
-//============================================================================
-// function : PublishInStudy
-// purpose  : 
-//============================================================================
-SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
-                                                SALOMEDS::SObject_ptr theSObject,
-                                                CORBA::Object_ptr theObject,
-                                                const char* theName) throw (SALOME::SALOME_Exception)
-{
-  SALOMEDS::SObject_var aResultSO;
-  if(CORBA::is_nil(theObject)) return aResultSO;
-
-  GEOM::GEOM_Shape_var aShape = GEOM::GEOM_Shape::_narrow(theObject);
-  if(aShape->_is_nil()) return aResultSO;
-
-  if(theStudy->_is_nil()) return aResultSO;
-
-  SALOMEDS::GenericAttribute_var anAttr;
-  SALOMEDS::StudyBuilder_var     aStudyBuilder = theStudy->NewBuilder(); 
-
-  SALOMEDS::SComponent_var       aFather = theStudy->FindComponent("GEOM"); 
-  if (aFather->_is_nil()) {
-    aFather = aStudyBuilder->NewComponent("GEOM");
-    anAttr = aStudyBuilder->FindOrCreateAttribute(aFather, "AttributeName");
-    SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue("Geometry");
-    anAttr = aStudyBuilder->FindOrCreateAttribute(aFather, "AttributePixMap");
-    SALOMEDS::AttributePixMap::_narrow(anAttr)->SetPixMap("ICON_OBJBROWSER_Geometry");
-    aStudyBuilder->DefineComponentInstance(aFather, GEOM_Gen::_this());
-  }
-  if (aFather->_is_nil()) return aResultSO;
-  
-  if (CORBA::is_nil(theSObject)) {
-    aResultSO = aStudyBuilder->NewObject(aFather);
-  } else {
-    if (!theSObject->ReferencedObject(aResultSO)) 
-      THROW_SALOME_CORBA_EXCEPTION("Publish in study supervision graph error",SALOME::BAD_PARAM);
-  }
-  anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeIOR");
-  SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-  anIOR->SetValue(aShape->Name());
-
-  anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributePixMap");
-  SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-  TCollection_AsciiString aShapeName("Shape_");  
-
-  if ( aShape->ShapeType() == GEOM::COMPOUND ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" );
-    aShapeName = "Compound_";
-  } else if ( aShape->ShapeType() == GEOM::COMPSOLID ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPSOLID" );
-    aShapeName = "Compsolid_";
-  } else if ( aShape->ShapeType() == GEOM::SOLID ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_SOLID" );
-    aShapeName = "Solid_";
-  } else if ( aShape->ShapeType() == GEOM::SHELL ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_SHELL" );
-    aShapeName = "Shell_";
-  } else if ( aShape->ShapeType() == GEOM::FACE ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_FACE" );
-    aShapeName = "Face_";
-  } else if ( aShape->ShapeType() == GEOM::WIRE ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_WIRE" );
-    aShapeName = "Wire_";
-  } else if ( aShape->ShapeType() == GEOM::EDGE ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_EDGE" );
-    aShapeName = "Edge_";
-  } else if ( aShape->ShapeType() == GEOM::VERTEX ) {
-    aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" );
-    aShapeName = "Vertex_";
-  }                                          
-  if (strlen(theName) == 0) aShapeName += TCollection_AsciiString(aResultSO->Tag());
-  else aShapeName = TCollection_AsciiString(strdup(theName));
-
-  //Set a name of the added shape
-  anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeName");
-  SALOMEDS::AttributeName_var aNameAttrib = SALOMEDS::AttributeName::_narrow(anAttr);
-  aNameAttrib->SetValue(aShapeName.ToCString());
-
-  //Add a reference to published object
-//    aStudyBuilder->Addreference(theObject, aResultSO);
-  return aResultSO._retn();
-}
-
-//============================================================================
-// function : Save()
-// purpose  : save OCAF/Geom document
-//============================================================================
-SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
-                                   const char* theURL,
-                                   bool isMultiFile) {
-  SALOMEDS::TMPFile_var aStreamFile;
-  // Get a temporary directory to store a file
-  TCollection_AsciiString aTmpDir = (isMultiFile)?TCollection_AsciiString((char*)theURL):SALOMEDS_Tool::GetTmpDir();
-  // Create a list to store names of created files
-  SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames;
-  aSeq->length(1);
-  // Prepare a file name to open
-  TCollection_AsciiString aNameWithExt(SALOMEDS_Tool::GetNameFromPath(theComponent->GetStudy()->URL()));
-  aNameWithExt += TCollection_AsciiString("_GEOM.sgd");
-  aSeq[0] = CORBA::string_dup(aNameWithExt.ToCString());
-  // Build a full file name of temporary file
-  TCollection_AsciiString aFullName = aTmpDir + aNameWithExt;
-  // Save GEOM component in this file
-  myOCAFApp->SaveAs(myCurrentOCAFDoc, aFullName);
-  // Conver a file to the byte stream
-  aStreamFile = SALOMEDS_Tool::PutFilesToStream(aTmpDir.ToCString(), aSeq.in(), isMultiFile);
-  // Remove the created file and tmp directory
-  if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.ToCString(), aSeq.in(), true);
-  // Return the created byte stream
-  return aStreamFile._retn();
-}
-
-SALOMEDS::TMPFile* GEOM_Gen_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent,
-                                        const char* theURL,
-                                        bool isMultiFile) {
-  SALOMEDS::TMPFile_var aStreamFile = Save(theComponent, theURL, isMultiFile);
-  return aStreamFile._retn();
-}
-
-
-CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
-                               const SALOMEDS::TMPFile& theStream,
-                               const char* theURL,
-                               bool isMultiFile) {
-
-  if (theStream.length() <= 9) {
-    MESSAGE("The TMPFile is too short : " << theStream.length() << " bytes ");
-    return false;
-  }
-
-  // Get a temporary directory for a file
-  TCollection_AsciiString aTmpDir = isMultiFile?TCollection_AsciiString((char*)theURL):SALOMEDS_Tool::GetTmpDir();
-  // Conver the byte stream theStream to a file and place it in tmp directory
-  SALOMEDS::ListOfFileNames_var aSeq = SALOMEDS_Tool::PutStreamToFiles(theStream,
-                                                                      aTmpDir.ToCString(),
-                                                                      isMultiFile);
-
-  // Prepare a file name to open
-  TCollection_AsciiString aNameWithExt(aSeq[0]);
-  TCollection_AsciiString aFullName = aTmpDir + aNameWithExt;
-
-  // Open document
-  if (myOCAFApp->Open(aFullName, myCurrentOCAFDoc) != CDF_RS_OK) return false;
-
-  // Remove the created file and tmp directory
-  if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.ToCString(), aSeq.in(), true);
-
-  SALOMEDS::Study_var Study = theComponent->GetStudy();
-  TCollection_AsciiString name( strdup(Study->Name()) );
-
-  int StudyID = Study->StudyId();
-  myStudyIDToDoc.Bind( StudyID, myCurrentOCAFDoc );  
-  myStudyID = StudyID;
-    
-  /* We clear all IOR (nameIOR) attributes of all objects before reconstruction */
-  /* This information will be setted when each object is reconstructed          */
-  GEOMDS_Commands GC( myCurrentOCAFDoc->Main() ) ;
-  GC.ClearAllIOR(myCurrentOCAFDoc->Main());
-
-  return true;
-}
-
-CORBA::Boolean GEOM_Gen_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent,
-                                    const SALOMEDS::TMPFile& theStream,
-                                    const char* theURL,
-                                    bool isMultiFile) {
-  return Load(theComponent, theStream, theURL, isMultiFile);
-}
-
-//  //============================================================================
-//  // function : Save()
-//  // purpose  : save OCAF/Geom document
-//  //============================================================================
-//  void GEOM_Gen_i::Save(const char *IORSComponent, const char *aUrlOfFile) 
-//  {
-
-//    TCollection_ExtendedString path(strdup(aUrlOfFile));
-//    TCollection_ExtendedString pathWithExt = path + TCollection_ExtendedString(".sgd");
-//    myOCAFApp->SaveAs(myCurrentOCAFDoc,pathWithExt);
-//  }
-
-
-//  //============================================================================
-//  // function : Load()
-//  // purpose  : Load OCAF/Geom document
-//  //============================================================================
-//  void GEOM_Gen_i::Load(const char *IORSComponent, const char *aUrlOfFile) 
-//  {
-
-//    TCollection_ExtendedString path(strdup(aUrlOfFile));
-//    TCollection_ExtendedString pathWithExt = path + TCollection_ExtendedString(".sgd");
-
-//    myOCAFApp->Open(pathWithExt,myCurrentOCAFDoc);
-
-//    SALOMEDS::SComponent_var SC = SALOMEDS::SComponent::_narrow(_orb->string_to_object(IORSComponent));
-//    SALOMEDS::Study_var Study = SC->GetStudy();
-//    TCollection_AsciiString name( strdup(Study->Name()) );
-
-//    int StudyID = Study->StudyId();
-//    myStudyIDToDoc.Bind( StudyID, myCurrentOCAFDoc );  
-//    myStudyID = StudyID;
-
-//    /* We clear all IOR (nameIOR) attributes of all objects before reconstruction */
-//    /* This information will be setted when each object is reconstructed          */
-//    GEOMDS_Commands GC( myCurrentOCAFDoc->Main() ) ;
-//    GC.ClearAllIOR(myCurrentOCAFDoc->Main());
-
-//    return ;
-//  }
-
-
-//============================================================================
-// function : Close()
-// purpose  :
-//============================================================================
-void GEOM_Gen_i::Close(SALOMEDS::SComponent_ptr theComponent)
-{
-  int anID = theComponent->GetStudy()->StudyId();
-  if (anID == myStudyID) GetCurrentStudy(0); // set default value of current study ID, if current is deleted
-  if (myStudyIDToDoc.IsBound(anID)) {
-    // close document in the application
-//      Handle(TDocStd_Owner) anOwner;
-    Handle(TDocStd_Document) aDoc = Handle(TDocStd_Document)::DownCast(myStudyIDToDoc.Find(anID));
-//      Handle(TDocStd_Document) anEmptyDoc;
-//      if (aDoc->Main().Root().FindAttribute(TDocStd_Owner::GetID(), anOwner)) {
-//        anOwner->SetDocument(anEmptyDoc);
-//        cout<<"********** Nullify owner of document"<<endl;
-//      }
-    myOCAFApp->Close(aDoc);
-    myStudyIDToDoc.UnBind(anID); // remove document from GEOM documents data map
-    }
-}
-
-//============================================================================
-// function : CanCopy()
-// purpose  :
-//============================================================================
-CORBA::Boolean GEOM_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) {
-  // Try to retrieve known by Geometry component GEOM_shape by given IOR
-  SALOMEDS::GenericAttribute_var anAttr;
-  if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return false;
-  GEOM::GEOM_Shape_var aShape = GetIORFromString(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value());
-  // If the object is null one it can't be copied: return false
-  if (aShape->_is_nil()) return false;
-  return true;
-}
-
-//============================================================================
-// function : CopyFrom()
-// purpose  :
-//============================================================================
-SALOMEDS::TMPFile* GEOM_Gen_i::CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID) {
-  // Declare a sequence of the byte to store the copied object
-  SALOMEDS::TMPFile_var aStreamFile;
-
-  // Try to get GEOM_Shape object by given SObject
-  SALOMEDS::GenericAttribute_var anAttr;
-  if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return false;
-  GEOM::GEOM_Shape_var aShape = GetIORFromString(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value());
-  // If the object is null one it can't be copied: return false
-  if (aShape->_is_nil()) return aStreamFile._retn();
-  GetCurrentStudy(theObject->GetStudy()->StudyId());
-
-  // Convert a TopoDS_Shape to a stream of bytes
-  TopoDS_Shape aTopology = GetTopoShape(aShape);
-  if (aTopology.IsNull()) return aStreamFile._retn();
-  ostrstream aStreamedShape;
-  BRepTools::Write(aTopology, aStreamedShape);
-  int aSize = aStreamedShape.pcount();
-  char* aBuffer = new char[aSize];
-  memcpy(aBuffer, aStreamedShape.str(), aSize);
-  aStreamedShape.rdbuf()->freeze(0);
-
-  aStreamFile = new SALOMEDS::TMPFile(aSize, aSize, (CORBA::Octet*)aBuffer, 1);
-  
-  // Assign an ID = 1 the the type GEOM_Shape
-  theObjectID = 1;
-
-  // Return created TMPFile
-  return aStreamFile._retn();
-}
-
-//============================================================================
-// function : CanPaste()
-// purpose  :
-//============================================================================
-CORBA::Boolean GEOM_Gen_i::CanPaste(const char* theComponentName, CORBA::Long theObjectID) {
-  // The Geometry component can paste only objects copied by Geometry component
-  // and with the object type = 1
-//    cout<<"********** GEOM_Gen_i::CanPaste ("<<theComponentName<<","<<theObjectID<<")"<<endl;
-  if (strcmp(theComponentName, ComponentDataType()) != 0 || theObjectID != 1) return false;
-  return true;
-}
-
-//============================================================================
-// function : PasteInto()
-// purpose  :
-//============================================================================
-SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream,
-                                           CORBA::Long theObjectID,
-                                           SALOMEDS::SObject_ptr theObject) {
-  // Find the current Study and StudyBuilder
-  SALOMEDS::Study_var aStudy = theObject->GetStudy();
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-
-  // Retrieve a TopoDS_Shape from byte stream
-  TopoDS_Shape aTopology;
-  istrstream aStreamedBrep((char*) &theStream[0], theStream.length());
-  BRep_Builder aBuilder;
-  try {
-    BRepTools::Read(aTopology, aStreamedBrep, aBuilder);
-  } catch (Standard_Failure) {
-//      cout<<"GEOM_Gen_i::PasteInto exception"<<endl;
-    return false;
-  }
-  
-  // Create new object in Geometry component using retrieved topology
-  GEOM::GEOM_Shape_var aShape = CreateObject(aTopology);
-  GetCurrentStudy(aStudy->StudyId());
-  const char *anEntry = InsertInLabel(aTopology, aShape->Name(), myCurrentOCAFDoc) ;
-  aShape->ShapeId(anEntry) ;
-
-  // SObject of the created shape is theObject or new Child of Component if theObject == geom component
-  SALOMEDS::SObject_var aNewSO;
-  if (strcmp(theObject->GetFatherComponent()->GetID(),theObject->GetID()) == 0) {
-    aNewSO = aStudyBuilder->NewObject(theObject);
-  } else aNewSO = SALOMEDS::SObject::_duplicate(theObject);
-  // Add IORAttribute to the Study and set IOR of the created GEOM_Shape to it
-  SALOMEDS::GenericAttribute_var anAttr = aStudyBuilder->FindOrCreateAttribute(aNewSO, "AttributeIOR");
-  SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-  anIOR->SetValue(aShape->Name());
-
-  // Return the created in the Study SObject
-  return aNewSO._retn();
-}
-
-//============================================================================
-// function : ComponentDataType()
-// purpose  :
-//============================================================================
-char* GEOM_Gen_i::ComponentDataType()
-{
-  return strdup("GEOM");
-}
-
-//============================================================================
-// function : register() 
-// purpose  : register 'name' in 'name_service'
-//============================================================================
-void GEOM_Gen_i::register_name(char * name)
-{
-  GEOM::GEOM_Gen_ptr g = GEOM::GEOM_Gen::_narrow(POA_GEOM::GEOM_Gen::_this());
-  name_service->Register(g, strdup(name)); 
-}
-
-
-
-//================================================================================
-// function : SequenceOfShapeFromListOfGeomShape()
-// purpose  : Define a sequence of shapes from 'listShapes' and return its length.
-//          : No control is made on shapes !
-//================================================================================
-int GEOM_Gen_i::SequenceOfShapeFromListOfGeomShape( const GEOM::GEOM_Gen::ListOfGeomShapes& listShapes,
-                                                   TopTools_SequenceOfShape& SS )
-{
-  int nbShapes = listShapes.length() ;
-  if( nbShapes < 1)
-    return 0 ;
-  
-  for(int i=0; i<nbShapes; i++) {
-    GEOM::GEOM_Shape_var aGeomShape = listShapes[i] ;
-    TopoDS_Shape aShape = GetTopoShape(aGeomShape) ;
-    SS.Append(aShape) ;
-  }
-  return nbShapes ;
-}
-
-
-
-
-//=================================================================================
-// function : GetTopoShape()
-// purpose  : Returns a TopoDS_Shape from a GEOM::GEOM_Shape_ptr in 'myCurrentOCAFDoc'
-//          : A null shape is returned if not possible
-//=================================================================================
-TopoDS_Shape GEOM_Gen_i::GetTopoShape(GEOM::GEOM_Shape_ptr shape_ptr)
-{ 
-  TopoDS_Shape tds ;
-
-  TDF_Label lab ;
-  Handle(TDF_Data) D = myCurrentOCAFDoc->GetData() ;
-  TDF_Tool::Label( D, strdup(shape_ptr->ShapeId()), lab, true ) ;
-  Handle(TNaming_NamedShape) NamedShape ;  
-  bool res = lab.FindAttribute(TNaming_NamedShape::GetID(), NamedShape) ;
-
-  if( !res ) {
-    return tds ; /* a null shape is returned */
-  }
-  else {
-    return TNaming_Tool::GetShape(NamedShape) ;
-  }
-}
-
-
-
-//=================================================================================
-// function : GetStringFromIOR()
-// purpose  : returns a string that represents  a 'GEOM::GEOM_Shape_var'
-//=================================================================================
-const char* GEOM_Gen_i::GetStringFromIOR(GEOM::GEOM_Shape_var shapeIOR) {
-  const char * ret = _orb->object_to_string(shapeIOR) ;
-  return ret ;
-}
-
-
-
-//=================================================================================
-// function : GetIORFromString()
-// purpose  : returns a 'GEOM::GEOM_Shape_var' from a string representing it
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::GetIORFromString(const char* stringIOR) {
-  GEOM::GEOM_Shape_var shapeIOR =  GEOM::GEOM_Shape::_narrow(_orb->string_to_object(stringIOR)) ;
-  return shapeIOR ;
-}
-
-
-
-//==================================================================================
-// function : InsertInLabel()
-// purpose  : Insert S = Shape and mystr = name in a new Label of Geom/OCAF document
-//          : and returns the corresponding OCAF entry
-//==================================================================================
-const char * GEOM_Gen_i::InsertInLabel(TopoDS_Shape S, const char *mystr, Handle(TDocStd_Document) OCAFDoc)
-{
-  GEOMDS_Commands GC(OCAFDoc->Main());
-  /* add attributs S and mystr in a new label */
-  TDF_Label Lab = GC.AddShape (S, strdup(mystr));
-
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab,entry);
-  const char *ent = entry.ToCString() ;
-  return ent ;
-}
-
-
-//==================================================================================
-// function : InsertInLabelDependentShape()
-// purpose  : Insert S = Shape and its nameIor in a new Label of Geom/OCAF document
-//          : insert also a reference attribute (a label) to the main shape 'mainshap_ptr'.
-//          : and returns the corresponding OCAF entry of the new label.
-//==================================================================================
-const char * GEOM_Gen_i::InsertInLabelDependentShape( TopoDS_Shape S,
-                                                     const char *nameIor,
-                                                     GEOM::GEOM_Shape_ptr mainshape_ptr,
-                                                     Handle(TDocStd_Document) OCAFDoc )
-{
-  GEOMDS_Commands GC(OCAFDoc->Main());
-  /* add attributs S and nameIor in a new label */
-
-  /* retrieve the label of the main shape in the document */
-  TDF_Label mainRefLab;
-  TDF_Tool::Label(OCAFDoc->GetData(), mainshape_ptr->ShapeId(), mainRefLab);
-
-  /* add attributs : S, nameIor and ref to main */
-  TDF_Label Lab = GC.AddDependentShape(S, strdup(nameIor), mainRefLab);
-
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab, entry);
-  const char *ent = entry.ToCString() ;
-  return ent ;
-}
-
-
-//=================================================================================
-// function : InsertInLabelOneArgument()
-// purpose  :
-//=================================================================================
-void GEOM_Gen_i::InsertInLabelOneArgument(TopoDS_Shape main_topo,
-                                         GEOM::GEOM_Shape_ptr shape_ptr,
-                                         TopoDS_Shape result_topo,     
-                                         GEOM::GEOM_Shape_ptr result,  
-                                         Handle(TDocStd_Document) OCAFDoc)
-{
-  /* Put shape and name into geom/OCAF doc */
-  GEOMDS_Commands GC(OCAFDoc->Main());
-  /* Add attributs 'shape' and 'name_ior' in a new label */
-  TDF_Label Lab = GC.Generated( main_topo, result_topo, result->Name() );
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab, entry);
-  result->ShapeId( entry.ToCString() ) ;
-  
-  /* Create a new label */
-  TDF_Label NewLab = Lab.NewChild();
-  TCollection_ExtendedString Value("Arguments");
-  TDataStd_Name::Set(NewLab,Value);
-  
-  TDF_Label NewLab1 = NewLab.NewChild();
-  TDF_Label RefLab;
-  TDF_Tool::Label(OCAFDoc->GetData(), shape_ptr->ShapeId(), RefLab);
-  TDF_Reference::Set(NewLab1, RefLab);
-}
-
-
-//=================================================================================
-// function : InsertInLabelMoreArguments()
-// purpose  :
-//=================================================================================
-void GEOM_Gen_i::InsertInLabelMoreArguments(TopoDS_Shape main_topo,
-                                           GEOM::GEOM_Shape_ptr result,
-                                           const GEOM::GEOM_Gen::ListOfIOR& ListShapes,                                
-                                           Handle(TDocStd_Document) OCAFDoc)
-{
-  /* Put shape and name into geom/OCAF doc */
-  GEOMDS_Commands GC(OCAFDoc->Main());
-  /* Add attributs TopoDS and name_ior in a new label */
-  TDF_Label Lab = GC.AddShape(main_topo, result->Name() );
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab, entry);
-  
-  /* Create a new label */
-  TDF_Label NewLab = Lab.NewChild();
-  TCollection_ExtendedString Value("Arguments");
-  TDataStd_Name::Set(NewLab, Value);
-
-  for (unsigned int ind = 0; ind < ListShapes.length(); ind++) {
-    
-    TDF_Label NewLab1 = NewLab.NewChild();    
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[ind] );
-    
-    TDF_Label RefLab;
-    TDF_Tool::Label(OCAFDoc->GetData(), aShape->ShapeId(), RefLab);
-    TDF_Reference::Set(NewLab1, RefLab);
-  }
-  result->ShapeId(entry.ToCString());
-}
-
-
-
-//=================================================================================
-// function: NbLabels()
-// purpose : 
-//=================================================================================
-CORBA::Short GEOM_Gen_i::NbLabels()
-{
-  return TDF_Tool::NbLabels( myCurrentOCAFDoc->Main() );
-}
-
-
-
-//=================================================================================
-// function: GetCurrentStudy()
-// purpose : Finds or creates the geom/OCAF document corresponding to the index
-// 'StudyID'
-//=================================================================================
-void GEOM_Gen_i::GetCurrentStudy(CORBA::Long StudyID)
-{
-  /* If StudyID is known we link myCurrentOCAFDoc to it */
-  if (myStudyIDToDoc.IsBound(StudyID)) {
-    myCurrentOCAFDoc =  Handle(TDocStd_Document)::DownCast(myStudyIDToDoc(StudyID));
-  }
-  /* Create a new OCAFDoc and link it to 'StudyID' argument */
-  else { 
-    myOCAFApp->NewDocument("SALOME_GEOM",myCurrentOCAFDoc);
-    myStudyIDToDoc.Bind(StudyID,myCurrentOCAFDoc);
-  } 
-  myStudyID = StudyID;
-}
-
-
-//================================================================================
-// function : CreateObject() 
-// purpose  : private function to create a complete CORBA object and return it
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::CreateObject(TopoDS_Shape& tds)
-{
-//   if ( tds.ShapeType() == TopAbs_COMPOUND ) {
-//     TopoDS_Iterator itr(tds);
-//     TopoDS_Shape res;
-//     int i = 0;
-//     while (itr.More()) {
-//       i++;
-//       res = itr.Value();
-//       itr.Next();
-//     }
-    
-//     if ( i == 1 )
-//       tds = res;
-//   }
-
-  GEOM::shape_type st = GEOM::shape_type(tds.ShapeType()) ; /* casting */
-  
-  /* Create the CORBA servant holding the TopoDS_Shape */
-  GEOM::GEOM_Gen_ptr engine = POA_GEOM::GEOM_Gen::_this();
-  GEOM::GEOM_Shape::ListOfSubShapeID_var index = new GEOM::GEOM_Shape::ListOfSubShapeID;
-  index->length(0);  
-  GEOM_Shape_i * shape_servant = new GEOM_Shape_i(tds, _orb, engine, index, st, true);
-  GEOM::GEOM_Shape_var shape = GEOM::GEOM_Shape::_narrow(shape_servant->_this()); 
-  
-  /* Create and set the name (IOR of shape converted into a string) */
-  string name_ior = _orb->object_to_string(shape) ;
-  shape->Name( name_ior.c_str() );  
-  shape->NameType( "" );
-  return shape;
-}
-
-//=======================================================================
-//function : CreateSubObject
-//purpose  : 
-//=======================================================================
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::CreateSubObject(const TopoDS_Shape& SubShape,
-                                                const GEOM::GEOM_Shape_ptr MainShape,
-                                                const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-{
-  GEOM::shape_type st = GEOM::shape_type(SubShape.ShapeType()) ; /* casting */
-  
-  /* Create the CORBA servant holding the TopoDS_Shape */
-  GEOM::GEOM_Gen_ptr engine = POA_GEOM::GEOM_Gen::_this();
-  GEOM_Shape_i * shape_servant =
-    new GEOM_Shape_i(SubShape, _orb, engine, ListOfID, st, false);
-  GEOM::GEOM_Shape_var shape = GEOM::GEOM_Shape::_narrow(shape_servant->_this()); 
-  
-    /* Create and set the name (IOR of shape converted into a string) */
-  string name_ior = _orb->object_to_string(shape) ;
-  shape->Name( name_ior.c_str() );
-    /* create and set the mainname (IOR of shape converted into a string) */
-  const char *mainname_ior = _orb->object_to_string(MainShape) ;
-  shape->MainName(mainname_ior);
-    /* precaution : NameType will be set precisely in GUI */    
-  shape->NameType( "" );
-    /* add 'SubShape' its 'nameIOR' and a reference to the main shape thanks to method below  */
-  const char *entry =
-    InsertInLabelDependentShape(SubShape, shape->Name(), MainShape, myCurrentOCAFDoc) ;
-  shape->ShapeId( entry ) ;
-  return shape;
-}
-
-//=======================================================================
-// function : SuppressFacesGlue()
-// purpose  : Define a compound of shells after suppress of mapFaces in the 
-//          : shape S and return the number of shells of the compound.
-//=======================================================================
-int GEOM_Gen_i::SuppressFacesGlue( const TopoDS_Shape& S,
-                                  const TopTools_MapOfShape& mapFaces,
-                                  TopoDS_Shape& aCompoundOfShells )
-  throw (SALOME::SALOME_Exception)
-{  
-  BRepTools_Quilt Glue;
-  aCompoundOfShells.Nullify() ;
-  
-  for ( TopExp_Explorer exp( S, TopAbs_FACE); exp.More(); exp.Next() ) {
-    const TopoDS_Face& F = TopoDS::Face(exp.Current());
-    if ( !mapFaces.Contains(F) ) {
-      /* this face must not to be suppressed */
-      Glue.Add(F);
-    }
-  }
-  
-  /* Use specif method to calculate the compound of shells */
-  aCompoundOfShells = Glue.Shells();
-  
-  if( aCompoundOfShells.ShapeType() != TopAbs_COMPOUND ) {
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SuppressFacesGlue() : not a GEOM::COMPOUND", SALOME::BAD_PARAM);
-  }
-
-  /* explore Compound for verification and return the number of shells */
-  int numberOfShell = 0 ;
-  for ( TopExp_Explorer exp1( aCompoundOfShells, TopAbs_SHELL); exp1.More(); exp1.Next() )
-    numberOfShell++ ;
-
-  return numberOfShell ;
-}
-
-
-//=====================================================================================
-// function : GetIndexTopology()
-// purpose  : return the index of a sub shape in a shape (index starts at 1)
-//          : Return -1 if not found
-//=====================================================================================
-int GEOM_Gen_i::GetIndexTopology(const TopoDS_Shape& subshape, const TopoDS_Shape& mainShape) 
-{ 
-  if( mainShape.IsNull() || subshape.IsNull() ) 
-    return -1 ; 
-
-  int index = 1; 
-  if (subshape.ShapeType() == TopAbs_COMPOUND) 
-    { 
-      TopoDS_Iterator it; 
-      TopTools_ListOfShape CL; 
-      CL.Append( mainShape ); 
-      TopTools_ListIteratorOfListOfShape itC; 
-      for (itC.Initialize( CL ); itC.More(); itC.Next()) 
-       { 
-         for (it.Initialize( itC.Value() );  it.More(); it.Next()) 
-           { 
-             if ( it.Value().ShapeType() == TopAbs_COMPOUND) 
-               {
-                 if (it.Value().IsSame(subshape)) 
-                   return index; 
-                 else 
-                   index++; 
-                 CL.Append( it.Value() ); 
-               }
-           } 
-       } 
-    } 
-  else 
-    { 
-      TopExp_Explorer Exp ( mainShape,  subshape.ShapeType() ); 
-      TopTools_MapOfShape M; 
-      while ( Exp.More() ) 
-       { 
-         if ( M.Add(Exp.Current()) ) 
-           { 
-             if ( Exp.Current().IsSame(subshape) ) 
-               return index; 
-             index++; 
-           } 
-         Exp.Next(); 
-       } 
-    } 
-  return -1; 
-} 
-
-
-//================================================================================
-// function : IndexOfFacesOfSubShell()
-// purpose  : Return a list of indices corresponding to the faces of a 'subShell'
-//          : in the main shape 'S'
-//================================================================================
-GEOM::GEOM_Shape::ListOfSubShapeID* GEOM_Gen_i::IndexOfFacesOfSubShell( const TopoDS_Shape& S,
-                                                                 const TopoDS_Shape subShell )
-  throw (SALOME::SALOME_Exception)
-{
-
-  GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
-  ListOfID->length(0) ;
-  if( subShell.IsNull() || subShell.ShapeType() != TopAbs_SHELL ) {
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::IndexOfFacesOfSubShell() : null shape or not a GEOM::SHELL", SALOME::BAD_PARAM);
-  }
-
-  /* put faces of subShell in a Map of faces */
-  int j = 0 ;
-  TopTools_MapOfShape mapFaces ;
-  for( TopExp_Explorer Exp1( subShell, TopAbs_FACE );  Exp1.More(); Exp1.Next() ) {
-    mapFaces.Add(Exp1.Current() ) ;
-    j++ ;
-  }
-
-  if( j<1 )
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::IndexOfFacesOfSubShell() : no faces in sub shell", SALOME::BAD_PARAM);
-  
-  /* Find index of each face of subshell in the main topology and put its index in ListOfID */
-  int size = 0 ;
-  for ( TopExp_Explorer Exp2(S, TopAbs_FACE); Exp2.More();  Exp2.Next() ) {
-    
-    const TopoDS_Face& F = TopoDS::Face( Exp2.Current() ) ;
-
-    if( mapFaces.Contains(F) )  {
-      int n = GetIndexTopology( F, S ) ;
-      if( n<=0 ) {
-       THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::IndexOfFacesOfSubShell() : no index found", SALOME::BAD_PARAM);    
-      }
-      size++;
-      ListOfID->length(size) ;
-      ListOfID[size-1] = n ;
-    }
-  }
-
-  return ListOfID._retn() ;
-}
-
-
-
-//================================================================================
-// function : ListOfIDIntoMapOfShapes()
-// purpose  : Define a MapOfShapes from a main topology 'S' a 'subShapeType'
-//          : and a list of indices 'L'.
-//          : Return true if 'aMap' is not empty
-//================================================================================
-bool GEOM_Gen_i::ListOfIDIntoMapOfShapes( const TopoDS_Shape& S,
-                                         const GEOM::GEOM_Shape::ListOfSubShapeID& L,
-                                         const int subShapeType,
-                                         TopTools_MapOfShape& aMap )
-{
-  if( L.length() < 1 || S.IsNull() ) {
-    return false ;
-  }
-  
-  aMap.Clear() ; 
-  for( int k=0; k<L.length(); k++ ) {
-    /* indices start at 1 in list L */
-    int j = 1 ;
-    TopExp_Explorer exp ;
-    TopTools_MapOfShape M; 
-    for(  exp.Init( S, TopAbs_ShapeEnum(subShapeType) ); exp.More(); exp.Next() ) {
-      if ( M.Add(exp.Current()) ) 
-       { 
-         if( L[k] == j ) {
-           aMap.Add( exp.Current() ) ;
-         }
-         j++ ;
-       }
-    }
-  }
-  return true ;
-}
-
-
-
-//================================================================================
-// function : ListOfIDIntoSequenceOfShapes()
-// purpose  : Define 'aSequenceOfShapes' from a main topology 'S' a 'subShapeType'
-//          : and a list of indices 'L'.
-//          : Return true if 'aSequenceOfShapes' is not empty
-//================================================================================
-bool GEOM_Gen_i::ListOfIDIntoSequenceOfShapes( const TopoDS_Shape& S,
-                                              const GEOM::GEOM_Shape::ListOfSubShapeID& L,
-                                              const int subShapeType,
-                                              TopTools_SequenceOfShape& aSequenceOfShapes )
-{
-  if( L.length() < 1 || S.IsNull() ) {
-    return false ;
-  }
-  
-  aSequenceOfShapes.Clear() ; 
-  for( int k=0; k<L.length(); k++ ) {
-    /* indices start at 1 in list L */
-    int j = 1 ;
-    TopExp_Explorer exp ;
-    for(  exp.Init( S, TopAbs_ShapeEnum(subShapeType) ); exp.More(); exp.Next() ) {
-      if( L[k] == j ) {
-       aSequenceOfShapes.Append( exp.Current() ) ;
-      }
-      j++ ;
-    }
-  }
-  return true ;
-}
-
-
-
-//================================================================================
-// function : SuppressFaces()
-// purpose  : Suppress faces contained in ListOfID from 'shape'.
-//          : Return a list of Geom shapes each one is a main shape GEOM::FACE or GEOM::SHELL
-//================================================================================
-GEOM::GEOM_Gen::ListOfGeomShapes* GEOM_Gen_i::SuppressFaces( GEOM::GEOM_Shape_ptr shape,
-                                                               const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID ) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Gen::ListOfGeomShapes_var listOfGeomShapes = new GEOM::GEOM_Gen::ListOfGeomShapes;
-  listOfGeomShapes->length(0) ;
-
-  TopoDS_Shape mainShape = GetTopoShape(shape);
-  if( mainShape.IsNull() )
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SuppressFaces() : null argument shape", SALOME::BAD_PARAM);
-  
-  if( ListOfID.length() < 1 )
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SuppressFaces() : empty ListOfID", SALOME::BAD_PARAM);
-  
-  /* Define 'mapFaces' a map of faces to be suppressed in mainShape */
-  TopTools_MapOfShape mapFaces ;
-  if( !ListOfIDIntoMapOfShapes(mainShape, ListOfID, TopAbs_FACE, mapFaces ) ) {
-    return listOfGeomShapes._retn();
-  }
-    
-  /* Call algorithm to calculate a compound of shells resulting of face suppression */
-  int numberOfShells = 0 ;
-  TopoDS_Shape aCompoundOfShells ;
-  numberOfShells = SuppressFacesGlue(mainShape, mapFaces, aCompoundOfShells) ;
-  if(numberOfShells < 1) {
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::Suppressfaces() : no shells", SALOME::BAD_PARAM);
-  }
-  /* Create a shell for each shell contained in 'aCompoundOfShells' and             */ 
-  /* put it in the list of GeomShapes to be returned.                               */
-  /* But if the shell is composed of only a face we create a face and not a shell   */
-  int i = 0 ;
-  for( TopExp_Explorer exp(aCompoundOfShells, TopAbs_SHELL); exp.More(); exp.Next() ) {
-
-    const TopoDS_Shell& aShell = TopoDS::Shell( exp.Current() );    
-    if( aShell.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::Suppressfaces() : null shell", SALOME::BAD_PARAM);
-    }
-    
-    GEOM::GEOM_Shape::ListOfSubShapeID_var aList = new GEOM::GEOM_Shape::ListOfSubShapeID;
-    aList = IndexOfFacesOfSubShell(mainShape, aShell) ;
-
-     if( aList->length() < 1 ) {
-      THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SuppressFaces() : aList is empty", SALOME::BAD_PARAM);
-    }
-
-    TopoDS_Shape aShellOrFace ;
-    /* Only a face into the shell : we create a single face instead of a shell : 'aList' is unchanged  */
-    if( aList->length() == 1 ) {
-      TopExp_Explorer exp ;
-      exp.Init( aShell, TopAbs_FACE ) ;
-      exp.More() ;
-      aShellOrFace = exp.Current() ;
-    }
-    else {
-      aShellOrFace = aShell ;
-    }
-    
-    /* Create CORBA object */
-    GEOM::GEOM_Shape_var result = CreateObject(aShellOrFace) ;
-    if( CORBA::is_nil(result) ) {
-      THROW_SALOME_CORBA_EXCEPTION("Suppress Faces aborted : null result", SALOME::BAD_PARAM);
-    }
-
-    InsertInLabelOneArgument(mainShape, shape, aShellOrFace, result, myCurrentOCAFDoc) ;
-    i++ ;
-    listOfGeomShapes->length(i) ;
-    listOfGeomShapes[i-1] = result ;
-  }
-
-  return listOfGeomShapes._retn() ;
-}
-
-
-
-//================================================================================
-// function : IsShapeInSequence()
-// purpose  : return true is aShape is in SS. The test method is 'IsSame()'
-//================================================================================
-bool GEOM_Gen_i::IsShapeInSequence(const TopTools_SequenceOfShape& SS, const TopoDS_Shape& aShape)
-{
-  if( aShape.IsNull() || SS.IsEmpty() ) 
-    return false ;  
-  for( int i=1; i<=SS.Length(); i++) {
-    if( SS.Value(i).IsSame(aShape) )
-      return true ;
-  }
-  return false ;
-}
-
-
-//================================================================================
-// function : FreeEdgesFromMapOfFace()
-// purpose  : Define MS a map of all edges of faces of 'MSfaces'
-//          : All multiple edges are removed !
-//================================================================================
-void GEOM_Gen_i::FreeEdgesFromMapOfFace( const TopTools_MapOfShape& MSfaces,
-                                        TopTools_MapOfShape& MS )
-{
-  MS.Clear() ;
-  TopTools_MapOfShape Multiple ;
-  TopTools_MapIteratorOfMapOfShape it ;
-  for( it.Initialize(MSfaces); it.More(); it.Next() ) {
-    TopoDS_Shape aFace = it.Key() ;
-    TopExp_Explorer exp ;
-    for( exp.Init( aFace, TopAbs_EDGE); exp.More(); exp.Next() ) {
-      if( !Multiple.Contains( exp.Current() ) && !MS.Add( exp.Current() ) ) {
-       MS.Remove( exp.Current() ) ;
-       Multiple.Add( exp.Current() ) ;
-      }
-    }
-  }
-  return ;
-}
-
-
-//================================================================================
-// function : MapRemoveSequence()
-// purpose  : In term of shapes ST = MS - SSRemove
-//          :
-//================================================================================
-void GEOM_Gen_i::MapRemoveSequence( const TopTools_MapOfShape& MS,
-                                   const TopTools_SequenceOfShape& SSRemove,
-                                   TopTools_SequenceOfShape& ST ) 
-{
-  ST.Clear() ;
-  TopTools_MapIteratorOfMapOfShape it ;
-  for( it.Initialize(MS); it.More(); it.Next() ) {
-    TopoDS_Shape aShape = it.Key() ;
-    if( !IsShapeInSequence( SSRemove, aShape ) )
-      ST.Append( aShape ) ;
-  }
-  return ;
-}
-
-
-
-//================================================================================
-// function : SuppressHoleSubRoutine()
-// purpose  : Define recursively 'MSfacesSuppress' a list of faces to suppress in a hole
-//================================================================================
-void GEOM_Gen_i::SuppressHoleSubRoutine( const TopoDS_Shape& mainShape,
-                                        const TopoDS_Face& aFace,
-                                        const TopTools_SequenceOfShape& SSedgesOfWire, 
-                                        const TopTools_IndexedDataMapOfShapeListOfShape& aMapEdgesFaces,
-                                        const TopTools_MapOfShape& MSfaces,                                     
-                                        TopTools_MapOfShape& MSfacesSuppress,
-                                        const Standard_Boolean withEndFace,
-                                        const TopoDS_Face& endFace,
-                                        TopTools_MapOfShape& MSwireEndEdges )
-  throw (SALOME::SALOME_Exception)
-{  
-  TopTools_MapOfShape MS ;
-  TopTools_SequenceOfShape SU ;
-  FreeEdgesFromMapOfFace(MSfaces, MS) ;        /* MS = free edges of MSfaces */
-  MapRemoveSequence(MS, SSedgesOfWire, SU) ;   /* SU = MS - SSedgesOfWire    */
-
-  if( SU.IsEmpty() ) {
-    return ;
-  }
-
-  /* Here SU contains new edges to find new faces to suppress                                          */
-  /* Define the list of faces of SU edges that aren't in faces of MSfacesSuppress in order to add into */
-  /* For each edge we have a map of all its faces : it's in 'aMapEdgesFaces'                           */
-  TopTools_MapOfShape MSfacesTmp ;
-  for( int v=1; v<=SU.Length(); v++ ) {
-    TopoDS_Shape E = SU.Value(v) ;
-    TopoDS_Shape F ;
-    TopTools_ListOfShape LF ;
-    int ind = aMapEdgesFaces.FindIndex(E) ;
-    
-    /* LF is the list of faces for an edge of SU : may be empty no matter */
-    LF = aMapEdgesFaces.FindFromIndex(ind) ;
-    
-    TopTools_ListIteratorOfListOfShape it ;
-    for( it.Initialize(LF); it.More(); it.Next() ) {
-      F = it.Value() ;
-      if( withEndFace == false ) {
-       if( F.IsSame(aFace) )
-         THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHoleSubRoutine() : hole traversing or ?", SALOME::BAD_PARAM);
-       if( !MSfacesSuppress.Contains(F) ) {
-         MSfacesSuppress.Add(F) ;
-         MSfacesTmp.Add(F) ; // Dont remove the 'if' !
-       }
-      }
-      else { /* withEndFace == true */
-       if( F.IsSame(aFace) && !F.IsSame(endFace) )
-         THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHoleSubRoutine() : hole traversing incoherent ?", SALOME::BAD_PARAM);
-       
-       if( F.IsSame(endFace) ) {
-         /* We have reached endFace if selection was correct so we add  */
-         /* edge in a map to find later the corresponding endWire (hole */
-         MSwireEndEdges.Add(E) ;
-       }
-       else {
-         if( !MSfacesSuppress.Contains(F) ) {
-           MSfacesSuppress.Add(F) ;
-           MSfacesTmp.Add(F) ;
-         }
-       }
-      }
-    }
-  }
-  /* Call recursively this routine */
-  SuppressHoleSubRoutine( mainShape, aFace, SSedgesOfWire, aMapEdgesFaces, MSfacesTmp, MSfacesSuppress, withEndFace, endFace, MSwireEndEdges ) ; 
-}
-
-
-
-//================================================================================
-// function : GetShapeFromIndex()
-// purpose  : Find 'tds' a sub shape of 'aShape' according to 'aList' that contains
-//          : a unique index !
-//          : Warning : index must be setted with the same exploration logic !
-//          : So 'index' is calculated with no shape doublons !
-//================================================================================
-bool GEOM_Gen_i::GetShapeFromIndex( const TopoDS_Shape& aShape,
-                                   const TopAbs_ShapeEnum aType, 
-                                   const int index,
-                                   TopoDS_Shape& tds )
-
-{
-  if (aShape.IsNull() || index < 1) 
-    return false ;
-  /* Indices start at 1 */
-  int j = 1 ;
-  bool found = false ;
-  TopExp_Explorer exp ;
-  TopTools_MapOfShape M;
-  for( exp.Init( aShape, aType ); exp.More(); exp.Next() ) {
-    if( M.Add(exp.Current()) ) { /* if not a doublon : we compare */
-      if( index == j ) {
-       tds =  exp.Current() ;
-       return true ;
-      }
-      j++ ;
-    }
-  }
-  return false ;
-}
-
-
-
-//================================================================================
-// function : SuppressHolesInFaceOrShell()  Main method.
-// purpose  : Suppress holes identified by wires in a single face or shell
-//
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::SuppressHolesInFaceOrShell( GEOM::GEOM_Shape_ptr shapeFaceShell,
-                                                      const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdWires )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-
-  if( ListIdWires.length() < 1 )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace : no holes selected", SALOME::BAD_PARAM);
-  
-  const TopoDS_Shape tds = GetTopoShape(shapeFaceShell) ;
-  if( tds.IsNull() || !BRepAlgoAPI::IsValid(tds) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace() : non valid main argument", SALOME::BAD_PARAM);
-  
-  /* Create a map of wires/holes to suppress */
-  TopTools_MapOfShape MapHoles ;
-  for ( int i = 0; i < ListIdWires.length(); i++ ) {
-    TopoDS_Shape W ;    
-    if( !GetShapeFromIndex( tds, TopAbs_WIRE, ListIdWires[i], W ) )
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace() : bad index ?", SALOME::BAD_PARAM);
-    MapHoles.Add( W ) ;
-  }
-
-  /* Test if argument is a face or shell */
-  bool isFace ;
-  if( tds.ShapeType() == TopAbs_FACE )
-    isFace = true ;
-  else if ( tds.ShapeType() == TopAbs_SHELL )
-    isFace = false ;
-  else
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace() : not a face or a shell", SALOME::BAD_PARAM); 
-
-  /* Define two maps : all faces and faces to that will be modified */
-  TopTools_MapOfShape MapFacesToModify ;
-  TopTools_MapOfShape MapFacesAll ;
-  TopExp_Explorer expF ;
-  for( expF.Init( tds, TopAbs_FACE);  expF.More(); expF.Next() ) {
-    TopoDS_Face F = TopoDS::Face( expF.Current() ) ;
-    MapFacesAll.Add(F) ;
-    TopExp_Explorer expW ;
-    for( expW.Init( F, TopAbs_WIRE);  expW.More(); expW.Next() ) {
-      TopoDS_Wire W = TopoDS::Wire( expW.Current() ) ;
-      if( MapHoles.Contains(W) ) {
-       MapFacesToModify.Add(F) ;
-      }
-    }
-  }
-
-  /* Define faces not modified */
-  TopTools_MapOfShape MapFacesNotModified ;
-  TopTools_MapIteratorOfMapOfShape it ;
-  for( it.Initialize(MapFacesAll); it.More(); it.Next() ) {
-    TopoDS_Face FF = TopoDS::Face( it.Key() ) ;
-    if( !MapFacesToModify.Contains(FF) )
-      MapFacesNotModified.Add(FF) ;
-  }
-
-  if( MapFacesToModify.IsEmpty() )
-    THROW_SALOME_CORBA_EXCEPTION("Error : empty map of faces", SALOME::BAD_PARAM); 
-  
-  if( isFace && MapFacesToModify.Extent() != 1 )
-    THROW_SALOME_CORBA_EXCEPTION("Incoherent", SALOME::BAD_PARAM);
-  
-  /* Main argument is a face */
-  if( isFace && MapFacesToModify.Extent() == 1 ) {
-    TopoDS_Face resultFace ;
-    if( !RebuildFaceRemovingHoles( TopoDS::Face(tds), MapHoles, resultFace ) )
-      THROW_SALOME_CORBA_EXCEPTION(" Problem : !RebuildFaceRemovingHoles()", SALOME::BAD_PARAM);
-    /* Creation of CORBA object : face topology */
-    result = CreateObject(resultFace);
-    InsertInLabelOneArgument(tds, shapeFaceShell, resultFace, result, myCurrentOCAFDoc) ;
-    return result ;
-  }
-
-  /* Main argument is a shell : rebuild faces modified */
-  TopTools_MapOfShape MapFacesModified ;
-  for( it.Initialize(MapFacesToModify); it.More(); it.Next() ) {
-    TopoDS_Face FF = TopoDS::Face( it.Key() ) ;
-    TopoDS_Face resF ;
-    if( !RebuildFaceRemovingHoles( FF, MapHoles, resF ) )
-      THROW_SALOME_CORBA_EXCEPTION(" Problem shell : !RebuildFaceRemovingHoles()", SALOME::BAD_PARAM);
-    MapFacesModified.Add(resF) ;
-  }
-
-  /* Rebuild the shell with faces modified and non modified */
-  TopoDS_Shell resultShell ;
-  BRepPrim_Builder B;
-  B.MakeShell(resultShell) ;
-  TopTools_MapIteratorOfMapOfShape it1 ;
-  for( it1.Initialize(MapFacesModified); it1.More(); it1.Next() )
-    B.AddShellFace( resultShell,TopoDS::Face( it1.Key() ) ) ;
-  for( it1.Initialize(MapFacesNotModified); it1.More(); it1.Next() )
-    B.AddShellFace( resultShell,TopoDS::Face( it1.Key() ) ) ;
-  
-  B.CompleteShell(resultShell) ;
-  
-  if( resultShell.IsNull() )
-    THROW_SALOME_CORBA_EXCEPTION("Null or not valid result Shell", SALOME::BAD_PARAM) ;
-  
-  /* Creation of CORBA object : shell topology */
-  result = CreateObject(resultShell);
-  InsertInLabelOneArgument(tds, shapeFaceShell, resultShell, result, myCurrentOCAFDoc) ;
-  return result ;
-}
-
-
-//================================================================================
-// function : RebuildFaceRemovingHoles()
-// purpose  : Rebuild a face removing holes that are in 'mapHoles'.
-//          : NB : 'mapHoles' may content more holes than necessary
-//================================================================================
-bool GEOM_Gen_i::RebuildFaceRemovingHoles( const TopoDS_Face& aFace,
-                                          const TopTools_MapOfShape& mapHoles,
-                                          TopoDS_Shape& resultFace )
-{
-  /* Get the outer wire of the face 'aFace' */
-  TopoDS_Wire outW = BRepTools::OuterWire( aFace ) ;
-  if( outW.IsNull() || !BRepAlgoAPI::IsValid(outW) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace : bad outer wire of 'aFace'", SALOME::BAD_PARAM);
-  
-  /* Rebuild a face avoiding holes in the map 'mapHoles' */  
-  Handle(Geom_Surface) Surface = BRep_Tool::Surface(aFace) ;
-  TopoDS_Face F2 = BRepBuilderAPI_MakeFace( Surface, outW, true ) ;
-  
-  if( F2.Orientation() != aFace.Orientation() )
-    F2.Orientation( aFace.Orientation() ) ;
-  
-  BRepBuilderAPI_MakeFace aBuilder( F2 ) ;
-  bool foundAndKeepHoles = false ;
-  TopExp_Explorer exp ;
-  
-  for( exp.Init( aFace, TopAbs_WIRE);  exp.More(); exp.Next() ) {
-    TopoDS_Wire hole = TopoDS::Wire( exp.Current() ) ;
-    if( !mapHoles.Contains(hole) && !exp.Current().IsEqual(outW) ) {
-      aBuilder.Add( hole) ;      
-      if( !aBuilder.IsDone() )
-       THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHolesInFace : builder problem !", SALOME::BAD_PARAM);      
-      
-      resultFace = TopoDS::Face(aBuilder) ;
-      foundAndKeepHoles = true ;
-    }
-  }
-  
-  if( !foundAndKeepHoles )
-    resultFace = F2 ;
-  else
-    resultFace = TopoDS::Face(aBuilder) ;
-  
-  return true ;
-}
-
-
-
-
-//================================================================================
-// function : SuppressHole() Main method.
-// purpose  : Suppress an hole identified by a wire in a face of shape
-//          : ListIdFace contains a unique index of face in shape
-//          : ListIdWire contains a unique index of wire in face !!!
-//          : ListIdEndFace is used only when hole traverse.
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::SuppressHole( GEOM::GEOM_Shape_ptr shape,
-                                        const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdFace,
-                                        const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdWire,
-                                        const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdEndFace )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Face aFace ;
-  TopoDS_Wire aWire ;  
-  TopoDS_Face endFace ;
-  bool withEndFace ;
-  TopoDS_Shape tmp ;
-  
-  /* Retrieve 'aShape' the initial main shape selection */
-  const TopoDS_Shape aShape = GetTopoShape(shape);
-  
-  if( !BRepAlgoAPI::IsValid(aShape) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : non valid main shape", SALOME::BAD_PARAM);
-  
-  if( ListIdFace.length() != 1 || ListIdWire.length() != 1 )
-    THROW_SALOME_CORBA_EXCEPTION("bad list", SALOME::BAD_PARAM);  
-  
-  /* Retrieve 'aFace' selection */
-  if( !GetShapeFromIndex( aShape, TopAbs_FACE, ListIdFace[0], tmp ) ) {
-    THROW_SALOME_CORBA_EXCEPTION("face not found", SALOME::BAD_PARAM);
-  }
-  else {
-    aFace = TopoDS::Face(tmp) ;
-  }
-  if( !BRepAlgoAPI::IsValid(aFace) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : face shape not valid", SALOME::BAD_PARAM);  
-  
-   /* Retrieve 'aWire' selection : Warning : index of wire refers to the face ! */
-  TopoDS_Shape aTmp ;
-  if( !GetShapeFromIndex( aFace, TopAbs_WIRE, ListIdWire[0], aTmp ) ) {
-    THROW_SALOME_CORBA_EXCEPTION("wire not found", SALOME::BAD_PARAM);
-  }
-  else {
-    aWire = TopoDS::Wire(aTmp) ;
-  }
-  if( !BRepAlgoAPI::IsValid(aWire) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : bad wire" , SALOME::BAD_PARAM);
-
-  /* Get the outer wire of aFace */
-  TopoDS_Wire outerW = BRepTools::OuterWire( aFace ) ;
-  if( outerW.IsNull() || !BRepAlgoAPI::IsValid(outerW) ) 
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : bad outer wire", SALOME::BAD_PARAM);
-  
-  /* Test bad user selection aWire */
-  if( aWire.IsSame(outerW) )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : outerW = aWire", SALOME::BAD_PARAM);
-   
-  /* Test if 'endFace' is used  as argument and seems to be a valid one          */
-  /* NB : 'endFace' is optional and used when hole to suppress traverse 'aShape' */
-  if( ListIdEndFace.length() == 0 ) {
-    withEndFace = false ;
-  }
-  else {
-    TopoDS_Shape aTemp ;
-    if( !GetShapeFromIndex( aShape, TopAbs_FACE, ListIdEndFace[0], aTemp ) || tmp.IsNull() || !BRepAlgoAPI::IsValid(aTemp) )
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : non valid endFace", SALOME::BAD_PARAM);
-
-    /* Test if 'endFace' as at least one hole */    
-    endFace = TopoDS::Face(aTemp) ;  
-
-    TopExp_Explorer fExp ;
-    int nbWires = 0 ;
-    for( fExp.Init(endFace, TopAbs_WIRE);  fExp.More(); fExp.Next() ) {
-      TopoDS_Wire W = TopoDS::Wire( fExp.Current() ) ;
-      if( !W.IsNull() && BRepAlgoAPI::IsValid(W) )
-       nbWires++ ;
-    }
-    if(nbWires > 1)
-      withEndFace = true ; /* at least 2 wires : outer wire plus an hole or more */
-    else
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SuppressHole() : end face selection ?", SALOME::BAD_PARAM);
-  }
-  
-  /* Find edges of aWire and test if degenerated */
-  TopTools_SequenceOfShape SSedgesOfWire ;
-  TopExp_Explorer wireExp ;  
-  for( wireExp.Init(aWire, TopAbs_EDGE);  wireExp.More(); wireExp.Next() ) {
-    TopoDS_Edge E = TopoDS::Edge( wireExp.Current() ) ;
-    if( E.IsNull() || BRep_Tool::Degenerated(E) ) {
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : found bad edge", SALOME::BAD_PARAM);
-    }
-    else {
-      SSedgesOfWire.Append( wireExp.Current() ) ;
-    }
-  }
-  if( SSedgesOfWire.Length() < 1 )
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : no edge(s) for aWire", SALOME::BAD_PARAM); 
-  
-  /* Retrieve face ancestors of all edges of 'aWire' but avoiding 'aFace' */ 
-  
-  TopTools_IndexedDataMapOfShapeListOfShape aMapEdgesFaces;
-  TopTools_MapIteratorOfMapOfShape anIt ;
-  TopTools_MapOfShape MFSuppress ;
-  TopTools_MapOfShape MFSuppressTmp ;
-  bool wireOnFace = false ;
-  TopExp::MapShapesAndAncestors(aShape, TopAbs_EDGE, TopAbs_FACE, aMapEdgesFaces) ;  
-  for( int h=1; h<=SSedgesOfWire.Length(); h++ ) {
-    
-    TopoDS_Shape anEdgeOfWire = SSedgesOfWire.Value(h) ;
-    int ind = aMapEdgesFaces.FindIndex(anEdgeOfWire) ;
-    if(ind < 1)
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : index of edge", SALOME::BAD_PARAM);
-    
-    TopTools_ListOfShape LF;
-    LF = aMapEdgesFaces.FindFromIndex(ind) ; /* Contains all faces ancestors of an edge of wire */
-    if( LF.IsEmpty() )
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : no face for an edge", SALOME::BAD_PARAM);
-    
-    /* Filter faces avoiding 'aFace' */
-    TopTools_ListIteratorOfListOfShape it ;
-    for( it.Initialize(LF); it.More(); it.Next() ) {
-      TopoDS_Face F = TopoDS::Face( it.Value() ) ;
-      if( !F.IsSame(aFace) ) { 
-       MFSuppressTmp.Add(F) ;
-       MFSuppress.Add(F) ;
-      }
-      else {
-       wireOnFace = true ;
-      }
-    }
-  }
-  
-  if( !wireOnFace ) {
-    THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : wire not on selected face", SALOME::BAD_PARAM);  
-  }
-
-  /* Call routine to define faces to suppress and and optional endWire on endFace */
-  TopTools_MapOfShape MSwireEndEdges ; /* will contain edges of final wire (hole) */
-  SuppressHoleSubRoutine( aShape, aFace, SSedgesOfWire, aMapEdgesFaces, MFSuppressTmp, MFSuppress, withEndFace, endFace, MSwireEndEdges ) ;
-
-  TopoDS_Wire endWire ;
-  if( withEndFace ) {
-    
-    if( MSwireEndEdges.Extent() < 1 )
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : MSwireEndEdges.Extent() < 1", SALOME::BAD_PARAM);
-
-    if( !FindCompareWireHoleOnFace( endFace, MSwireEndEdges, endWire ) )           
-      THROW_SALOME_CORBA_EXCEPTION("in GEOM_Gen_i::SupressHole() : no endWire found", SALOME::BAD_PARAM);    
-   }
-   
-  /* Build 'resTds' : a shape containing a compound of faces */
-  TopoDS_Shape resTds;
-  if( !withEndFace && !BuildShapeHoleNotTraversing( aShape, aFace, aWire, MFSuppress, resTds ) )
-    THROW_SALOME_CORBA_EXCEPTION("Rebuild result shape has aborted", SALOME::BAD_PARAM);
-  
-  if( withEndFace && !BuildShapeHoleTraversing( aShape, aFace, aWire, MFSuppress, endFace, endWire, resTds ) )
-    THROW_SALOME_CORBA_EXCEPTION("Rebuild result shape has aborted (end hole)", SALOME::BAD_PARAM); 
-  
-  /* Reconstruction of final shape with 'resTds' : a compound of faces after hole suppressing */
-  /* Actual limitation is : 'aShape' must not contain more than a solid or a shell !          */
-  TopoDS_Shape finalShape ;
-  TopExp_Explorer exp ;
-  unsigned int nbSolid = 0 ;
-  TopoDS_Solid aSolid ;
-  for( exp.Init(aShape, TopAbs_SOLID); exp.More(); exp.Next() ) {
-    aSolid = TopoDS::Solid( exp.Current() ) ;
-    nbSolid++ ;
-    if( nbSolid > 1 )
-      THROW_SALOME_CORBA_EXCEPTION("Limitation : main shape contents more than one solid", SALOME::BAD_PARAM);  
-  }
-   
-  unsigned int nbShell = 0 ;
-  TopoDS_Shell aShell ;
-  for( exp.Init(aShape, TopAbs_SHELL); exp.More(); exp.Next() ) {
-    aShell = TopoDS::Shell( exp.Current() ) ;
-    nbShell++ ;
-    if( nbShell > 1 )
-      THROW_SALOME_CORBA_EXCEPTION("Limitation : main shape contents more than one shell", SALOME::BAD_PARAM);
-  }
-  
-  /* No shells and no solids : can send a compound even for a single face, see GUI ! */
-  if( nbShell == 0 ) {
-    finalShape = resTds ;
-  }
-  
-  /* a shell */
-  TopoDS_Shell shellResult ;
-  if( nbShell == 1 ) {
-    if ( !BuildShellWithFaceCompound( TopoDS::Compound(resTds), shellResult ) ) 
-      THROW_SALOME_CORBA_EXCEPTION("Error after BuildShellWithFaceCompound()", SALOME::BAD_PARAM);
-    finalShape = shellResult ;
-  }
-  
-  /* a solid with a shell */
-  if( nbSolid == 1 && nbShell == 1) {
-    BRepBuilderAPI_MakeSolid B;
-    B.Add(shellResult) ;
-    if( !B.IsDone() )
-      THROW_SALOME_CORBA_EXCEPTION("Error : !B.IsDone()", SALOME::BAD_PARAM);  
-    finalShape = B.Solid() ;
-  }
-
-  result = CreateObject(finalShape);
-  InsertInLabelOneArgument(aShape, shape, finalShape, result, myCurrentOCAFDoc) ;
-  return result ;
-}
-
-
-
-//================================================================================
-// function : BuildShellWithFaceCompound()
-// purpose  : Build a shell with a compound of faces.
-//================================================================================
-bool GEOM_Gen_i::BuildShellWithFaceCompound( const TopoDS_Compound Comp,
-                                            TopoDS_Shell& resultShell )
-{
-  resultShell.Nullify() ;
-  BRepPrim_Builder B ;
-  B.MakeShell(resultShell) ;  
-  TopExp_Explorer ex ;
-  int i = 0 ;
-  for( ex.Init( Comp, TopAbs_FACE); ex.More(); ex.Next() ) {
-    TopoDS_Face F = TopoDS::Face( ex.Current() ) ;
-    if( !BRepAlgoAPI::IsValid(F) ) {
-      return false ;
-    }
-    B.AddShellFace( resultShell, F ) ;
-  }
-  B.CompleteShell(resultShell) ;
-  if( resultShell.IsNull() ) {
-    return false ;
-  }  
-  return true ;
-}
-
-
-//================================================================================
-// function : FindCompareWireHoleOnFace()
-// purpose  : Try to find a wire on 'aFace' which edges are same than those
-//          : into 'MSwireEdges' map. 'aFoundWire' is defined and 'true' returned.
-//          : 'MSwireEdges' represents generally an hole an 'aFace'.
-//          : The outer wire of 'aFace' is avoided !
-//================================================================================
-bool GEOM_Gen_i::FindCompareWireHoleOnFace( const TopoDS_Face& F,
-                                           const TopTools_MapOfShape& MSwireEdges,
-                                           TopoDS_Wire& aFoundWire )
-{
-  aFoundWire.Nullify() ;
-  
-  if( F.IsNull() )
-    return false ;
-  
-  /* Get the outer wire of aFace */
-  TopoDS_Wire outerW = BRepTools::OuterWire(F) ;
-  if( outerW.IsNull() || !BRepAlgoAPI::IsValid(outerW) ) {
-    return false ;
-  }
-  
-  int nbEdges = MSwireEdges.Extent() ;
-  if( nbEdges < 1 ) {
-    return false ;
-  }
-  
-  TopExp_Explorer exp1 ;
-  TopExp_Explorer exp2 ;
-  for ( exp1.Init(F, TopAbs_WIRE) ; exp1.More(); exp1.Next() ) {
-    TopoDS_Wire W = TopoDS::Wire( exp1.Current() ) ;
-    int i = 0 ;
-    if( !W.IsSame(outerW) ) {
-      for ( exp2.Init( W, TopAbs_EDGE) ; exp2.More(); exp2.Next() ) {
-       TopoDS_Edge E = TopoDS::Edge( exp2.Current() ) ;
-       if( MSwireEdges.Contains(E) ) {
-         i++ ;
-         if( i == nbEdges ) {
-           aFoundWire = W ;
-           return true ;
-         }
-       }
-      }
-    }
-  }
-  return false ;
-}
-
-
-//================================================================================
-// function : BuildShapeHoleNotTraversing()
-// purpose  : Define 'resultTds' a reconstruction of 'aShape' after modification
-//          : on 'aFace' where 'aWire is removed' and suppression of faces 'MFSuppress'
-//          : ( Used as a sub routine of SuppressHole() )
-//================================================================================
-bool GEOM_Gen_i::BuildShapeHoleNotTraversing( const TopoDS_Shape& aShape,
-                                             const TopoDS_Face& aFace,
-                                             const TopoDS_Wire& aWire,
-                                             const TopTools_MapOfShape& MFSuppress,
-                                             TopoDS_Shape& resultTds )
-  throw (SALOME::SALOME_Exception)
-{
-  BRep_Builder B;
-  TopExp_Explorer exp ;
-  TopoDS_Face newFace ;
-  
-  resultTds.Nullify() ;
-  TopoDS_Compound Comp ;
-  B.MakeCompound (Comp);
-  
-  try  {
-    
-    /* Explore all faces of 'aShape' to rebuild a compound */
-    for ( exp.Init(aShape, TopAbs_FACE) ; exp.More(); exp.Next() ) {
-      
-      TopoDS_Face F1 = TopoDS::Face( exp.Current() );
-      /* Rebuild face(s) not suppressed */
-      if( !MFSuppress.Contains(F1) ) {
-       
-       if( F1.IsEqual( aFace ) ) {
-         TopTools_MapOfShape MSwire ;
-         MSwire.Add(aWire) ;
-         if( !RebuildFaceRemovingHoles(aFace, MSwire, newFace) ) {
-           return false ;
-         }
-         B.Add( Comp, newFace ) ;
-       }
-       else {
-         /* For any other face not suppressed */
-         B.Add( Comp, F1 ) ;
-       }
-      }
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("in BuildShapeHoleNotTraversing() : Exception catched", SALOME::BAD_PARAM);
-  }  
-  resultTds = Comp ;
-  return true ;
-}
-
-
-
-//================================================================================
-// function : BuildShapeHoleTraversing()
-// purpose  : Define 'resultTds' a reconstruction of 'aShape' after modifications.
-//          : On 'aFace'    'aWire    is removed'
-//          : On 'endFace'  'endWire' is removed.
-//          : Faces of 'MFSuppress' are removed.
-//          : ( Used as a sub routine of SuppressHole() )
-//================================================================================
-bool GEOM_Gen_i::BuildShapeHoleTraversing( const TopoDS_Shape& aShape,
-                                          const TopoDS_Face& aFace,
-                                          const TopoDS_Wire& aWire,
-                                          const TopTools_MapOfShape& MFSuppress,
-                                          const TopoDS_Face& endFace,
-                                          const TopoDS_Wire& endWire,
-                                          TopoDS_Shape& resultTds )
-  throw (SALOME::SALOME_Exception)
-{
-  BRep_Builder B;
-  TopExp_Explorer exp ;
-  TopoDS_Face newFace ;
-
-  resultTds.Nullify() ;
-  TopoDS_Compound Comp ;
-  B.MakeCompound (Comp);
-  
-  /* Necessary to use general method */
-  TopTools_MapOfShape MSwire1  ;
-  MSwire1.Add(aWire) ; 
-  TopTools_MapOfShape MSwire2 ;
-  MSwire2.Add(endWire) ;
-
-  try  {    
-    
-    /* Explore all faces of 'aShape' to rebuild a compound */
-    for ( exp.Init(aShape, TopAbs_FACE) ; exp.More(); exp.Next() ) {
-      TopoDS_Face F1 = TopoDS::Face( exp.Current() );      
-      
-      /* Rebuild face(s) not suppressed */
-      if( !MFSuppress.Contains(F1) ) {
-       
-       /* Rebuild 'aFace' */
-       if( F1.IsEqual( aFace ) && !F1.IsEqual( endFace ) ) {
-         if( !RebuildFaceRemovingHoles(aFace, MSwire1, newFace) ) {
-           return false ;
-         }
-         B.Add(Comp, newFace) ;
-       }       
-       
-       /* Rebuild 'endFace' */
-       if( !F1.IsEqual( aFace ) && F1.IsEqual( endFace ) ) {
-         if( !RebuildFaceRemovingHoles(endFace, MSwire2, newFace) ) {
-           return false ;
-         }
-         B.Add(Comp, newFace) ;
-       }
-       
-       /* Hole in the same face : aFace = endFace */
-       if( F1.IsEqual( aFace ) && F1.IsEqual( endFace ) ) {
-         TopoDS_Face FF ;
-         if( !RebuildFaceRemovingHoles(aFace, MSwire1, newFace) || !RebuildFaceRemovingHoles(newFace, MSwire2, FF) ) {
-           return false ;
-         }
-         B.Add( Comp, FF ) ;
-       }
-       
-       /* For any other face not suppressed */
-       if( !F1.IsEqual(aFace) && !F1.IsEqual( endFace ) ) {      
-         B.Add( Comp, F1 ) ;
-       }
-       
-      }
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("in BuildShapeHoleTraversing() : Exception catched", SALOME::BAD_PARAM);
-  }  
-  resultTds = Comp ;
-  return true ;
-}
-
-//=======================================================================
-//function : SortShapes
-//purpose  : 
-//=======================================================================
-
-static void SortShapes(TopTools_ListOfShape& SL)
-{
-  Standard_Integer MaxShapes = SL.Extent();
-  TopTools_Array1OfShape  aShapes (1,MaxShapes);
-  TColStd_Array1OfInteger OrderInd(1,MaxShapes);
-  TColStd_Array1OfReal    MidXYZ  (1,MaxShapes); //X,Y,Z;
-  TColStd_Array1OfReal    Length  (1,MaxShapes); //X,Y,Z;
-  
-  // Computing of CentreOfMass
-  Standard_Integer Index;
-  GProp_GProps GPr;
-  gp_Pnt GPoint;
-  TopTools_ListIteratorOfListOfShape it(SL);
-  for (Index=1;  it.More();  Index++)
-  {
-    TopoDS_Shape S = it.Value();
-    SL.Remove( it ); // == it.Next()
-    aShapes(Index) = S;
-    OrderInd.SetValue (Index, Index);
-    if (S.ShapeType() == TopAbs_VERTEX)
-    {
-      GPoint = BRep_Tool::Pnt( TopoDS::Vertex( S ));
-      Length.SetValue( Index, (Standard_Real) S.Orientation());
-    }
-    else
-    {
-      BRepGProp::LinearProperties (S, GPr);
-      GPoint = GPr.CentreOfMass();
-      Length.SetValue( Index, GPr.Mass() );
-    }
-    MidXYZ.SetValue(Index,
-                   GPoint.X()*999 + GPoint.Y()*99 + GPoint.Z()*0.9);
-  }
-  // Sorting
-  Standard_Integer aTemp;
-  Standard_Boolean exchange, Sort = Standard_True;
-  while (Sort)
-  {
-    Sort = Standard_False;
-    for (Index=1; Index < MaxShapes; Index++)
-    {
-      if (MidXYZ(OrderInd(Index)) > MidXYZ(OrderInd(Index+1)))
-       exchange = Standard_True;
-      else if (MidXYZ(OrderInd(Index)) == MidXYZ(OrderInd(Index+1)) &&
-              Length(OrderInd(Index)) >  Length(OrderInd(Index+1)) )
-       exchange = Standard_True;
-      else
-       exchange = Standard_False;
-      if (exchange)
-      {
-        aTemp = OrderInd(Index);
-        OrderInd(Index) = OrderInd(Index+1);
-        OrderInd(Index+1) = aTemp;
-        Sort = Standard_True;
-      }
-    }
-  }
-  for (Index=1; Index <= MaxShapes; Index++)
-    SL.Append( aShapes( OrderInd(Index) ));
-}
-
-//================================================================================
-// function : SubShape()
-// purpose  : Method for GUI or TUI
-//================================================================================
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::SubShape(GEOM::GEOM_Shape_ptr shape,
-                                         CORBA::Short ShapeType, 
-                                         const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-     throw (SALOME::SALOME_Exception)
-{
-  return SubShapesOne(shape, (TopAbs_ShapeEnum) ShapeType, ListOfID);
-}
-
-//================================================================================
-// function : SubShapeSorted()
-// purpose  : Method for GUI or TUI
-//================================================================================
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::SubShapeSorted(GEOM::GEOM_Shape_ptr shape,
-                                               CORBA::Short ShapeType, 
-                                               const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-     throw (SALOME::SALOME_Exception)
-{
-  return SubShapesOne(shape, (TopAbs_ShapeEnum) ShapeType, ListOfID, Standard_True);
-}
-
-//================================================================================
-// function : SubShapesOne()
-// purpose  :
-//================================================================================
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::SubShapesOne( GEOM::GEOM_Shape_ptr shape,
-                                             const TopAbs_ShapeEnum ShapeType, 
-                                             const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID,
-                                             const Standard_Boolean Sort)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape mainShape;
-  TopoDS_Shape mainTopo = GetTopoShape(shape);
-
-  bool main = false;
-  while ( !main ) {
-    if ( shape->IsMainShape() ) {
-      mainShape = GetTopoShape(shape);
-      main = true;
-    } else
-      shape = GetIORFromString( shape->MainName() );
-  }
-  
-  if(ListOfID.length() < 1) {
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SubShape() : bad list of shapes",
-                                SALOME::BAD_PARAM);
-  }
-  
-  /* Create a sequence of all sub shapes */
-  TopTools_ListOfShape listShape;
-
-  TopTools_MapOfShape mapShape;
-  TopExp_Explorer exp ;
-  for ( exp.Init( mainShape, TopAbs_ShapeEnum(ShapeType)) ; exp.More(); exp.Next() ) {
-    if ( mapShape.Add( exp.Current() ) )
-      listShape.Append ( exp.Current() );
-  }
-
-  if (listShape.IsEmpty()) return shape;
-
-  if (Sort)
-    SortShapes(listShape);
-
-  TopTools_SequenceOfShape SS;
-  TopTools_ListIteratorOfListOfShape it (listShape);
-  for (; it.More(); it.Next())
-    SS.Append( it.Value() );
-
-  TopoDS_Shape SubShape;
-  if (ListOfID.length() == 1)
-    SubShape = SS.Value(ListOfID[0]);
-  else
-  {
-    BRep_Builder B;
-    TopoDS_Compound Comp;
-    B.MakeCompound (Comp);
-    unsigned int ind;
-    for ( ind = 0; ind < ListOfID.length(); ind++ )
-      B.Add( Comp, SS.Value(ListOfID[ind]) );
-    SubShape = Comp;
-  }
-
-  if ( !TNaming_Tool::HasLabel( myCurrentOCAFDoc->Main(), SubShape ) ) 
-    result = CreateSubObject( SubShape, shape, ListOfID);
-  else {
-    int TransDef;
-    TDF_Label Lab = TNaming_Tool::Label( myCurrentOCAFDoc->Main(), SubShape, TransDef );
-    Handle(TDataStd_Name) Att;
-    if ( Lab.FindAttribute( TDataStd_Name::GetID(), Att ) ) {
-      TCollection_AsciiString nameIOR( Att->Get() );
-      result = GEOM::GEOM_Shape::_narrow(_orb->string_to_object( nameIOR.ToCString() ));
-      if ( strcmp( result->MainName(), _orb->object_to_string(shape) ) != 0 ) {
-       result = CreateSubObject( SubShape, shape, ListOfID);
-      }
-    }
-  }
-
-  return result;
-}
-
-
-//================================================================================
-// function : SubShapeAll()
-// purpose  : Explode a shape in all sub shapes with a type (Method for TUI or GUI)
-//================================================================================
-
-GEOM::GEOM_Gen::ListOfGeomShapes* GEOM_Gen_i::SubShapeAll(GEOM::GEOM_Shape_ptr shape,
-                                                         CORBA::Short ShapeType)
-     throw (SALOME::SALOME_Exception)
-{
-  return SubShapesAll(shape, (TopAbs_ShapeEnum) ShapeType);
-}
-
-//================================================================================
-// function : SubShapeAllSorted()
-// purpose  : Explode a shape in all sub shapes with a type (Method for TUI or GUI)
-//================================================================================
-
-GEOM::GEOM_Gen::ListOfGeomShapes* GEOM_Gen_i::SubShapeAllSorted(GEOM::GEOM_Shape_ptr shape,
-                                                               CORBA::Short ShapeType)
-     throw (SALOME::SALOME_Exception)
-{
-  return SubShapesAll(shape, (TopAbs_ShapeEnum) ShapeType, Standard_True);
-}
-
-//================================================================================
-// function : SubShapeAllSorted()
-// purpose  :
-//================================================================================
-
-GEOM::GEOM_Gen::ListOfGeomShapes* GEOM_Gen_i::SubShapesAll(GEOM::GEOM_Shape_ptr shape,
-                                                          const TopAbs_ShapeEnum ShapeType,
-                                                          const Standard_Boolean Sort)
-  throw (SALOME::SALOME_Exception)
-{
-  /* List of sub shapes returned */
-  GEOM::GEOM_Gen::ListOfGeomShapes_var listOfGeomShapes = new GEOM::GEOM_Gen::ListOfGeomShapes;
-  listOfGeomShapes->length(0) ;
-  
-  TopoDS_Shape mainTopo = GetTopoShape(shape);
-  TopoDS_Shape mainShape;
-  bool main = false;
-  while ( !main ) {
-    if ( shape->IsMainShape() ) {
-      mainShape = GetTopoShape(shape);
-      main = true;
-    } else
-      shape = GetIORFromString( shape->MainName() );
-  }
-
-  if( mainTopo.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("In GEOM_Gen_i::SubShapeAll() : null main shape",
-                                SALOME::BAD_PARAM);
-  }
-  
-  /* List/index : field set for any sub shape */
-  GEOM::GEOM_Shape::ListOfSubShapeID_var ListOfID = new GEOM::GEOM_Shape::ListOfSubShapeID;
-  ListOfID->length(1) ;
-
-    // retrieve all subshapes
-  TopTools_MapOfShape mapShape;
-  TopTools_ListOfShape listShape;
-    
-  if (mainTopo.ShapeType()==TopAbs_COMPOUND  &&  ShapeType==TopAbs_SHAPE)
-  {
-    TopoDS_Iterator It(mainTopo,Standard_True,Standard_True );  
-    for ( ; It.More(); It.Next() ) 
-      if (mapShape.Add( It.Value() ))
-       listShape.Append( It.Value() );
-  }
-  else
-  {
-    TopExp_Explorer exp ( mainTopo, ShapeType);
-    for ( ; exp.More(); exp.Next() ) 
-      if (mapShape.Add( exp.Current() ))
-       listShape.Append( exp.Current() );
-  }
-
-  if (Sort)
-    SortShapes(listShape);
-    
-  /* Create all sub shapes */
-  int index;
-  GEOM::GEOM_Shape_var result;
-    
-  TopTools_ListIteratorOfListOfShape itSub (listShape);
-  for (index = 1; itSub.More(); itSub.Next(), ++index)
-  {
-    const TopoDS_Shape& SubShape = itSub.Value();
-    // check if SubShape is already in OCAFDS and ...
-    if ( TNaming_Tool::HasLabel( myCurrentOCAFDoc->Main(), SubShape ) )
-    {
-      int TransDef;
-      TDF_Label Lab = TNaming_Tool::Label( myCurrentOCAFDoc->Main(), SubShape, TransDef );
-      Handle(TDataStd_Name) Att;
-      if ( Lab.FindAttribute( TDataStd_Name::GetID(), Att ) )
-      {
-        TCollection_AsciiString nameIOR( Att->Get() );
-        result = GEOM::GEOM_Shape::_narrow(_orb->string_to_object( nameIOR.ToCString() ));
-       // ... it is subshape of <shape>
-        if ( strcmp( result->MainName(), _orb->object_to_string(shape) ) == 0 ) 
-        {
-          listOfGeomShapes->length(index) ;
-          listOfGeomShapes[index-1] = result ;
-         continue;
-        }
-      }
-    }
-
-//      if (Sort)
-//        ListOfID[0] = index;
-//      else
-    ListOfID[0] = GetIndexTopology( SubShape, mainShape ) ;
-    result = CreateSubObject( SubShape, shape, ListOfID);
-    /* Add each sub shape in the list returned */
-    listOfGeomShapes->length(index) ;
-    listOfGeomShapes[index-1] = result ;      
-  }
-
-  return listOfGeomShapes._retn() ;
-}
-
-
-//=================================================================================
-// function : MakeBoolean()
-// purpose  : Boolean operation according to the type 'operation'
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeBoolean(GEOM::GEOM_Shape_ptr shape1,
-                                      GEOM::GEOM_Shape_ptr shape2,
-                                      CORBA::Long operation) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape shape ;
-  TopoDS_Shape aShape1  ;
-  TopoDS_Shape aShape2  ;
-  
-  try {
-    aShape1 = GetTopoShape(shape1) ;
-    aShape2 = GetTopoShape(shape2) ;
-    
-    if( aShape1.IsNull() || aShape2.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("Boolean aborted : argument shape is null", SALOME::BAD_PARAM);
-    }
-    
-    switch (operation)
-      {
-      case 1 :   /* Common */
-       shape = BRepAlgoAPI_Common(aShape1, aShape2).Shape();
-       break ;
-      case 2 :   /* Cut */
-       shape = BRepAlgoAPI_Cut(aShape1, aShape2).Shape();
-       break ;
-      case 3 :   /* Fuse */
-       shape = BRepAlgoAPI_Fuse(aShape1, aShape2).Shape();
-       break ;
-      case 4 :   /* Section */
-       shape = BRepAlgoAPI_Section(aShape1, aShape2).Shape();
-       break ;
-      default :
-       MESSAGE("Boolean operation not known : " << operation ) ;
-       return result ;
-      }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in boolean operation", SALOME::BAD_PARAM);
-  }
-    
-  /* We test the validity of resulting shape */
-  if( !BRepAlgoAPI::IsValid(shape) ) {
-    THROW_SALOME_CORBA_EXCEPTION("Boolean aborted : non valid shape result", SALOME::BAD_PARAM);
-  }
-       
-  result = CreateObject(shape) ;
-      
-  /* put shape and name into geom/OCAF doc */
-  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
-  /* add attributs 'shape' and' name_io'r in a new label */
-  TDF_Label Lab = GC.Generated(aShape1, shape, result->Name() );
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab, entry);
-  result->ShapeId( entry.ToCString() ) ;
-      
-  /* Create a new label */
-  TDF_Label NewLab = Lab.NewChild();
-  TCollection_ExtendedString Value("Arguments");
-  TDataStd_Name::Set(NewLab,Value);
-  
-  TDF_Label NewLab1 = NewLab.NewChild();
-  TDF_Label RefLab;
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), shape1->ShapeId(), RefLab);
-  TDF_Reference::Set(NewLab1, RefLab);
-  
-  TDF_Label NewLab2 = NewLab.NewChild();
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), shape2->ShapeId(), RefLab);
-  TDF_Reference::Set(NewLab2, RefLab);
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeFuse()
-// purpose  : Special purpose !
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeFuse(GEOM::GEOM_Shape_ptr shape1,
-                                   GEOM::GEOM_Shape_ptr shape2)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape aShape1 = GetTopoShape(shape1) ;
-  TopoDS_Shape aShape2 = GetTopoShape(shape2) ;
-  if( aShape1.IsNull() || aShape2.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Fuse aborted : shape in argument is null", SALOME::BAD_PARAM);
-  }
-  TopoDS_Shape shape;
-  try {
-    shape  = BRepAlgoAPI_Fuse(aShape1, aShape2).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in Fuse operation", SALOME::BAD_PARAM);
-  }
-
-  /* We test the validity of resulting shape */
-  if( !BRepAlgoAPI::IsValid(shape) ) {
-    THROW_SALOME_CORBA_EXCEPTION("Fuse aborted : non valid shape result", SALOME::BAD_PARAM);
-  }
-
-  result = CreateObject(shape) ;
-
-  /* put shape and name into geom/OCAF doc */
-  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
-  /* add attributs 'shape' and' name_io'r in a new label */
-  TDF_Label Lab = GC.Generated(aShape1, shape, result->Name() );
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab, entry);
-  result->ShapeId( entry.ToCString() ) ;
-
-  /* Create a new label */
-  TDF_Label NewLab = Lab.NewChild();
-  TCollection_ExtendedString Value("Arguments");
-  TDataStd_Name::Set(NewLab,Value);
-
-  TDF_Label NewLab1 = NewLab.NewChild();
-  TDF_Label RefLab;
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), shape1->ShapeId(), RefLab);
-  TDF_Reference::Set(NewLab1, RefLab);
-
-  TDF_Label NewLab2 = NewLab.NewChild();
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), shape2->ShapeId(), RefLab);
-  TDF_Reference::Set(NewLab2, RefLab);
-  return result ;
-}
-
-
-//================================================================================
-// function : MakeAxisStruct()
-// purpose  : Create a structure GEOM::AxisStruct (see IDL file)
-//================================================================================
-GEOM::AxisStruct GEOM_Gen_i::MakeAxisStruct(CORBA::Double x,
-                                     CORBA::Double y,
-                                     CORBA::Double z,
-                                     CORBA::Double vx,
-                                     CORBA::Double vy,
-                                     CORBA::Double vz) 
-{
-  GEOM::AxisStruct A ;
-  A.x  = x ;   A.y  = y ;   A.z  = z ;
-  A.vx = vx ;  A.vy = vy ;  A.vz = vz ;
-  return A ;
-}
-
-
-//================================================================================
-// function : MakePointStruct()
-// purpose  : Create a structure GEOM::PointStruct (see IDL file)
-//================================================================================
-GEOM::PointStruct GEOM_Gen_i::MakePointStruct(CORBA::Double x,
-                                       CORBA::Double y,
-                                       CORBA::Double z)
-{
-  beginService( "GEOM_Gen_i::MakePointStruct" );
-  GEOM::PointStruct p ;
-  p.x = x ;   p.y = y ;   p.z = z ;
-  endService( "GEOM_Gen_i::MakePointStruct" );
-  return p ;
-}
-
-//================================================================================
-// function : MakeDirection()
-// purpose  : Create a structure GEOM::DirStruct (see IDL file)
-//================================================================================
-GEOM::DirStruct GEOM_Gen_i::MakeDirection(const GEOM::PointStruct& p)
-{ 
-  GEOM::DirStruct d ;
-    d.PS.x = p.x ;  d.PS.y = p.y ;  d.PS.z = p.z ;
-    return d ;
-  }
-
-//=================================================================================
-// function : MakeBox()
-// purpose  : Create a box topology.
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeBox(CORBA::Double x1,
-                                        CORBA::Double y1,
-                                        CORBA::Double z1,
-                                         CORBA::Double x2,
-                                         CORBA::Double y2,
-                                        CORBA::Double z2) 
-     throw (SALOME::SALOME_Exception)
-{
-  gp_Pnt P1(x1,y1,z1);
-  gp_Pnt P2(x2,y2,z2);
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  try {
-    tds = BRepPrimAPI_MakeBox(P1,P2).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeBox", SALOME::BAD_PARAM);
-  }
-
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Box aborted : null shape", SALOME::BAD_PARAM);
-  } 
-
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry) ;
-  return result;  
-}
-
-
-//================================================================================
-// function : MakeCylinder
-// purpose  : Create a cylinder topology
-//================================================================================
-GEOM::GEOM_Shape_ptr  GEOM_Gen_i::MakeCylinder(const GEOM::PointStruct& pstruct,
-                                              const GEOM::DirStruct& dstruct,
-                                              CORBA::Double radius,
-                                              CORBA::Double height) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-  gp_Pnt p(pstruct.x, pstruct.y, pstruct.z) ;
-  gp_Dir d(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;
-  gp_Ax2 axis(p, d) ;
-
-  try {
-    tds = BRepPrimAPI_MakeCylinder(axis, radius, height).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeCylinder", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Cylinder aborted", SALOME::BAD_PARAM);
-  } 
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;  
-}
-
-
-
-//================================================================================
-// function : MakeSphere()
-// purpose  : Make a sphere topology
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeSphere(CORBA::Double x1,
-                                     CORBA::Double y1,
-                                     CORBA::Double z1,
-                                     CORBA::Double radius) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  try {
-    tds = BRepPrimAPI_MakeSphere(gp_Pnt(x1,y1,z1), radius).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeSphere", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Sphere aborted", SALOME::BAD_PARAM);
-  } 
-  result = CreateObject(tds) ;  
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result;  
-}
-
-
-
-//================================================================================
-// function : MakeTorus()
-// purpose  : Create a torus topology
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeTorus( const GEOM::PointStruct& pstruct,
-                                     const GEOM::DirStruct& dstruct,
-                                     CORBA::Double major_radius,
-                                     CORBA::Double minor_radius )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-  gp_Pnt p(pstruct.x, pstruct.y, pstruct.z) ;
-  gp_Dir d(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;
-  gp_Ax2 axis(p, d) ;
-
-  try {
-  tds = BRepPrimAPI_MakeTorus(axis, major_radius, minor_radius).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeTorus", SALOME::BAD_PARAM);
-  }
-
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make torus aborted", SALOME::BAD_PARAM);
-  }
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;
-}
-
-
-//================================================================================
-// function : MakeCone()
-// purpose  : Create a cone topology
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeCone(const GEOM::PointStruct& pstruct,
-                                   const GEOM::DirStruct& dstruct,
-                                   CORBA::Double radius1,
-                                   CORBA::Double radius2,
-                                   CORBA::Double height)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-  gp_Pnt p(pstruct.x, pstruct.y, pstruct.z) ;
-  gp_Dir d(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;
-  gp_Ax2 axis(p, d) ;
-  
-  try {
-    /* Cone doesn't work if same radius */
-    if( fabs(radius1-radius2) <= Precision::Confusion() ) {
-      tds = BRepPrimAPI_MakeCylinder(axis, (radius1+radius2)/2.0, height).Shape();
-    }
-    else {
-      tds = BRepPrimAPI_MakeCone(axis, radius1, radius2, height).Shape();
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeCone", SALOME::BAD_PARAM);
-  }
-
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Cone aborted", SALOME::BAD_PARAM);
-  }
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;
-}
-
-
-
-//==================================================================================
-// function : ImportIGES()
-// purpose  : Import shape from an IGES (IGS) file
-//          : LPN modified 7 mai 2002
-//==================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::ImportIGES(const char* filename)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  //VRV: OCC 4.0 migration
-  IGESControl_Reader aReader;  
-  //VRV: OCC 4.0 migration
-  try {
-    IFSelect_ReturnStatus stat = aReader.ReadFile((char*)filename);
-    if ( stat != IFSelect_RetDone ) {
-      THROW_SALOME_CORBA_EXCEPTION("Error in reading import file", SALOME::BAD_PARAM);    }
-    
-    MESSAGE("ImportIGES : all Geometry Transfer" << endl ) ;
-    aReader.Clear();
-    aReader.TransferRoots(false);
-
-    MESSAGE("ImportIGES : count of shapes produced = " << aReader.NbShapes() << endl );    
-    TopoDS_Shape shape = aReader.OneShape();
-
-    if ( !shape.IsNull() ) {      
-      /* Final CORBA object creation */
-      result = CreateObject(shape) ;
-      const char *entry = InsertInLabel( shape, result->Name(), myCurrentOCAFDoc ) ;
-      result->ShapeId(entry);
-      return result ;
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ImportIGES()", SALOME::BAD_PARAM);
-  } 
-  
-  THROW_SALOME_CORBA_EXCEPTION("Import IGES aborted : internal error", SALOME::BAD_PARAM);
-}
-
-
-
-//==================================================================================
-// function : ImportSTEP()
-// purpose  : Import shape from an STEP (stp) file
-//          : 'result' is a compound of shapes if file contains more entities.
-//==================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::ImportSTEP(const char* filename)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  //VRV: OCC 4.0 migration
-  STEPControl_Reader aReader;
-  //VRV: OCC 4.0 migration
-
-  TopoDS_Compound compound;
-  BRep_Builder B;
-  B.MakeCompound( compound );
-  
-  try {
-    IFSelect_ReturnStatus status = aReader.ReadFile((char*)filename);
-    
-    if (status == IFSelect_RetDone) {
-      Standard_Boolean failsonly = Standard_False ;
-      aReader.PrintCheckLoad (failsonly, IFSelect_ItemsByEntity);
-      /* Root transfers */
-      Standard_Integer nbr = aReader.NbRootsForTransfer();
-      aReader.PrintCheckTransfer (failsonly, IFSelect_ItemsByEntity);
-      
-      for ( Standard_Integer n=1; n <= nbr; n++) {
-       
-       Standard_Boolean ok = aReader.TransferRoot(n);
-       /* Collecting resulting entities */
-       Standard_Integer nbs = aReader.NbShapes();
-       if (nbs == 0)
-         THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ImportStep", SALOME::BAD_PARAM) ;      
-       
-       for ( Standard_Integer i=1; i<=nbs; i++ ) {       
-         TopoDS_Shape aShape = aReader.Shape(i);
-         if ( aShape.IsNull() )
-           THROW_SALOME_CORBA_EXCEPTION("Null shape in GEOM_Gen_i::ImportStep", SALOME::BAD_PARAM) ;   
-         
-         /* For a single entity */
-         if(nbr == 1 && nbs == 1) {      
-           result = CreateObject(aShape) ;
-           const char *entry = InsertInLabel(aShape, result->Name(), myCurrentOCAFDoc) ;
-           result->ShapeId(entry);
-           return result ;
-         }
-         else {
-           B.Add( compound, aShape ) ;
-         }
-       }
-      }
-
-     TopoDS_Shape tds = compound ; 
-     result = CreateObject(tds) ;
-     if( CORBA::is_nil(result) )
-       THROW_SALOME_CORBA_EXCEPTION("Translation aborted : null result", SALOME::BAD_PARAM);
-     const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-     result->ShapeId(entry);
-     return result ;
-    }
-    
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ImportStep", SALOME::BAD_PARAM);
-  }  
-  return result ;
-}
-
-
-//==================================================================================
-// function : Partition()
-// purpose  :
-//==================================================================================
-
-GEOM::GEOM_Shape_ptr
-  GEOM_Gen_i::Partition(const GEOM::GEOM_Gen::ListOfIOR& ListShapes, 
-                        const GEOM::GEOM_Gen::ListOfIOR& ListTools,
-                        const GEOM::GEOM_Gen::ListOfIOR& ListKeepInside,
-                        const GEOM::GEOM_Gen::ListOfIOR& ListRemoveInside,
-                        const CORBA::Short               Limit)
-throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var aResult;  
-  TopoDS_Shape tds ;
-  //MESSAGE ("In Partition");
-  try {
-
-    unsigned int ind, nbshapes = 0;
-    nbshapes += ListShapes.length() + ListTools.length();
-    nbshapes += ListKeepInside.length() + ListRemoveInside.length();
-    
-    Partition_Spliter PS;
-    TopTools_MapOfShape ShapesMap(nbshapes), ToolsMap(nbshapes);
-    
-    // add object shapes that are in ListShapes;
-    for ( ind = 0; ind < ListShapes.length(); ind++) {
-      
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      if(Shape.IsNull() ) {
-        //MESSAGE ( "In Partition a shape is null" );
-       THROW_SALOME_CORBA_EXCEPTION("In Partition a shape is null", SALOME::BAD_PARAM);
-      }
-      if ( ShapesMap.Add( Shape ))
-        PS.AddShape(Shape);
-    }
-    
-    // add tool shapes that are in ListTools and not in ListShapes;
-    for (ind = 0; ind < ListTools.length(); ind++) {
-      
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListTools[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      if(Shape.IsNull() ) {
-        //MESSAGE ( "In Partition a tool shape is null" );
-       THROW_SALOME_CORBA_EXCEPTION("In Partition a shape is null", SALOME::BAD_PARAM);
-      }
-      if ( !ShapesMap.Contains( Shape ) && ToolsMap.Add( Shape ))
-        PS.AddTool(Shape);
-    }
-    
-    // add shapes that are in ListKeepInside, as object shapes;
-    for (ind = 0; ind < ListKeepInside.length(); ind++) {
-      
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListKeepInside[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      if(Shape.IsNull() ) {
-        //MESSAGE ( "In Partition a Keep Inside shape is null" );
-       THROW_SALOME_CORBA_EXCEPTION("In Partition a shape is null", SALOME::BAD_PARAM);
-      }
-      if (!ToolsMap.Contains( Shape ) &&
-          ShapesMap.Add( Shape ))
-        PS.AddShape(Shape);
-    }
-    
-    // add shapes that are in ListRemoveInside, as object shapes;
-    for (ind = 0; ind < ListRemoveInside.length(); ind++) {
-      
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListRemoveInside[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      if(Shape.IsNull() ) {
-        //MESSAGE ( "In Partition a Remove Inside shape is null" );
-       THROW_SALOME_CORBA_EXCEPTION("In Partition a shape is null", SALOME::BAD_PARAM);
-      }
-      if (!ToolsMap.Contains( Shape ) &&
-          ShapesMap.Add( Shape ) )
-        PS.AddShape(Shape);
-    }
-    
-    PS.Compute ((TopAbs_ShapeEnum) Limit);
-
-    // suppress result outside of shapes in KInsideMap
-    for (ind = 0; ind < ListKeepInside.length(); ind++) {
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListKeepInside[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      PS.KeepShapesInside( Shape );
-    }
-    
-    // suppress result inside of shapes in RInsideMap
-    for (ind = 0; ind < ListRemoveInside.length(); ind++) {
-      
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListRemoveInside[ind] );
-      TopoDS_Shape Shape = GetTopoShape(aShape);
-      PS.RemoveShapesInside( Shape );
-    }
-    
-    tds = PS.Shape();
-    
-    if( !BRepAlgoAPI::IsValid(tds) ) {
-      //MESSAGE ( "In Partition: non valid shape result" );
-      THROW_SALOME_CORBA_EXCEPTION("Partition aborted : non valid shape result", SALOME::BAD_PARAM);
-    }
-  }
-  catch (Standard_Failure) {
-    //MESSAGE ( "In Partition: Exception catched in GEOM_Gen_i::Partition()" );
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::Partition", SALOME::BAD_PARAM);
-  }
-  
-  aResult = CreateObject(tds) ;
-
-  /* add attributs S and mystr in a new label */
-  GEOMDS_Commands GC(myCurrentOCAFDoc->Main());
-  TDF_Label Lab = GC.AddShape(tds, aResult->Name() );
-  TCollection_AsciiString entry;
-  TDF_Tool::Entry(Lab,entry);
-  aResult->ShapeId( entry.ToCString() ) ;
-  
-  // add arguments
-  
-  /* Create a new label */
-  TDF_Label NewLab = Lab.NewChild();
-  TCollection_ExtendedString Value("Arguments");
-  TDataStd_Name::Set(NewLab,Value);
-
-  // object shapes
-  for (unsigned int ind = 0; ind < ListShapes.length(); ind++) {
-    TDF_Label NewLab1 = NewLab.NewChild();
-    
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[ind] );
-    Standard_CString anEntry = aShape->ShapeId();
-    TDF_Label RefLab;
-    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), anEntry, RefLab);
-    TDF_Reference::Set(NewLab1,RefLab);
-  }
-  // tool shapes
-  for (unsigned int ind = 0; ind < ListTools.length(); ind++) {
-    TDF_Label NewLab1 = NewLab.NewChild();
-    
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListTools[ind] );
-    Standard_CString anEntry = aShape->ShapeId();
-    TDF_Label RefLab;
-    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), anEntry, RefLab);
-    TDF_Reference::Set(NewLab1,RefLab);
-  }
-  // limit shapes 1
-  for (unsigned int ind = 0; ind < ListKeepInside.length(); ind++) {
-    TDF_Label NewLab1 = NewLab.NewChild();
-    
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListKeepInside[ind] );
-    Standard_CString anEntry = aShape->ShapeId();
-    TDF_Label RefLab;
-    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), anEntry, RefLab);
-    TDF_Reference::Set(NewLab1,RefLab);
-  }
-  // limit shapes 2
-  for (unsigned int ind = 0; ind < ListRemoveInside.length(); ind++) {
-    TDF_Label NewLab1 = NewLab.NewChild();
-    
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListRemoveInside[ind] );
-    Standard_CString anEntry = aShape->ShapeId();
-    TDF_Label RefLab;
-    TDF_Tool::Label(myCurrentOCAFDoc->GetData(), anEntry, RefLab);
-    TDF_Reference::Set(NewLab1,RefLab);
-  }
-  
-  return aResult;    
-}
-
-
-
-//==================================================================================
-// function : MakeFilling()
-// purpose  : Create a surface from section curves filling
-//==================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeFilling(GEOM::GEOM_Shape_ptr myShape,
-                                      CORBA::Short mindeg,
-                                      CORBA::Short maxdeg,
-                                      CORBA::Double tol3d,
-                                      CORBA::Double tol2d,
-                                      CORBA::Short nbiter)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Face tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() || aShape.ShapeType() != TopAbs_COMPOUND ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeFilling aborted : null shape or not a compound", SALOME::BAD_PARAM);
-  } 
-
-  try {
-    /* we verify the contents of the shape */
-    TopExp_Explorer Ex ;
-    TopoDS_Shape Scurrent ;    
-    Standard_Real First, Last ;
-    Handle(Geom_Curve) C ;
-    GeomFill_SectionGenerator Section ;
-    
-    Standard_Integer i = 0 ;
-    for(Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) {
-      Scurrent = Ex.Current() ;
-      if( Scurrent.IsNull() || Scurrent.ShapeType() != TopAbs_EDGE)  {
-       THROW_SALOME_CORBA_EXCEPTION("Initial shape doesn't contain only edges !", SALOME::BAD_PARAM);
-      }
-      C = BRep_Tool::Curve(TopoDS::Edge(Scurrent), First, Last);
-      C = new Geom_TrimmedCurve(C, First, Last);
-      Section.AddCurve(C) ;
-      i++ ;
-    }
-    
-    /* a 'tolerance' is used to compare 2 knots : see GeomFill_Generator.cdl */
-    /* We set 'tolerance' = tol3d                                            */
-    // Section.Perform( tol3d ) ; NRI */
-    Section.Perform( Precision::Confusion() ) ;
-    Handle(GeomFill_Line) Line = new GeomFill_Line(i) ;
-    
-    GeomFill_AppSurf App(mindeg, maxdeg, tol3d, tol2d, nbiter) ; /* user parameters */
-    App.Perform(Line, Section) ;
-    
-    if (!App.IsDone()) {
-      THROW_SALOME_CORBA_EXCEPTION("Filling aborted : non valid shape result", SALOME::BAD_PARAM);
-    }
-    Standard_Integer UDegree, VDegree, NbUPoles, NbVPoles, NbUKnots, NbVKnots;
-    App.SurfShape(UDegree, VDegree, NbUPoles, NbVPoles, NbUKnots, NbVKnots);   
-    Handle(Geom_BSplineSurface) GBS = new Geom_BSplineSurface(App.SurfPoles(),
-                                                             App.SurfWeights(),
-                                                             App.SurfUKnots(),
-                                                             App.SurfVKnots(),
-                                                             App.SurfUMults(),
-                                                             App.SurfVMults(),
-                                                             App.UDegree(),
-                                                             App.VDegree());
-    
-    if( GBS.IsNull() )  {
-      THROW_SALOME_CORBA_EXCEPTION("Make Filling aborted", SALOME::BAD_PARAM);
-    }
-    tds  = BRepBuilderAPI_MakeFace(GBS) ;    
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeFilling", SALOME::BAD_PARAM);
-  } 
-  
-  /* We test the validity of resulting shape */
-  if( !BRepAlgoAPI::IsValid(tds) ) {
-    THROW_SALOME_CORBA_EXCEPTION("Filling aborted : non valid shape result", SALOME::BAD_PARAM);
-  } 
-  else {
-    result = CreateObject(tds) ;
-    InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeGlueFaces()
-// purpose  :
-//=================================================================================
-
-TopoDS_Face GEOM_Gen_i::FindSameFace(const TopoDS_Shape& aShape, 
-                                    const TopoDS_Face& F,
-                                    double tol3d)
-{
-  TopoDS_Face aFace;
-  bool isSame = false;
-  for (TopExp_Explorer exf(aShape,TopAbs_FACE); exf.More(); exf.Next())
-    {
-      //MESSAGE("--- test a face");
-      int nbFound = 0;
-      aFace = TopoDS::Face(exf.Current());
-      TopTools_ListOfShape liste1;
-      TopTools_ListOfShape liste2;
-      for (TopExp_Explorer exp(aFace,TopAbs_VERTEX); exp.More(); exp.Next())
-       {
-         const TopoDS_Vertex& V = TopoDS::Vertex(exp.Current());
-         liste1.Append(V);
-       }
-      for (TopExp_Explorer exp(F,TopAbs_VERTEX); exp.More(); exp.Next())
-       {
-         const TopoDS_Vertex& V = TopoDS::Vertex(exp.Current());
-         liste2.Append(V);
-       }
-      isSame = false;
-      if (liste1.Extent() == liste2.Extent())
-       {
-         TopTools_ListIteratorOfListOfShape it1(liste1);
-         isSame = true;
-         for (; it1.More(); it1.Next())
-           {
-             bool foundSamePoint = false;
-             gp_Pnt P1 = BRep_Tool::Pnt(TopoDS::Vertex(it1.Value()));
-             TopTools_ListIteratorOfListOfShape it2(liste2);
-             for (it2; it2.More(); it2.Next())
-               {
-                 gp_Pnt P2 = BRep_Tool::Pnt(TopoDS::Vertex(it2.Value()));
-                 double d = P1.Distance(P2);
-                 if (d < tol3d)
-                   {
-                     nbFound++;
-                     //MESSAGE("    found Same Point : "<<nbFound<<" - "<<P1.X()<<" "<<P1.Y()<<" "<<P1.Z());
-                     foundSamePoint = true;
-                     break;
-                   }
-               }
-             isSame = isSame && foundSamePoint;
-             if (! isSame) break; // a vertex does not correspond : not same face
-           }
-       }
-      if (isSame)
-       {
-         //MESSAGE("    --- Found Same Face");
-         break; // a face corresponding to F is found
-       }
-    }
-  if (! isSame) aFace.Nullify(); // return null face
-  return aFace;
-}
-
-TopoDS_Edge GEOM_Gen_i::FindSameEdge(const TopoDS_Face& nf, 
-                                    TopoDS_Edge& Eold,
-                                    double tol3d)
-{
-  TopoDS_Face newFace = TopoDS::Face(nf.Oriented(TopAbs_REVERSED));
-  TopoDS_Vertex VFirst, VLast;
-  TopExp::Vertices(Eold, VFirst, VLast);
-  gp_Pnt Pf = BRep_Tool::Pnt(VFirst);
-  gp_Pnt Pl = BRep_Tool::Pnt(VLast);
-  TopoDS_Edge Enew;
-  for (TopExp_Explorer ee(newFace,TopAbs_EDGE); ee.More(); ee.Next())
-    {
-      const TopoDS_Edge& E = TopoDS::Edge(ee.Current());
-      TopoDS_Vertex VFn, VLn;
-      TopExp::Vertices(E, VFn, VLn);
-      gp_Pnt Pfn = BRep_Tool::Pnt(VFn);
-      gp_Pnt Pln = BRep_Tool::Pnt(VLn);
-      double dff = Pf.Distance(Pfn);
-      double dfl = Pf.Distance(Pln);
-      double dlf = Pl.Distance(Pfn);
-      double dll = Pl.Distance(Pln);
-      if ((dff < tol3d) && (dll <tol3d))
-       {
-         //MESSAGE("--- edge forward " <<Pf.X()<<" "<<Pf.Y()<<" "<<Pf.Z()<<" "<<Pl.X()<<" "<<Pl.Y()<<" "<<Pl.Z());
-         Enew = TopoDS::Edge(E.Oriented(TopAbs_FORWARD));
-         Eold = TopoDS::Edge(Eold.Oriented(TopAbs_FORWARD));
-         break;
-       } 
-      if ((dfl < tol3d) && (dlf <tol3d))
-       {
-         //MESSAGE("--- edge reversed " <<Pf.X()<<" "<<Pf.Y()<<" "<<Pf.Z()<<" "<<Pl.X()<<" "<<Pl.Y()<<" "<<Pl.Z());
-         Enew = TopoDS::Edge(E.Oriented(TopAbs_REVERSED));
-         Eold = TopoDS::Edge(Eold.Oriented(TopAbs_FORWARD));
-         break;
-       } 
-    }
-  return Enew;
-}
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeGlueFaces(GEOM::GEOM_Shape_ptr myShape,
-                                              double tol3d)
-  throw (SALOME::SALOME_Exception)
-{
-
-  // prendre un premier shell dans la liste des shells
-  // initialiser un compshell avec ce shell
-  // tant qu'il reste des shells dans la liste
-  //   chercher un shell qui a des faces en  commun avec le compshell
-  //   creer un BRepTools_Quilt
-  //   recenser les faces communes issues du compshell, les ajouter au quilt 
-  //   recenser les faces restantes du shell a inclure, les ajouter au quilt
-  //   recenser les edges en double, a remplacer
-  //   pour chaque paire d'edge
-  //     tester l'orientation relative des aretes
-  //     bind dans le quilt de Eold.Forward et Enew.Forward (ou reverse)
-  //   recuperer le nouveau shell
-  // l'incorporer dans le compshell
-  // appliquer BRepTools_SameParameter au compshell
-  // (rendre parametres 2D des edges identiques aux parametres 3D)
-
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  TopoDS_Compound C;
-  BRep_Builder bu;
-  bu.MakeCompound(C); // empty compound;
-  TopTools_ListOfShape shellList;
-  for (TopExp_Explorer exp(aShape,TopAbs_SHELL); exp.More(); exp.Next())
-    {
-      const TopoDS_Shell& S = TopoDS::Shell(exp.Current());
-      shellList.Append(S);
-    }
-  TopTools_ListIteratorOfListOfShape its(shellList);
-  if ( ! its.More())
-    {
-      THROW_SALOME_CORBA_EXCEPTION("glue aborted : no shell in shape", SALOME::BAD_PARAM);
-    }
-  TopoDS_Shell S = TopoDS::Shell(its.Value());
-  bu.Add(C, S); // add first shell to compound
-  shellList.Remove(its);
-  its.Initialize(shellList);
-  bool shellAdded = true;
-  while ((shellList.Extent() > 0) && shellAdded)
-    {
-      //MESSAGE("more shells : "<< shellList.Extent());
-      shellAdded = false;
-      its.Initialize(shellList);
-      for(; its.More(); its.Next())
-       {
-         //MESSAGE("one more shell to try");
-         TopTools_ListOfShape newFaces; // common faces from new compound
-         TopTools_ListOfShape oldFaces; // common faces from shell to add
-         TopTools_ListOfShape addFaces; // not common faces from shell to add
-         TopTools_ListOfShape newEdges; // common edges from new compound
-         TopTools_ListOfShape oldEdges; // common edges from face to add
-         TopoDS_Compound CFN;
-         TopoDS_Compound CFO;
-         bu.MakeCompound(CFN);       // empty compound for new faces
-         bu.MakeCompound(CFO);       // empty compound for old faces
-         S = TopoDS::Shell(its.Value());
-         for (TopExp_Explorer exp(S,TopAbs_FACE); exp.More(); exp.Next())
-           {
-             //MESSAGE("--- try to find corresponding face in new compound");
-             TopoDS_Face F = TopoDS::Face(exp.Current());
-             TopoDS_Face newFace = FindSameFace(C,F,tol3d);
-             if (! newFace.IsNull())
-               {
-                 //MESSAGE("--- face found");
-                 newFaces.Append(newFace); 
-                 bu.Add(CFN, newFace); // common faces from new compound
-                 oldFaces.Append(F);
-                 for (TopExp_Explorer ee(F,TopAbs_EDGE);ee.More();ee.Next())
-                   {
-                     //MESSAGE("--- find edge pair");
-                     TopoDS_Edge Eold = TopoDS::Edge(ee.Current());
-                     const TopoDS_Edge& Enew = FindSameEdge(newFace, Eold, tol3d);
-                     oldEdges.Append(Eold);
-                     newEdges.Append(Enew);
-                   }
-               }
-             else
-               {
-                 //MESSAGE("---");
-                 addFaces.Append(F);
-                 bu.Add(CFO, F); // not common faces from shell to add
-               }
-           }
-         if ( !newFaces.IsEmpty())
-           {
-             //MESSAGE("--- some faces found ---");
-             shellAdded = true;
-             BRepTools_Quilt glue;
-             glue.Add(CFN);
-             TopTools_ListIteratorOfListOfShape ito(oldEdges);
-             TopTools_ListIteratorOfListOfShape itn(newEdges);
-             for (; ito.More(); ito.Next())
-               {                 
-                 //MESSAGE("--- bind");
-                 glue.Bind(TopoDS::Edge(ito.Value()), TopoDS::Edge(itn.Value()));
-                 itn.Next();
-               }
-             glue.Add(CFO);
-             TopoDS_Compound newc = TopoDS::Compound(glue.Shells());
-             for (TopExp_Explorer exs(newc,TopAbs_SHELL); exs.More(); exs.Next())
-               {
-                 TopoDS_Shell NS = TopoDS::Shell(exs.Current());
-                 bu.Add(C, NS);
-               }
-             shellList.Remove(its);
-             //MESSAGE("--- remove shell from list");
-             break;
-           }
-       }
-    }
-  //MESSAGE("---" << shellList.Extent() << " " << shellAdded);
-
-  TopExp_Explorer  exp(C,TopAbs_SHELL);
-  Standard_Integer ish=0;
-  TopoDS_Compound  Res;
-  TopoDS_Solid     Sol;
-  BRep_Builder     B;
-  B.MakeCompound(Res);
-  TopoDS_Shape theShape;
-
-  for (; exp.More(); exp.Next())
-    {
-      TopoDS_Shape Sh = exp.Current();
-      B.MakeSolid(Sol);
-      B.Add(Sol,Sh);
-      BRepClass3d_SolidClassifier SC(Sol);
-      SC.PerformInfinitePoint(1.E-6); // cf. BRepFill_Confusion() - BRepFill_Evolved.cxx
-      if (SC.State() == TopAbs_IN)
-       {
-         B.MakeSolid(Sol);
-         B.Add(Sol,Sh.Reversed());
-       }
-      B.Add(Res,Sol);
-      ish++;
-    }
-  if (ish == 1) { theShape = Sol;}
-  else          { theShape = Res;}
-
-  BRepLib::SameParameter(theShape, 1.E-5, Standard_True);
-  tds = theShape;
-  result = CreateObject(tds);    
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  //MESSAGE("---");
-  return result;
-}
-
-//=================================================================================
-// function : MakeSewing()
-// purpose  :
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeSewing( const GEOM::GEOM_Gen::ListOfIOR& ListShapes,
-                                      CORBA::Double precision )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  BRepOffsetAPI_Sewing aMethod ;
-
-  try {
-    /* default OCC is 1.0e-06 */
-    aMethod.Init(precision, Standard_False);  
-    for ( unsigned int i = 0; i < ListShapes.length(); i++) {
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[i] ); 
-      TopoDS_Shape Shape = GetTopoShape(aShape) ;
-      if( Shape.IsNull() ) {
-       THROW_SALOME_CORBA_EXCEPTION("MakeSewing aborted : null shape during operation", SALOME::BAD_PARAM);
-      } 
-      aMethod.Add(Shape) ;  
-    }  
-    
-    aMethod.Perform() ;
-    tds = aMethod.SewedShape() ;
-    if( !BRepAlgoAPI::IsValid(tds) ) {
-      THROW_SALOME_CORBA_EXCEPTION("Make Sewing aborted : non valid shape", SALOME::BAD_PARAM);
-    }
-    if( tds.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("Make Sewing aborted : null shape", SALOME::BAD_PARAM);
-    }
-  }
-  catch (Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeSewing", SALOME::BAD_PARAM);
-  }
-  
-  result = CreateObject(tds);
-  InsertInLabelMoreArguments(tds, result, ListShapes, myCurrentOCAFDoc) ;
-  return result;
-}
-
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeSewingShape( GEOM::GEOM_Shape_ptr aShape,
-                                           CORBA::Double precision )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds, S ;
-  BRepOffsetAPI_Sewing aMethod ;
-
-  try {
-    S = GetTopoShape(aShape) ;
-    if(S.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("In Sewing a Shape is null", SALOME::BAD_PARAM);
-    }
-
-    /* default OCC is 1.0e-06 */
-    aMethod.Init(precision, Standard_False);  
-    for ( TopExp_Explorer exp( S, TopAbs_FACE); exp.More(); exp.Next() ) {
-      const TopoDS_Face& F = TopoDS::Face(exp.Current());
-      aMethod.Add(F) ;  
-    }  
-    
-    aMethod.Perform() ;
-    tds = aMethod.SewedShape() ;
-    if( !BRepAlgoAPI::IsValid(tds) ) {
-      THROW_SALOME_CORBA_EXCEPTION("Make Sewing aborted : non valid shape", SALOME::BAD_PARAM);
-    }
-  }
-  catch (Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeSewing", SALOME::BAD_PARAM);
-  }
-  
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry) ;
-  return result;
-}
-
-//==================================================================================
-// function : OrientationChange()
-// purpose  : Change the orientation of a new shape
-//          : TopAbs_FORWARD < -- > TopAbs_REVERSED
-//
-//          : WARNING : for the moment we make a new shape !
-//==================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::OrientationChange(GEOM::GEOM_Shape_ptr aShape)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;  
-  BRep_Builder aBuilder;  
-
-  TopoDS_Shape shape = GetTopoShape(aShape) ;
-  if( shape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Shape is null", SALOME::BAD_PARAM);
-  }
-
-  BRepBuilderAPI_Copy Copy(shape);
-  if( Copy.IsDone() ) {
-    TopoDS_Shape tds = Copy.Shape();
-    if( tds.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("Orientation aborted : null shape", SALOME::BAD_PARAM);
-    } 
-  
-    if( tds.Orientation() == TopAbs_FORWARD)
-      tds.Orientation(TopAbs_REVERSED) ;
-    else
-      tds.Orientation(TopAbs_FORWARD) ;
-    
-    result = CreateObject(tds); 
-    InsertInLabelOneArgument(shape, aShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//==================================================================================
-// function : GetReferencedObjects()
-// purpose  :
-//==================================================================================
-GEOM::GEOM_Gen::ListOfIOR* GEOM_Gen_i::GetReferencedObjects(GEOM::GEOM_Shape_ptr shape)
-{
-  GEOM::GEOM_Gen::ListOfIOR_var aList = new GEOM::GEOM_Gen::ListOfIOR;
-  aList->length(0);
-
-  if (shape->_is_nil()) return aList._retn();
-
-  Standard_CString entry = shape->ShapeId();
-  TDF_Label Lab;
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), entry, Lab);
-
-  Handle(TDataStd_Name) Att;
-  Lab.FindAttribute(TDataStd_Name::GetID(),Att);
-
-  TDF_ChildIterator ChildIterator(Lab);
-  if (ChildIterator.More()) {
-    TDF_Label L = ChildIterator.Value();
-    Handle(TDataStd_Name) Att;
-    L.FindAttribute(TDataStd_Name::GetID(),Att);
-    if (Att->Get().IsEqual(TCollection_ExtendedString("Arguments")) ) {
-
-      TDF_ChildIterator ChildIterator1(L);
-      unsigned int i = 0;
-
-      while (ChildIterator1.More()) {
-       TDF_Label L = ChildIterator1.Value();
-
-       Handle(TDF_Reference) Ref;
-       if (L.FindAttribute(TDF_Reference::GetID(),Ref)) {
-         i++;
-       }
-       ChildIterator1.Next();
-      }
-      aList->length(i);
-      i = 0;
-      TDF_ChildIterator ChildIterator2(L);
-      while (ChildIterator2.More()) {    
-       TDF_Label L = ChildIterator2.Value();
-       Handle(TDF_Reference) Ref;
-       if (L.FindAttribute(TDF_Reference::GetID(),Ref)) {
-         TDF_Label L = Ref->Get();
-         
-         Handle(TDataStd_Name) Att;
-         L.FindAttribute(TDataStd_Name::GetID(),Att);
-         TCollection_AsciiString nameIOR (Att->Get()) ;
-         aList[i] = strdup( nameIOR.ToCString() );
-         i++;
-       }
-   
-       ChildIterator2.Next();
-      }
-    }
-  }
-  return aList._retn();
-}
-
-//==================================================================================
-// function : GetObjects()
-// purpose  :
-//==================================================================================
-GEOM::GEOM_Gen::ListOfIOR* GEOM_Gen_i::GetObjects(GEOM::GEOM_Shape_ptr shape)
-{
-  GEOM::GEOM_Gen::ListOfIOR_var aList = new GEOM::GEOM_Gen::ListOfIOR;
-  aList->length(0);
-  
-  Standard_CString entry = shape->ShapeId();
-  TDF_Label Lab;
-  TDF_Tool::Label(myCurrentOCAFDoc->GetData(), entry, Lab);
-  
-  Handle(TDataStd_Name) Att;
-  Lab.FindAttribute(TDataStd_Name::GetID(),Att);
-
-  TDF_ChildIterator ChildIterator(Lab);
-  unsigned int i = 0;
-  while (ChildIterator.More()) {
-    TDF_Label L = ChildIterator.Value();
-    Handle(TDataStd_Name) Att;
-    L.FindAttribute(TDataStd_Name::GetID(),Att);
-
-    if (!Att->Get().IsEqual(TCollection_ExtendedString("Arguments")) ) {
-      i++;
-    }
-    ChildIterator.Next();
-  }
-
-  aList->length(i);
-  i = 0;
-  TDF_ChildIterator ChildIterator1(Lab);
-  while (ChildIterator1.More()) {
-    TDF_Label L = ChildIterator1.Value();
-    Handle(TDataStd_Name) Att;
-    L.FindAttribute(TDataStd_Name::GetID(),Att);
-
-    if (!Att->Get().IsEqual(TCollection_ExtendedString("Arguments")) ) {
-      TCollection_AsciiString nameIOR (Att->Get());
-      aList[i] = strdup( nameIOR.ToCString() );
-      i++;
-    }
-    ChildIterator1.Next();
-  }
-  return aList._retn();
-}
-
-
-//==================================================================================
-// function : Import
-// purpose  : Import shape from a BREP file
-//==================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::ImportBREP(const char* filename)
-  throw (SALOME::SALOME_Exception)
-{
-  TopoDS_Shape tds ;
-  GEOM::GEOM_Shape_var result ;
-  
-  try {
-    BRep_Builder aBuilder;  
-    BRepTools::Read(tds, strdup(filename), aBuilder) ;    
-    if (tds.IsNull()) {
-      THROW_SALOME_CORBA_EXCEPTION("Import BRep aborted", SALOME::BAD_PARAM);
-    } 
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ImportBREP", SALOME::BAD_PARAM);
-  }
-
-  result = CreateObject(tds) ;
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result; 
-}
-
-
-//================================================================================
-// function : MakePlane()
-// purpose  : Make a plane topology (non infinite)
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePlane(const GEOM::PointStruct& pstruct,
-                                    const GEOM::DirStruct& dstruct,
-                                    CORBA::Double trimsize) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-
-  try {
-    gp_Pnt aPoint(pstruct.x, pstruct.y, pstruct.z) ;
-    gp_Dir aDirection(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;
-    /*  we make a trimmed plane */
-    gp_Pln gplane(aPoint, aDirection) ;    
-    tds = BRepBuilderAPI_MakeFace(gplane, -trimsize, +trimsize, -trimsize, +trimsize) ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakePlane", SALOME::BAD_PARAM);
-  }
-
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Plane aborted : null shape", SALOME::BAD_PARAM);
-   } 
-  
-  result = CreateObject(tds) ;
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;
-}
-
-//=================================================================================
-// function : MakeVertex()
-// purpose  : Create a Vertex topology.
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeVertex(CORBA::Double x,
-                                     CORBA::Double y,
-                                     CORBA::Double z) 
-  throw (SALOME::SALOME_Exception)
-{
-
-  GEOM::GEOM_Shape_var result ; 
-  gp_Pnt P(x,y,z);
-  TopoDS_Shape tds = BRepBuilderAPI_MakeVertex(P).Shape();
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Vertex/Point aborted", SALOME::BAD_PARAM);
-  }
-  result = CreateObject(tds) ;
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeFace()
-// purpose  : 
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeFace( GEOM::GEOM_Shape_ptr wire,
-                                    CORBA::Boolean wantplanarface ) 
-  throw (SALOME::SALOME_Exception) 
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape aShape;
-  TopoDS_Shape tds;
-
-  try {
-    aShape = GetTopoShape(wire) ;
-    if( aShape.IsNull() || aShape.ShapeType() != TopAbs_WIRE ) {
-      THROW_SALOME_CORBA_EXCEPTION("MakeFace aborted : null or inappropriate shape", SALOME::BAD_PARAM);
-    }
-    TopoDS_Wire W = TopoDS::Wire(aShape) ;
-    tds = BRepBuilderAPI_MakeFace(W, wantplanarface).Shape() ;
-    if( !tds.IsNull() ) {
-      result = CreateObject(tds) ;
-      InsertInLabelOneArgument(aShape, wire, tds, result, myCurrentOCAFDoc) ;
-    }
-    else {
-      THROW_SALOME_CORBA_EXCEPTION("Null result in GEOM_Gen_i::MakeFace", SALOME::BAD_PARAM);
-    }
-  }
-  catch (Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeFace", SALOME::BAD_PARAM);
-  }  
-  return result ;
-}
-
-
-//================================================================================
-// function : MakeLine
-// purpose  : Make a Line topology
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeLine(const GEOM::PointStruct& pstruct,
-                                   const GEOM::DirStruct& dstruct)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result  ;
-  gp_Pnt P1(pstruct.x, pstruct.y, pstruct.z);
-  gp_Pnt P2(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;  
-  TopoDS_Shape tds ;
-  
-  try {
-    tds = BRepBuilderAPI_MakeEdge(P1, P2).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeLine", SALOME::BAD_PARAM);
-  }
-
-  if ( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Line aborted : null shape", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;
-    const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-    result->ShapeId(entry);
-  }
-  return result ;  
-}
-
-
-//================================================================================
-// function : MakeVector()
-// purpose  : Make a vector
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeVector(const GEOM::PointStruct& pstruct1,
-                                     const GEOM::PointStruct& pstruct2)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result  ;
-  TopoDS_Shape tds ;
-  
-  try {
-    gp_Pnt P1(pstruct1.x, pstruct1.y, pstruct1.z);
-    gp_Pnt P2(pstruct2.x, pstruct2.y, pstruct2.z) ;
-    tds = BRepBuilderAPI_MakeEdge(P1, P2).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeVector", SALOME::BAD_PARAM);
-  }
-
-  if ( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Vector aborted : null shape", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;
-    const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-    result->ShapeId(entry);
-  }
-  return result ;  
-}
-
-
-//================================================================================
-// function : MakeCircle()
-// purpose  : 
-//================================================================================
-GEOM::GEOM_Shape_ptr  GEOM_Gen_i::MakeCircle(const GEOM::PointStruct& pstruct,
-                                      const GEOM::DirStruct& dstruct,
-                                      CORBA::Double radius)
-  throw (SALOME::SALOME_Exception) 
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-
-  try {
-    gp_Pnt p(pstruct.x, pstruct.y, pstruct.z) ;
-    gp_Dir d(dstruct.PS.x, dstruct.PS.y, dstruct.PS.z) ;
-    gp_Ax2 axis(p, d) ;
-    gp_Circ circ( axis, radius);    
-    BRepBuilderAPI_MakeEdge MakeEdge( circ );
-    tds = MakeEdge.Edge();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeCircle", SALOME::BAD_PARAM);
-  }
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Circle aborted", SALOME::BAD_PARAM);
-  } 
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;  
-}
-
-//================================================================================
-// function : MakeArc()
-// purpose  : make an arc of circle from pInit to pEnd and passing on pCircle
-//================================================================================
-GEOM::GEOM_Shape_ptr  GEOM_Gen_i::MakeArc(const GEOM::PointStruct& pInit,
-                                   const GEOM::PointStruct& pCircle,
-                                   const GEOM::PointStruct& pEnd)
-  throw (SALOME::SALOME_Exception) 
-{
-  GEOM::GEOM_Shape_var result;
-  try {
-    gp_Pnt pI(pInit.x, pInit.y, pInit.z) ;
-    gp_Pnt pC(pCircle.x, pCircle.y, pCircle.z) ;
-    gp_Pnt pE(pEnd.x, pEnd.y, pEnd.z) ;
-    
-    GC_MakeArcOfCircle arc( pI, pC, pE ) ;
-    if( !arc.IsDone() ) {
-      THROW_SALOME_CORBA_EXCEPTION("Arc not done", SALOME::BAD_PARAM);
-    }
-    BRepBuilderAPI_MakeEdge MakeEdge( arc );
-    TopoDS_Shape tds = MakeEdge.Edge();
-    if (tds.IsNull()) {
-      THROW_SALOME_CORBA_EXCEPTION("Null result : arc not done", SALOME::BAD_PARAM);
-    } 
-    else {
-      result = CreateObject(tds);
-      const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-      result->ShapeId(entry);
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeArc", SALOME::BAD_PARAM);
-  }
-  return result ;
-}
-
-
-
-//=================================================================================
-// function : MakeTranslation()
-// purpose  : Translate a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeTranslation( GEOM::GEOM_Shape_ptr myShape,
-                                           CORBA::Double x,
-                                           CORBA::Double y,
-                                           CORBA::Double z)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Translation aborted : null shape", SALOME::BAD_PARAM);
-  }
-  gp_Vec theVector(x,y,z) ;
-  gp_Trsf theTransformation ;
-  theTransformation.SetTranslation(theVector) ;
-  BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-  TopoDS_Shape tds = myBRepTransformation.Shape() ;
-
-  result = CreateObject(tds) ;
-  if( CORBA::is_nil(result) ) {
-    THROW_SALOME_CORBA_EXCEPTION("Translation aborted : null result", SALOME::BAD_PARAM);
-  }
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeMultiTranslation1D()
-// purpose  : Multi-Translate a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeMultiTranslation1D( GEOM::GEOM_Shape_ptr myShape,
-                                                  const GEOM::DirStruct& dir,
-                                                  CORBA::Double step,
-                                                  CORBA::Short nbtimes )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() )
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiTranslation1D aborted : null shape", SALOME::BAD_PARAM);
-  
-  try {
-    int i ;
-    double DX, DY, DZ ;
-    gp_Trsf theTransformation ;
-    gp_Vec myVec ;
-    gp_Vec Vec( dir.PS.x, dir.PS.y, dir.PS.z ) ;
-    Vec.Normalize();
-    TopoDS_Compound compound;
-    BRep_Builder B;
-    B.MakeCompound( compound );
-    
-    for ( i = 0; i < nbtimes; i++ ) {
-      DX = i * step * Vec.X() ;
-      DY = i * step * Vec.Y() ;
-      DZ = i * step * Vec.Z() ;
-      myVec.SetCoord( DX, DY, DZ ) ;
-      theTransformation.SetTranslation(myVec) ;
-      BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-      B.Add( compound, myBRepTransformation.Shape() );
-    }
-    tds = compound ;
-    result = CreateObject(tds) ;
-  }
-  catch (Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeMultiTranslation1D", SALOME::BAD_PARAM);
-  }
-    
-  if( CORBA::is_nil(result) ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiTranslation1D aborted : null result", SALOME::BAD_PARAM);
-  }
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeMultiTranslation2D()
-// purpose  : Multi-Translate a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeMultiTranslation2D( GEOM::GEOM_Shape_ptr myShape,
-                                                  const GEOM::DirStruct& dir1,
-                                                  CORBA::Double step1,
-                                                  CORBA::Short nbtimes1,
-                                                  const GEOM::DirStruct& dir2,
-                                                  CORBA::Double step2,
-                                                  CORBA::Short nbtimes2 )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiTranslation2D aborted : null shape", SALOME::BAD_PARAM);
-  }
-  
-  try {
-    int i, j ;
-    double DX, DY, DZ ;
-    gp_Trsf theTransformation ;
-    gp_Vec myVec ;
-    gp_Vec Vec1( dir1.PS.x, dir1.PS.y, dir1.PS.z ) ;
-    Vec1.Normalize();
-    gp_Vec Vec2( dir2.PS.x, dir2.PS.y, dir2.PS.z ) ;
-    Vec2.Normalize();
-    TopoDS_Compound compound;
-    BRep_Builder B;
-    B.MakeCompound( compound );
-    
-    for ( i = 0; i < nbtimes1; i++ ) {
-      for ( j = 0; j < nbtimes2; j++ ) {
-       DX = i * step1 * Vec1.X() + j * step2 * Vec2.X() ;
-       DY = i * step1 * Vec1.Y() + j * step2 * Vec2.Y() ;
-       DZ = i * step1 * Vec1.Z() + j * step2 * Vec2.Z() ;
-       myVec.SetCoord( DX, DY, DZ ) ;
-       theTransformation.SetTranslation(myVec) ;
-       BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-       B.Add( compound, myBRepTransformation.Shape() );
-      }
-    }
-    tds = compound ;
-    result = CreateObject(tds) ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeMultiTranslation2D", SALOME::BAD_PARAM);
-  }
-   
-  if( CORBA::is_nil(result) ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiTranslation2D aborted : null result", SALOME::BAD_PARAM);
-  }
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeMultiRotation1D()
-// purpose  : Multi-Rotate a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeMultiRotation1D( GEOM::GEOM_Shape_ptr myShape,
-                                               const GEOM::DirStruct& dir,
-                                               const GEOM::PointStruct& loc,
-                                               CORBA::Short nbtimes)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiRotation1D aborted : null shape", SALOME::BAD_PARAM);
-  }
-  try {
-
-    int i ;
-    gp_Pnt P(loc.x, loc.y, loc.z) ;
-    gp_Dir D(dir.PS.x, dir.PS.y, dir.PS.z) ;
-    gp_Ax1 AX1(P, D) ;
-    
-    double angle = 360.0/nbtimes ;
-    gp_Trsf theTransformation ;
-    TopoDS_Compound compound;
-    BRep_Builder B;
-    B.MakeCompound( compound );
-    
-    for ( i = 0; i < nbtimes; i++ ) {
-      theTransformation.SetRotation(AX1, i*angle*PI180) ;
-      BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-      B.Add( compound, myBRepTransformation.Shape() );
-    }
-    tds = compound ;
-    result = CreateObject(tds) ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeMultiRotation1D", SALOME::BAD_PARAM);
-  }
-  
-  if( CORBA::is_nil(result) ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiRotation1D aborted : null result", SALOME::BAD_PARAM);
-  }
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeMultiRotation2D()
-// purpose  : Multi-Rotate a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeMultiRotation2D( GEOM::GEOM_Shape_ptr myShape,
-                                               const GEOM::DirStruct& dir,
-                                               const GEOM::PointStruct& loc,
-                                               CORBA::Double ang,
-                                               CORBA::Short nbtimes1,
-                                               CORBA::Double step,
-                                               CORBA::Short nbtimes2 )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiRotation2D aborted : null shape", SALOME::BAD_PARAM);
-  }
-
-  try {
-   
-    int i, j ;
-    double DX, DY, DZ ;
-    gp_Pnt P(loc.x, loc.y, loc.z) ;
-    gp_Dir D(dir.PS.x, dir.PS.y, dir.PS.z) ;
-    gp_Ax1 AX1(P, D) ;
-    gp_Trsf theTransformation1 ;
-    gp_Trsf theTransformation2 ;
-    gp_Pnt P1 ;
-    GProp_GProps System ;
-    
-    if ( aShape.ShapeType() == TopAbs_VERTEX) {
-      P1 = BRep_Tool::Pnt(TopoDS::Vertex( aShape ));
-    } 
-    else if ( aShape.ShapeType() == TopAbs_EDGE || aShape.ShapeType() == TopAbs_WIRE ) {
-      BRepGProp::LinearProperties(aShape, System);
-      P1 = System.CentreOfMass() ;
-    }
-    else if ( aShape.ShapeType() == TopAbs_FACE || aShape.ShapeType() == TopAbs_SHELL ) {
-      BRepGProp::SurfaceProperties(aShape, System);
-      P1 = System.CentreOfMass() ;
-    }
-    else {
-      BRepGProp::VolumeProperties(aShape, System);
-      P1 = System.CentreOfMass() ;
-    }
-    
-    Handle(Geom_Line) Line = new Geom_Line(AX1);
-    gp_Pnt P2 = GeomAPI_ProjectPointOnCurve( P1, Line ) ;
-    
-    if ( P1.IsEqual(P2, Precision::Confusion() ) )
-      THROW_SALOME_CORBA_EXCEPTION("Points are confused", SALOME::BAD_PARAM);
-    
-    gp_Vec Vec(P1.X()-P2.X(), P1.Y()-P2.Y(), P1.Z()-P2.Z()) ;
-    Vec.Normalize();
-    
-    gp_Vec myVec ;
-    TopoDS_Compound compound;
-    BRep_Builder B;
-    B.MakeCompound( compound );
-    
-    for ( i = 0; i < nbtimes2; i++ ) {
-      for ( j = 0; j < nbtimes1; j++ ) {
-       DX = i * step * Vec.X() ;
-       DY = i * step * Vec.Y() ;
-       DZ = i * step * Vec.Z() ;
-       myVec.SetCoord( DX, DY, DZ ) ;
-       theTransformation1.SetTranslation(myVec) ;
-       theTransformation2.SetRotation(AX1, j*ang*PI180) ;
-       BRepBuilderAPI_Transform myBRepTransformation1(aShape, theTransformation1, Standard_False) ;
-       BRepBuilderAPI_Transform myBRepTransformation2(myBRepTransformation1.Shape(), theTransformation2, Standard_False) ;
-       B.Add( compound, myBRepTransformation2.Shape() );
-      }
-    }
-    tds = compound ;
-    result = CreateObject(tds) ;  
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeMultiRotation2D", SALOME::BAD_PARAM);
-  }
-  
-  if( CORBA::is_nil(result) ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeMultiRotation2D aborted : null result", SALOME::BAD_PARAM);
-  }
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeCopy()
-// purpose  : Copy a 3D shape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeCopy( GEOM::GEOM_Shape_ptr Shape)
-  throw (SALOME::SALOME_Exception) 
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(Shape) ;
-  if(aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Copy aborted : null shape during operation", SALOME::BAD_PARAM);
-  }  
-  BRepBuilderAPI_Copy Copy(aShape);
-  if( Copy.IsDone() ) {   
-    tds = Copy.Shape();
-    result = CreateObject(tds);    
-    InsertInLabelOneArgument(aShape, Shape, tds, result, myCurrentOCAFDoc) ;
-  }
-
-  return result;
-}
-
-
-//=================================================================================
-// function : MakeMirrorByPlane()
-// purpose  : build a shape by symmetry of 'myShape' with 'shapePlane' in argument
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeMirrorByPlane(GEOM::GEOM_Shape_ptr myShape,
-                                            GEOM::GEOM_Shape_ptr shapePlane) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ; 
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape      = GetTopoShape(myShape) ;
-  TopoDS_Shape aShapePlane = GetTopoShape(shapePlane) ;
-  if( aShape.IsNull()  || aShapePlane.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Mirror aborted : null shape argument", SALOME::BAD_PARAM);
-  }  
-  
-  try {
-    Handle(Geom_Surface) surf = BRep_Tool::Surface(TopoDS::Face(aShapePlane)) ;        
-    Handle(Geom_Plane) myPlane = Handle(Geom_Plane)::DownCast(surf) ;
-    const gp_Ax3 pos = myPlane->Position() ;
-    const gp_Pnt loc = pos.Location() ;  /* location of the plane */
-    const gp_Dir dir = pos.Direction() ; /* Main direction of the plane (Z axis) */  
-    
-    /* plane used for mirroring */
-    gp_Ax2 pln(loc, dir) ;
-    gp_Trsf theTransformation ;
-    theTransformation.SetMirror(pln) ;
-    BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-
-    tds = myBRepTransformation.Shape() ;
-    if(tds.IsNull() ) {
-      THROW_SALOME_CORBA_EXCEPTION("Mirror aborted", SALOME::BAD_PARAM);
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeMirrorByPlane", SALOME::BAD_PARAM);    
-  }
-  
-  result = CreateObject(tds) ;
-
-  /* Insert arguments in ocaf */
-  GEOM::GEOM_Gen::ListOfIOR_var ListShapes = new GEOM::GEOM_Gen::ListOfIOR;
-  ListShapes->length(2);
-  ListShapes[0] = GetStringFromIOR(GEOM::GEOM_Shape::_duplicate(myShape)) ;
-  ListShapes[1] = GetStringFromIOR(GEOM::GEOM_Shape::_duplicate(shapePlane)) ;
-  InsertInLabelMoreArguments(tds, result, ListShapes, myCurrentOCAFDoc) ;
-  return result ;
-}
-
-
-
-//=================================================================================
-// function : MakeRotation()
-// purpose  : Rotation of a 3D shape around an axis
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeRotation( GEOM::GEOM_Shape_ptr myShape,
-                                        const GEOM::AxisStruct& axis,
-                                        CORBA::Double angle)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Rotation aborted : null shape during operation", SALOME::BAD_PARAM);
-  }
-  
-  try {
-    gp_Pnt P(axis.x, axis.y, axis.z) ;
-    gp_Dir D(axis.vx, axis.vy, axis.vz) ;
-    gp_Ax1 AX(P, D) ;
-    
-    gp_Trsf theTransformation ;
-    theTransformation.SetRotation(AX, angle) ;
-    BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-    tds = myBRepTransformation.Shape() ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeRotation", SALOME::BAD_PARAM);
-  }
-  
-  if ( !tds.IsNull() ) {
-    result = CreateObject(tds) ;
-    InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeScaleTransform()
-// purpose  : Make a shape multipling another by a scale factor
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeScaleTransform(GEOM::GEOM_Shape_ptr myShape,
-                                             const GEOM::PointStruct& theCenterOfScale,
-                                             CORBA::Double factor)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Scale aborted : null shape during operation", SALOME::BAD_PARAM);
-  }
-  
-  try {
-    gp_Pnt Pcenter(theCenterOfScale.x, theCenterOfScale.y, theCenterOfScale.z) ;
-    gp_Trsf theTransformation ;  
-    theTransformation.SetScale(Pcenter, factor) ;
-    BRepBuilderAPI_Transform myBRepTransformation(aShape, theTransformation, Standard_False) ;
-    tds = myBRepTransformation.Shape() ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeScaleTransform", SALOME::BAD_PARAM);
-  }
-  
-  if ( !tds.IsNull() ) {
-    result = CreateObject(tds) ; 
-    InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeCompound()
-// purpose  : Make a compound from a list containing one or more shapes
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeCompound( const GEOM::GEOM_Gen::ListOfIOR& ListShapes )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Compound C;
-  BRep_Builder aBuilder;
-  aBuilder.MakeCompound(C) ;
-
-  for ( unsigned int i = 0; i < ListShapes.length(); i++) {
-    GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[i] );    
-    TopoDS_Shape Shape = GetTopoShape(aShape) ;
-    if( Shape.IsNull() ) {
-       THROW_SALOME_CORBA_EXCEPTION("Compound aborted : null shape during operation", SALOME::BAD_PARAM);
-    }
-    aBuilder.Add(C, Shape) ;
-  }
-  
-  if ( C.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Null result : Compound operation aborted", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(C) ;
-    InsertInLabelMoreArguments(C, result, ListShapes, myCurrentOCAFDoc) ;
-  }
-  return result;
-}
-
-
-
-//================================================================================
-// function : MakeEdge()
-// purpose  : Make a linear edge with 2 points
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeEdge(const GEOM::PointStruct& pstruct1,
-                                   const GEOM::PointStruct& pstruct2)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result  ;
-  TopoDS_Shape tds ;
-  
-  try {
-    gp_Pnt P1(pstruct1.x, pstruct1.y, pstruct1.z);
-    gp_Pnt P2(pstruct2.x, pstruct2.y, pstruct2.z) ;  
-    tds = BRepBuilderAPI_MakeEdge(P1, P2).Shape();
-    if ( tds.IsNull() )
-      THROW_SALOME_CORBA_EXCEPTION("MakeEdge aborted : null result", SALOME::BAD_PARAM);
-  }
-  catch (Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in MakeEdge", SALOME::BAD_PARAM);
-  }
-  
-  result = CreateObject(tds) ;
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry);
-  return result ;  
-}
-
-
-
-//=================================================================================
-// function : MakeWire()
-// purpose  : Make a wire from a list containing one or more edges or wires that can
-// be connected
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeWire( const GEOM::GEOM_Gen::ListOfIOR& ListShapes )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  BRepBuilderAPI_MakeWire MW ;
-  TopoDS_Shape tds, Shape ; 
-  
-  try {
-    for ( unsigned int i = 0; i < ListShapes.length(); i++) {
-      GEOM::GEOM_Shape_var aShape = GetIORFromString( ListShapes[i] );    
-      Shape = GetTopoShape(aShape) ;
-      if( Shape.IsNull() ) {
-       THROW_SALOME_CORBA_EXCEPTION("MakeWire aborted : null shape during operation", SALOME::BAD_PARAM);
-      }
-      if( Shape.ShapeType() == TopAbs_EDGE )
-       MW.Add( TopoDS::Edge(Shape) ) ;
-      if (Shape.ShapeType() == TopAbs_WIRE ) 
-       MW.Add( TopoDS::Wire(Shape) ) ;
-    }    
-    tds = MW  ;
-
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeWire", SALOME::BAD_PARAM);
-  }
-  
-  if( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Wire operation aborted : null result", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;
-    InsertInLabelMoreArguments(tds, result, ListShapes, myCurrentOCAFDoc) ;   
-  }
-  return result;
-}
-
-
-
-//=================================================================================
-// function : MakeRevolution()
-// purpose  : 
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeRevolution(GEOM::GEOM_Shape_ptr myShape,
-                                         const GEOM::AxisStruct& axis,
-                                         double angle)
-  throw (SALOME::SALOME_Exception)
-{ 
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Revolution aborted : null shape", SALOME::BAD_PARAM);
-  }
-  try {
-    gp_Pnt P(axis.x, axis.y, axis.z) ;
-    gp_Dir D(axis.vx, axis.vy, axis.vz);
-    gp_Ax1 AX(P,D);
-    tds = BRepPrimAPI_MakeRevol(aShape, AX, angle);
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeRevolution", SALOME::BAD_PARAM);
-  }
-  
-  if( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Revolution aborted", SALOME::BAD_PARAM);
-  }
-  result = CreateObject(tds) ;
-  InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  return result ;     
-}
-
-
-//=================================================================================
-// function : MakePipe()
-// purpose  : Create a shape by sweeping a baseShape along a pathShape
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePipe( GEOM::GEOM_Shape_ptr pathShape,
-                                    GEOM::GEOM_Shape_ptr baseShape )
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Wire aWire ;
-  TopoDS_Shape pathTds = GetTopoShape(pathShape) ;
-  TopoDS_Shape baseTds = GetTopoShape(baseShape) ;
-
-  if( baseTds.IsNull() || pathTds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakePipe aborted : null shape argument", SALOME::BAD_PARAM);
-  }
-
-  if( pathTds.ShapeType() == TopAbs_WIRE ) {
-    aWire = TopoDS::Wire(pathTds) ;
-  }
-  else {
-    if ( pathTds.ShapeType() == TopAbs_EDGE ) {
-      TopoDS_Edge aEdge = TopoDS::Edge(pathTds) ;
-      aWire = BRepBuilderAPI_MakeWire(aEdge);
-    }
-    else {
-      THROW_SALOME_CORBA_EXCEPTION("MakePipe aborted : bad shape type", SALOME::BAD_PARAM);
-    }
-  }
-
-  try {
-    tds = BRepOffsetAPI_MakePipe(aWire, baseTds) ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakePipe", SALOME::BAD_PARAM);
-  }
-  
-  if (  !BRepAlgoAPI::IsValid(tds) ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakePipe aborted : non valid shape result", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;
-
-    /* Insert arguments in ocaf */
-    GEOM::GEOM_Gen::ListOfIOR_var ListShapes = new GEOM::GEOM_Gen::ListOfIOR;
-    ListShapes->length(2);
-    ListShapes[0] = GetStringFromIOR(GEOM::GEOM_Shape::_duplicate(pathShape)) ;
-    ListShapes[1] = GetStringFromIOR(GEOM::GEOM_Shape::_duplicate(baseShape)) ;    
-    InsertInLabelMoreArguments(tds, result, ListShapes, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakePrism()
-// purpose  : uses myShape as base and the vector P1 to P2
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePrism( GEOM::GEOM_Shape_ptr myShape,
-                                          const GEOM::PointStruct& P1,
-                                          const GEOM::PointStruct& P2 )
-  throw (SALOME::SALOME_Exception)
-{              
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(myShape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Prism aborted : null shape operation", SALOME::BAD_PARAM);
-  }
-  
-  try {
-    gp_Vec Vector (P2.x - P1.x, P2.y - P1.y, P2.z - P1.z) ;
-    tds = BRepPrimAPI_MakePrism(aShape, Vector, Standard_False).Shape() ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakePipe", SALOME::BAD_PARAM);
-  }
-  
-  if ( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Prism aborted", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;     
-    InsertInLabelOneArgument(aShape, myShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ;
-}
-
-
-//=================================================================================
-// function : MakeCDG()
-// purpose  : Create a CDG topology.
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeCDG(GEOM::GEOM_Shape_ptr aShape) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape shape = GetTopoShape(aShape) ;
-  GProp_GProps System;
-  gp_Pnt myCenterMass ;
-
-  if( shape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakeCDG aborted : null shape argument", SALOME::BAD_PARAM);
-  }
-  
-  try {
-    if ( shape.ShapeType() == TopAbs_VERTEX) {
-      myCenterMass = BRep_Tool::Pnt(TopoDS::Vertex( shape ));
-    } 
-    else if ( shape.ShapeType() == TopAbs_EDGE || shape.ShapeType() == TopAbs_WIRE ) {
-      BRepGProp::LinearProperties(shape, System);
-      myCenterMass = System.CentreOfMass() ;
-    }
-    else if ( shape.ShapeType() == TopAbs_FACE || shape.ShapeType() == TopAbs_SHELL ) {
-      BRepGProp::SurfaceProperties(shape, System);
-      myCenterMass = System.CentreOfMass() ;
-    }
-    else {
-      BRepGProp::VolumeProperties(shape, System);
-      myCenterMass = System.CentreOfMass() ;
-    }
-
-    tds = BRepBuilderAPI_MakeVertex(myCenterMass).Shape() ;
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeCDG", SALOME::BAD_PARAM);
-  }
-  
-  if ( tds.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Make CDG aborted : null shape result", SALOME::BAD_PARAM);
-  }
-  else {
-    result = CreateObject(tds) ;     
-    InsertInLabelOneArgument(shape, aShape, tds, result, myCurrentOCAFDoc) ;
-  }
-  return result ; 
-}
-
-
-//=================================================================================
-// function : Archimede()
-// purpose  :
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::Archimede(GEOM::GEOM_Shape_ptr aShape,
-                                    CORBA::Double aWeight,
-                                    CORBA::Double aWaterDensity,
-                                    CORBA::Double aMeshingDeflection)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-
-  double cste = -1;
-  if (aWaterDensity != 0.)
-    cste = aWeight/aWaterDensity;
-  else
-    THROW_SALOME_CORBA_EXCEPTION("Water density is null", SALOME::BAD_PARAM);
-
-  TopoDS_Shape shape = GetTopoShape(aShape) ;
-  if( shape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Shape is null", SALOME::BAD_PARAM);
-  }
-
-  gp_Dir direct(0.0,0.0,1.0);
-  gp_Pnt PosPlan(0.0,0.0,0.0);
-  Geom_Plane PP (PosPlan,direct);
-  Handle(Geom_Geometry) G = PP.Copy();
-  Handle(Geom_Plane) P = Handle(Geom_Plane)::DownCast(G);
-
-  gp_Dir Zdirection(0.0,0.0,1.0);
-  VolumeSection VOL( shape, aMeshingDeflection);
-  VOL.SetPlane(P);
-  Handle (Geom_RectangularTrimmedSurface) SurfaceTrimmee;
-  
-  if(Zdirection.IsEqual(direct,Precision::Angular()) == Standard_False) { 
-    VOL.MakeRotation(direct);
-  }
-  
-  VOL.CenterOfGravity();
-  SurfaceTrimmee = VOL.TrimSurf();
-  Standard_Real Cote = VOL.Archimede( cste, aMeshingDeflection );
-  
-  if ( Cote == -1 ) {
-    double Zmin,Zmax;
-    VOL.getZ(Zmin,Zmax);
-    double volume = VOL.CalculateVolume( Zmax ) * aWaterDensity;
-
-    char msg[100]="";  
-    sprintf(msg, "shape sinks to the bottom : Weigth max = %.1f", volume);
-
-    THROW_SALOME_CORBA_EXCEPTION(msg, SALOME::BAD_PARAM);
-  }
-  
-  SurfaceTrimmee=VOL.AjustePlan(SurfaceTrimmee,Cote,PosPlan);
-  if(Zdirection.IsEqual(direct,Precision::Angular()) == Standard_False) { 
-    SurfaceTrimmee=VOL.InvMakeRotation(direct,SurfaceTrimmee);
-  }
-  
-  Standard_Real u1,u2,v1,v2;
-  SurfaceTrimmee->Bounds(u1,u2,v1,v2);
-  TopoDS_Face tirant = BRepBuilderAPI_MakeFace(SurfaceTrimmee, u1, u2, v1, v2);
-  
-  if (tirant.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Result is null", SALOME::BAD_PARAM);
-  }
-
-  result = CreateObject(tirant);
-  InsertInLabelOneArgument(shape, aShape, tirant, result, myCurrentOCAFDoc) ;
-
-  return result;  
-}
-
-
-//================================================================================
-// function : MakeFillet()
-// purpose  : Create a cylinder topology
-//================================================================================
-GEOM::GEOM_Shape_ptr  GEOM_Gen_i::MakeFillet( GEOM::GEOM_Shape_ptr shape,
-                                             CORBA::Double radius,
-                                             CORBA::Short ShapeType,
-                                             const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID ) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-
-  const TopoDS_Shape aShape = GetTopoShape(shape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Shape is null", SALOME::BAD_PARAM);
-  }
-
-  BRepFilletAPI_MakeFillet fill(aShape);
-
-  try {
-    /* case all */
-    if(ListOfID.length() == 0) {
-      TopExp_Explorer Exp ( aShape, TopAbs_EDGE );
-      for (Exp; Exp.More(); Exp.Next()) {
-       TopoDS_Edge E =TopoDS::Edge(Exp.Current());
-       fill.Add(E);
-      }
-      for (int i = 1;i<=fill.NbContours();i++) {
-       fill.SetRadius(radius,i);
-      }
-      tds = fill.Shape();
-      
-    } else {
-
-      /* case selection */               
-      for ( unsigned int ind = 0; ind < ListOfID.length(); ind++ ) {
-       TopoDS_Shape ss ;
-       if( GetShapeFromIndex( aShape, (TopAbs_ShapeEnum)ShapeType, ListOfID[ind], ss ) ) {
-         TopoDS_Edge E = TopoDS::Edge(ss) ;
-         fill.Add( E );
-       }
-      }
-      for (int i = 1;i<=fill.NbContours();i++) {
-       fill.SetRadius(radius,i);
-      }
-      tds = fill.Shape();
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeFillet", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Fillet aborted", SALOME::BAD_PARAM);
-  } 
-  result = CreateObject(tds);
-  InsertInLabelOneArgument(aShape, shape, tds, result, myCurrentOCAFDoc) ;
-
-  return result ;  
-}
-
-
-//================================================================================
-// function : MakeChamfer
-// purpose  : Create a Chamfer topology
-//================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakeChamfer( GEOM::GEOM_Shape_ptr shape,
-                                             CORBA::Double d1,
-                                             CORBA::Double d2,
-                                             CORBA::Short ShapeType,
-                                             const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID ) 
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result;
-  TopoDS_Shape tds ;
-
-  const TopoDS_Shape aShape = GetTopoShape(shape) ;
-  if( aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Shape is null", SALOME::BAD_PARAM);
-  }
-  
-  BRepFilletAPI_MakeChamfer MC(aShape);
-
-  try {
-    /* case all */
-    TopTools_IndexedDataMapOfShapeListOfShape M;
-    TopExp::MapShapesAndAncestors(aShape,TopAbs_EDGE,TopAbs_FACE,M);
-    if(ListOfID.length() == 0) {
-      for (int i = 1;i<=M.Extent();i++) {
-       TopoDS_Edge E = TopoDS::Edge(M.FindKey(i));
-       TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First());
-       if (!BRepTools::IsReallyClosed(E, F) && !BRep_Tool::Degenerated(E))
-         MC.Add(d1,d2,E,F);
-      }
-      tds = MC.Shape();
-
-    } else {
-
-      /* case selection */  
-      for ( unsigned int ind = 0; ind < ListOfID.length(); ind++ ) {
-       TopoDS_Shape ss ;
-       if( GetShapeFromIndex( aShape, (TopAbs_ShapeEnum)ShapeType, ListOfID[ind], ss ) ) {
-         TopoDS_Edge E = TopoDS::Edge( ss ) ;
-         TopoDS_Face F = TopoDS::Face(M.FindFromKey(E).First());
-         if (!BRepTools::IsReallyClosed(E, F) && !BRep_Tool::Degenerated(E))
-           MC.Add(d1,d2,E,F);
-       }
-      }
-      tds = MC.Shape();
-    }
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeChamfer", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Chamfer aborted", SALOME::BAD_PARAM);
-  } 
-  result = CreateObject(tds);
-  InsertInLabelOneArgument(aShape, shape, tds, result, myCurrentOCAFDoc) ;
-
-  return result ;
-}
-
-//=================================================================================
-// function : CheckShape()
-// purpose  :
-//=================================================================================
-CORBA::Boolean GEOM_Gen_i::CheckShape(GEOM::GEOM_Shape_ptr shape) 
-  throw (SALOME::SALOME_Exception)
-{
-  TopoDS_Shape S = GetTopoShape(shape) ;
-  if( S.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("Shape is null", SALOME::BAD_PARAM);
-  }
-
-  BRepCheck_Analyzer ana(S,false);
-  if (ana.IsValid()) 
-    return 1;
-
-  return 0;
-}
-
-//=================================================================================
-// function : MakePlacedBox()
-// purpose  :
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePlacedBox(CORBA::Double x1,  CORBA::Double y1,  CORBA::Double z1,
-                                        CORBA::Double delta1, CORBA::Double delta2, CORBA::Double delta3)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-
-  CORBA::Double x2, y2, z2 ;
-
-  try {
-    x2 = x1 + delta1 ;
-    y2 = y1 + delta2 ;
-    z2 = z1 + delta3 ;
-    
-    gp_Pnt P1(x1,y1,z1);
-    gp_Pnt P2(x2,y2,z2);
-    
-    tds = BRepPrimAPI_MakeBox(P1,P2).Shape();
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakeBox", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make Box aborted : null shape", SALOME::BAD_PARAM);
-  } 
-  
-  result = CreateObject(tds);
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry) ;
-
-  return result;  
-}
-
-//=================================================================================
-// function : MakePanel()
-// purpose  :
-//=================================================================================
-GEOM::GEOM_Shape_ptr GEOM_Gen_i::MakePanel(GEOM::GEOM_Shape_ptr shape,
-                                    CORBA::Short directiontype,
-                                    CORBA::Double delta)
-  throw (SALOME::SALOME_Exception)
-{
-  GEOM::GEOM_Shape_var result ;
-  TopoDS_Shape tds ;
-  TopoDS_Shape aShape = GetTopoShape(shape) ;
-  Bnd_Box B ;
-  Standard_Real axmin,aymin,azmin,axmax,aymax,azmax ;
-  GEOM::PointStruct pstruct1, pstruct2, pstruct3, pstruct4 ;
-
-  if(aShape.IsNull() ) {
-    THROW_SALOME_CORBA_EXCEPTION("MakePanel aborted : null shape during operation", SALOME::BAD_PARAM);
-  }  
-
-  try {
-    BRepBndLib::Add(aShape,B);
-    B.Enlarge(10.);
-    B.Get(axmin,aymin,azmin,axmax,aymax,azmax);
-    
-    switch (directiontype)
-      {
-      case 1 :   /* X */
-       pstruct1 = MakePointStruct( delta, aymin, azmin ) ;
-       pstruct2 = MakePointStruct( delta, aymin, azmax ) ;
-       pstruct3 = MakePointStruct( delta, aymax, azmax ) ;
-       pstruct4 = MakePointStruct( delta, aymax, azmin ) ;
-       break ;
-      case 2 :   /* Y */
-       pstruct1 = MakePointStruct( axmin, delta, azmin ) ;
-       pstruct2 = MakePointStruct( axmin, delta, azmax ) ;
-       pstruct3 = MakePointStruct( axmax, delta, azmax ) ;
-       pstruct4 = MakePointStruct( axmax, delta, azmin ) ;
-       break ;
-      case 3 :   /* Z */
-       pstruct1 = MakePointStruct( axmin, aymin, delta ) ;
-       pstruct2 = MakePointStruct( axmin, aymax, delta ) ;
-       pstruct3 = MakePointStruct( axmax, aymax, delta ) ;
-       pstruct4 = MakePointStruct( axmax, aymin, delta ) ;
-       break ;
-      default :
-       return result ;
-      }
-    
-    GEOM::GEOM_Shape_ptr Edge1 = MakeEdge(pstruct1, pstruct2);
-    GEOM::GEOM_Shape_ptr Edge2 = MakeEdge(pstruct2, pstruct3);
-    GEOM::GEOM_Shape_ptr Edge3 = MakeEdge(pstruct3, pstruct4);
-    GEOM::GEOM_Shape_ptr Edge4 = MakeEdge(pstruct4, pstruct1);
-    
-    GEOM::GEOM_Gen::ListOfIOR_var aList = new GEOM::GEOM_Gen::ListOfIOR;
-    aList->length(4);
-    aList[0]=strdup(Edge1->Name());
-    aList[1]=strdup(Edge2->Name());
-    aList[2]=strdup(Edge3->Name());
-    aList[3]=strdup(Edge4->Name());
-    
-    GEOM::GEOM_Shape_ptr aWire = MakeWire( aList );
-    GEOM::GEOM_Shape_ptr aFace = MakeFace( aWire, true ) ;
-    tds = GetTopoShape(aFace);
-    
-  }
-  catch(Standard_Failure) {
-    THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::MakePanel", SALOME::BAD_PARAM);
-  }
-  
-  if (tds.IsNull()) {
-    THROW_SALOME_CORBA_EXCEPTION("Make PanelsPartition aborted : null shape", SALOME::BAD_PARAM);
-  } 
-  
-  result = CreateObject(tds); 
-  const char *entry = InsertInLabel(tds, result->Name(), myCurrentOCAFDoc) ;
-  result->ShapeId(entry) ;
-  
-  return result;
-}
-
-
-void GEOM_Gen_i::ExportIGES(const char* filename,GEOM::GEOM_Shape_ptr theShape) 
-  throw (SALOME::SALOME_Exception)
-{
-  if (theShape->_is_nil()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export IGES aborted", SALOME::BAD_PARAM);
-    } 
-  TopoDS_Shape tds = GetTopoShape(theShape);
-  if (tds.IsNull()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export IGES aborted", SALOME::BAD_PARAM);
-    } 
-  try 
-    {
-      //VRV: OCC 4.0 migration
-      IGESControl_Controller::Init();
-      IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"),
-                                  Interface_Static::IVal("XSTEP.iges.writebrep.mode"));
-      //VRV: OCC 4.0 migration
-       
-      ICW.AddShape (tds);
-      ICW.ComputeModel();
-      char * aname = strdup(filename);
-      Standard_Boolean result = ICW.Write( aname );
-      free(aname);
-    }
-  catch(Standard_Failure) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ExportIGES", SALOME::BAD_PARAM);
-    }
-}
-
-void GEOM_Gen_i::ExportBREP(const char* filename,GEOM::GEOM_Shape_ptr theShape)
-  throw (SALOME::SALOME_Exception)
-{
-  if (theShape->_is_nil()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export BRep aborted", SALOME::BAD_PARAM);
-    } 
-  TopoDS_Shape tds = GetTopoShape(theShape);
-  if (tds.IsNull()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export BRep aborted", SALOME::BAD_PARAM);
-    } 
-  try 
-    {
-      char * aname = strdup(filename);
-      Standard_Boolean result = BRepTools::Write(tds,aname);
-      free(aname);
-    }
-  catch(Standard_Failure) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ExportBREP", SALOME::BAD_PARAM);
-    }
-}
-
-void GEOM_Gen_i::ExportSTEP(const char* filename,GEOM::GEOM_Shape_ptr theShape) 
-  throw (SALOME::SALOME_Exception)
-{
-  if (theShape->_is_nil()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export STEP aborted", SALOME::BAD_PARAM);
-    } 
-  TopoDS_Shape tds = GetTopoShape(theShape);
-  if (tds.IsNull()) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Export STEP aborted", SALOME::BAD_PARAM);
-    } 
-  try 
-    {
-      IFSelect_ReturnStatus status ;
-      //VRV: OCC 4.0 migration
-      STEPControl_Writer aWriter;
-      status = aWriter.Transfer( tds, STEPControl_ManifoldSolidBrep ) ;
-      //VRV: OCC 4.0 migration
-      if ( status == IFSelect_RetDone ) 
-       {
-         char * aname = strdup(filename);
-         status = aWriter.Write( aname ) ;
-         free(aname);
-       }
-    }
-  catch(Standard_Failure) 
-    {
-      THROW_SALOME_CORBA_EXCEPTION("Exception catched in GEOM_Gen_i::ExportBREP", SALOME::BAD_PARAM);
-    }
-}
-
-
-//=====================================================================================
-// EXPORTED METHODS
-//=====================================================================================
-extern "C"
-{
-  PortableServer::ObjectId * GeometryEngine_factory(CORBA::ORB_ptr orb,
-                                                   PortableServer::POA_ptr poa, 
-                                                   PortableServer::ObjectId * contId,
-                                                   const char *instanceName, 
-                                                   const char * interfaceName)
-  {
-MESSAGE("mygeom")
-   GEOM_Gen_i * myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName);
-MESSAGE("mygeom")
-   myGEOM_Gen_i->register_name("/myGEOM_Gen"); // NRI : 11/07/2002 : Add for Supervision example 
-MESSAGE("mygeom")
-   return myGEOM_Gen_i->getId() ;
-  }
-}
-
diff --git a/GEOM/GEOM_Gen_i.hh b/GEOM/GEOM_Gen_i.hh
deleted file mode 100644 (file)
index 4ac011b..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-//  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : GEOM_GEN_i.h file
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$ 
-
-#ifndef __GEOM_GEN_I_H__
-#define __GEOM_GEN_I_H__
-
-// standard C++ headers
-#include <TDocStd_Document.hxx>
-#include "GEOMDS_DataMapOfIntegerTransient.hxx"
-#include "GEOMDS_Application.hxx"
-#include <TopTools_MapOfShape.hxx>
-#include <TopTools_SequenceOfShape.hxx>
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <TopAbs_ShapeEnum.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Face.hxx>
-
-// IDL headers
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(GEOM_Gen)
-#include CORBA_SERVER_HEADER(GEOM_Shape)
-#include CORBA_SERVER_HEADER(SALOMEDS)
-
-#include "SALOME_Component_i.hxx"
-#include "GEOM_Shape_i.hh"
-
-#include "SALOME_NamingService.hxx"
-#include <iostream.h>
-
-#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
-
-
-//=====================================================================
-// GEOM_Gen_i : class definition
-//=====================================================================
-class GEOM_Gen_i: public POA_GEOM::GEOM_Gen,
-  public Engines_Component_i
-{
- private:
-
-  SALOME_NamingService * name_service;
-  char * _name;
-  Handle(GEOMDS_Application)        myOCAFApp;          /* geom/OCAF Application             */
-  Handle(TDocStd_Document)          myCurrentOCAFDoc;   /* Current geom/OCAF Document        */
-  GEOMDS_DataMapOfIntegerTransient  myStudyIDToDoc;     /* Map to bind a Study to a Document */
-
-  int myStudyID;
-
-  GEOM::GEOM_Shape_ptr CreateObject(TopoDS_Shape& tds) ;
-
-  GEOM::GEOM_Shape_ptr CreateSubObject(const TopoDS_Shape& SubShape,
-                                      const GEOM::GEOM_Shape_ptr MainShape,
-                                      const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID);
-  // Create and insert(!) SubShape of MainShape
-
-  GEOM::GEOM_Shape_ptr GEOM_Gen_i::SubShapesOne( GEOM::GEOM_Shape_ptr shape, 
-                                               const TopAbs_ShapeEnum ShapeType, 
-                                               const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID,
-                                               const Standard_Boolean sorted=Standard_False)
-    throw (SALOME::SALOME_Exception);
-  // return all listed subshapes as one shape
-  
-  GEOM::GEOM_Gen::ListOfGeomShapes* SubShapesAll(GEOM::GEOM_Shape_ptr shape,
-                                                const TopAbs_ShapeEnum type,
-                                                const Standard_Boolean sorted=Standard_False)
-    throw (SALOME::SALOME_Exception);
-  // return all subshapes by type
-
-  TopoDS_Face FindSameFace(const TopoDS_Shape& aShape, 
-                          const TopoDS_Face& F,
-                          double tol3d);
-  TopoDS_Edge FindSameEdge(const TopoDS_Face& newFace, 
-                          TopoDS_Edge& Eold,
-                          double tol3d);
-
- public:
-  //-----------------------------------------------------------------------//
-  // Constructor / Destructor                                              //
-  //-----------------------------------------------------------------------//
-  // constructor to be called for servant creation. 
-  GEOM_Gen_i();
-  GEOM_Gen_i(CORBA::ORB_ptr orb,
-            PortableServer::POA_ptr poa,
-            PortableServer::ObjectId * contId, 
-            const char *instanceName, 
-            const char *interfaceName);
-
-  // destructor, doing nothing (for now)
-  virtual ~GEOM_Gen_i();
-
-  // generic method to be put in a super class
-  void register_name(char * name);
-
-  //-----------------------------------------------------------------------//
-  // Studies Management                                                    //
-  //-----------------------------------------------------------------------//
-  void GetCurrentStudy (CORBA::Long StudyID);
-
-  CORBA::Short NbLabels();
-
-  // inherited methods from SALOMEDS::Driver
-  SALOMEDS::TMPFile* Save(SALOMEDS::SComponent_ptr theComponent,
-                         const char* theURL,
-                         bool isMultiFile);
-
-  SALOMEDS::TMPFile* SaveASCII(SALOMEDS::SComponent_ptr theComponent,
-                              const char* theURL,
-                              bool isMultiFile);
-  
-  CORBA::Boolean Load(SALOMEDS::SComponent_ptr theComponent,
-                     const SALOMEDS::TMPFile& theStream,
-                     const char* theURL,
-                     bool isMultiFile);
-
-  CORBA::Boolean LoadASCII(SALOMEDS::SComponent_ptr theComponent,
-                          const SALOMEDS::TMPFile& theStream,
-                          const char* theURL,
-                          bool isMultiFile);
-
-  void Close(SALOMEDS::SComponent_ptr theComponent);
-  char* ComponentDataType();
-
-
-  char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
-                              const char* IORString,
-                              CORBA::Boolean isMultiFile,
-                              CORBA::Boolean isASCII);
-  char* LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
-                              const char* aLocalPersistentID,
-                              CORBA::Boolean isMultiFile,
-                              CORBA::Boolean isASCII);
-
-  bool CanPublishInStudy(CORBA::Object_ptr theIOR);
-  SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::Study_ptr theStudy,
-                                      SALOMEDS::SObject_ptr theSObject,
-                                      CORBA::Object_ptr theObject,
-                                      const char* theName) throw (SALOME::SALOME_Exception) ;
-
-  CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
-  SALOMEDS::TMPFile* CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID);
-  CORBA::Boolean CanPaste(const char* theComponentName, CORBA::Long theObjectID);
-  SALOMEDS::SObject_ptr PasteInto(const SALOMEDS::TMPFile& theStream,
-                                 CORBA::Long theObjectID,
-                                 SALOMEDS::SObject_ptr theObject);
-
-  //-----------------------------------------------------------------------//
-  // Shapes Management                                                     //
-  //-----------------------------------------------------------------------//
-  const char* InsertInLabel(TopoDS_Shape S,
-                           const char *nameIor,
-                           Handle(TDocStd_Document) OCAFDoc) ;
-
-  const char* InsertInLabelDependentShape(TopoDS_Shape S,
-                                         const char *nameIor,
-                                         GEOM::GEOM_Shape_ptr mainshape_ptr,
-                                          Handle(TDocStd_Document) OCAFDoc) ;
-  
-  void InsertInLabelOneArgument(TopoDS_Shape main_topo,
-                               GEOM::GEOM_Shape_ptr shape_ptr,
-                               TopoDS_Shape result_topo,                               
-                               GEOM::GEOM_Shape_ptr result,    
-                               Handle(TDocStd_Document) OCAFDoc) ;
-
-  void InsertInLabelMoreArguments(TopoDS_Shape main_topo,
-                                 GEOM::GEOM_Shape_ptr result,
-                                 const GEOM::GEOM_Gen::ListOfIOR& ListShapes,                          
-                                 Handle(TDocStd_Document) OCAFDoc) ;
-
-  // Methods used by SuppressFaces
-  int SuppressFacesGlue( const TopoDS_Shape& S,
-                       const TopTools_MapOfShape& mapFaces,
-                       TopoDS_Shape& aCompoundOfShells ) throw (SALOME::SALOME_Exception) ;
-
-  // various services
-  int GetIndexTopology( const TopoDS_Shape& subshape,
-                      const TopoDS_Shape& mainShape ) ;
-
-  bool GetShapeFromIndex( const TopoDS_Shape& aShape,
-                        const TopAbs_ShapeEnum aType, 
-                        const int index,
-                        TopoDS_Shape& tds) ; 
-
-  GEOM::GEOM_Shape::ListOfSubShapeID* IndexOfFacesOfSubShell( const TopoDS_Shape& S,
-                                                            const TopoDS_Shape subShell )
-    throw (SALOME::SALOME_Exception) ;
-
-  bool ListOfIDIntoMapOfShapes( const TopoDS_Shape& S,
-                              const GEOM::GEOM_Shape::ListOfSubShapeID& L, 
-                              const int subShapeType,
-                              TopTools_MapOfShape& aMap ) ;
-
-  bool ListOfIDIntoSequenceOfShapes( const TopoDS_Shape& S,
-                                   const GEOM::GEOM_Shape::ListOfSubShapeID& L,
-                                   const int subShapeType,
-                                   TopTools_SequenceOfShape& aSequenceOfShapes ) ;
-
-  // Returns a  TopoDS_Shape from a GEOM::GEOM_Shape_ptr
-  TopoDS_Shape GetTopoShape(GEOM::GEOM_Shape_ptr shape_ptr) ;
-
-  // Define a sequence of shapes from 'listShapes' and return its length
-  int SequenceOfShapeFromListOfGeomShape( const GEOM::GEOM_Gen::ListOfGeomShapes& listShapes,
-                                        TopTools_SequenceOfShape& SS ) ;
-
-  // Get a string representing a shape ref IOR
-  const char* GetStringFromIOR(GEOM::GEOM_Shape_var shapeIOR);
-
-  // Return the shape ref represented by a string of IOR
-  GEOM::GEOM_Shape_ptr GetIORFromString(const char* stringIOR);
-
-  GEOM::GEOM_Gen::ListOfIOR* GetReferencedObjects(GEOM::GEOM_Shape_ptr shape);
-  GEOM::GEOM_Gen::ListOfIOR* GetObjects(GEOM::GEOM_Shape_ptr shape);
-
-
-  //-----------------------------------------------------------------------//
-  // Internal structure of shapes                                          //
-  //-----------------------------------------------------------------------//
-  // Explode SubShape
-  GEOM::GEOM_Shape_ptr SubShape(GEOM::GEOM_Shape_ptr shape,
-                               CORBA::Short ShapeType, 
-                               const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Explode SubShape in predictable order
-  GEOM::GEOM_Shape_ptr SubShapeSorted(GEOM::GEOM_Shape_ptr shape,
-                                     CORBA::Short ShapeType, 
-                                     const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-    throw (SALOME::SALOME_Exception) ;
-  
-  // Explode SubShape
-  GEOM::GEOM_Gen::ListOfGeomShapes*  SubShapeAll(GEOM::GEOM_Shape_ptr shape,
-                                                CORBA::Short ShapeType)
-    throw (SALOME::SALOME_Exception) ;
-  
-  // Explode SubShape in predictable order for TUI or GUI
-  GEOM::GEOM_Gen::ListOfGeomShapes*  SubShapeAllSorted(GEOM::GEOM_Shape_ptr shape,
-                                                      CORBA::Short ShapeType)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Suppress faces in a shape 
-  GEOM::GEOM_Gen::ListOfGeomShapes* SuppressFaces( GEOM::GEOM_Shape_ptr shape,
-                                                 const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID )
-    throw (SALOME::SALOME_Exception) ;
-
-  // Suppress one or more holes in a face or shell independant topology
-  GEOM::GEOM_Shape_ptr SuppressHolesInFaceOrShell( GEOM::GEOM_Shape_ptr shapeFaceShell,
-                                                 const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfIdWires)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Suppress a single hole in a topology (face) shell or solid with/without hole traversing
-  GEOM::GEOM_Shape_ptr SuppressHole( GEOM::GEOM_Shape_ptr shape,
-                                   const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdFace,
-                                   const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdWire,
-                                   const GEOM::GEOM_Shape::ListOfSubShapeID& ListIdEndFace )
-    throw (SALOME::SALOME_Exception) ;
-
-  bool RebuildFaceRemovingHoles( const TopoDS_Face& aFace,
-                               const TopTools_MapOfShape& mapHoles,
-                               TopoDS_Shape& resultFace ) ;
-
-  void SuppressHoleSubRoutine( const TopoDS_Shape& mainShape,
-                              const TopoDS_Face& aFace,
-                              const TopTools_SequenceOfShape& SSedgesOfWire,
-                              const TopTools_IndexedDataMapOfShapeListOfShape& aMapEdgesFaces,
-                              const TopTools_MapOfShape& MSfaces,
-                              TopTools_MapOfShape& MSfacesSuppress,
-                              const Standard_Boolean withEndFace,
-                              const TopoDS_Face& endFace,
-                              TopTools_MapOfShape& MSwireEndEdges )
-    throw (SALOME::SALOME_Exception ) ;  
-  
-  bool BuildShapeHoleNotTraversing( const TopoDS_Shape& aShape,
-                                  const TopoDS_Face& aFace,
-                                  const TopoDS_Wire& aWire,
-                                  const TopTools_MapOfShape& MFSuppress,
-                                  TopoDS_Shape& resultTds )
-    throw (SALOME::SALOME_Exception) ;
-
-  bool BuildShapeHoleTraversing( const TopoDS_Shape& aShape,
-                               const TopoDS_Face& aFace,
-                               const TopoDS_Wire& aWire,
-                                const TopTools_MapOfShape& MFSuppress,
-                                const TopoDS_Face& endFace,
-                               const TopoDS_Wire& endWire,
-                               TopoDS_Shape& resultTds )
-    throw (SALOME::SALOME_Exception) ;
-
-  bool FindCompareWireHoleOnFace( const TopoDS_Face& F,
-                                const TopTools_MapOfShape& MSwireEdges,
-                                TopoDS_Wire& aFoundWire ) ;
-
-  bool IsShapeInSequence( const TopTools_SequenceOfShape& SS, const TopoDS_Shape& aShape ) ;
-
-  void FreeEdgesFromMapOfFace(const TopTools_MapOfShape& MSfaces, TopTools_MapOfShape& MS ) ;
-
-  void MapRemoveSequence( const TopTools_MapOfShape& MS,
-                        const TopTools_SequenceOfShape& SSRemove,
-                        TopTools_SequenceOfShape& ST) ;
-
-  bool BuildShellWithFaceCompound( const TopoDS_Compound Comp,
-                                 TopoDS_Shell& resultShell ) ;
-
-  //-----------------------------------------------------------------------//
-  // Basic structures                                                      //
-  //-----------------------------------------------------------------------//
-  GEOM::PointStruct MakePointStruct(CORBA::Double x,
-                                         CORBA::Double y,
-                                         CORBA::Double z) ;
-  GEOM::DirStruct   MakeDirection(const GEOM::PointStruct& p) ;
-
-  GEOM::AxisStruct  MakeAxisStruct(CORBA::Double x,
-                                        CORBA::Double y,
-                                        CORBA::Double z,
-                                        CORBA::Double vx,
-                                        CORBA::Double vy,
-                                        CORBA::Double vz) ;
-
-  //----------------------------------------------------------------------//
-  // Boolean Operations                                                   //
-  //----------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr MakeBoolean(GEOM::GEOM_Shape_ptr shape1,
-                                  GEOM::GEOM_Shape_ptr shape2,
-                                  CORBA::Long operation)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeFuse(GEOM::GEOM_Shape_ptr shape1,
-                               GEOM::GEOM_Shape_ptr shape2)
-    throw (SALOME::SALOME_Exception) ;
-
-  //----------------------------------------------------------------------//
-  // Advanced Operations                                                  //
-  //----------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr Partition(const GEOM::GEOM_Gen::ListOfIOR& ListShapes, 
-                                const GEOM::GEOM_Gen::ListOfIOR& ListTools,
-                                 const GEOM::GEOM_Gen::ListOfIOR& ListKeepInside,
-                                 const GEOM::GEOM_Gen::ListOfIOR& ListRemoveInside,
-                                 const CORBA::Short               Limit)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Filling a surface with section curves
-  GEOM::GEOM_Shape_ptr MakeFilling(GEOM::GEOM_Shape_ptr shape,
-                                   CORBA::Short mindeg,
-                                  CORBA::Short maxdeg,
-                                  CORBA::Double tol3d,
-                                  CORBA::Double tol2d,
-                                  CORBA::Short nbiter)
-    throw (SALOME::SALOME_Exception) ;
-  // Sewing of shapes
-  GEOM::GEOM_Shape_ptr MakeSewing(const GEOM::GEOM_Gen::ListOfIOR& ListShapes,
-                                 CORBA::Double precision)
-    throw (SALOME::SALOME_Exception) ;
-
-  GEOM::GEOM_Shape_ptr MakeSewingShape( GEOM::GEOM_Shape_ptr aShape,
-                                      CORBA::Double precision )
-    throw (SALOME::SALOME_Exception);
-
-  GEOM::GEOM_Shape_ptr MakeGlueFaces(GEOM::GEOM_Shape_ptr myShape,
-                                    double tol3d)
-    throw (SALOME::SALOME_Exception);
-
-  // Change the orientation of a (new) shape
-  GEOM::GEOM_Shape_ptr OrientationChange(GEOM::GEOM_Shape_ptr shape)
-    throw (SALOME::SALOME_Exception) ;
-
-  GEOM::GEOM_Shape_ptr MakePlacedBox(CORBA::Double x1,  CORBA::Double y1,  CORBA::Double z1,
-                                    CORBA::Double delta1, CORBA::Double delta2, CORBA::Double delta3)
-    throw (SALOME::SALOME_Exception) ;
-
-  GEOM::GEOM_Shape_ptr MakePanel(GEOM::GEOM_Shape_ptr shape,
-                                CORBA::Short directiontype,
-                                CORBA::Double delta)
-    throw (SALOME::SALOME_Exception) ;
-
-  //---------------------------------------------------------------------//
-  // Transformations Operations                                          //
-  //---------------------------------------------------------------------//
-  // Copy 
-  GEOM::GEOM_Shape_ptr MakeCopy( GEOM::GEOM_Shape_ptr shape)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Translation
-  GEOM::GEOM_Shape_ptr MakeTranslation( GEOM::GEOM_Shape_ptr shape,
-                                      CORBA::Double x,
-                                      CORBA::Double y,
-                                      CORBA::Double z)
-    throw (SALOME::SALOME_Exception) ;
-  // Rotation
-  GEOM::GEOM_Shape_ptr MakeRotation( GEOM::GEOM_Shape_ptr shape,
-                                   const GEOM::AxisStruct& axis,
-                                   CORBA::Double angle)
-    throw (SALOME::SALOME_Exception) ;
-  // Create a shape using a scale factor
-  GEOM::GEOM_Shape_ptr MakeScaleTransform(GEOM::GEOM_Shape_ptr shape,
-                                         const GEOM::PointStruct& theCenterOfScale,
-                                         CORBA::Double factor)
-    throw (SALOME::SALOME_Exception) ;
-  // Mirror of a shape by a  plane
-  GEOM::GEOM_Shape_ptr MakeMirrorByPlane(GEOM::GEOM_Shape_ptr shape,
-                                        GEOM::GEOM_Shape_ptr shapePlane)
-    throw (SALOME::SALOME_Exception) ;  
-
-  // Shape by revolution of another around an axis
-  GEOM::GEOM_Shape_ptr MakeRevolution(GEOM::GEOM_Shape_ptr shape,
-                                     const GEOM::AxisStruct& axis,
-                                     CORBA::Double angle)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Create a prism with a base shape along a vector P1 to P2 
-  GEOM::GEOM_Shape_ptr MakePrism(GEOM::GEOM_Shape_ptr baseShape,
-                                const GEOM::PointStruct& P1,
-                                const GEOM::PointStruct& P2)
-    throw (SALOME::SALOME_Exception) ;
-  // Create a shape by sweeping a baseShape along a pathShape
-  GEOM::GEOM_Shape_ptr MakePipe(GEOM::GEOM_Shape_ptr pathShape,
-                               GEOM::GEOM_Shape_ptr baseShape)
-    throw (SALOME::SALOME_Exception) ;
-
-  //---------------------------------------------------------------------//
-  // Patterns Operations                                                 //
-  //---------------------------------------------------------------------//
-
-  // Multi Translation 1D
-  GEOM::GEOM_Shape_ptr MakeMultiTranslation1D( GEOM::GEOM_Shape_ptr shape,
-                                             const GEOM::DirStruct& dir,
-                                             CORBA::Double step,
-                                             CORBA::Short nbtimes)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Multi Translation 2D
-  GEOM::GEOM_Shape_ptr MakeMultiTranslation2D( GEOM::GEOM_Shape_ptr shape,
-                                             const GEOM::DirStruct& dir1,
-                                             CORBA::Double step1,
-                                             CORBA::Short nbtimes1,
-                                             const GEOM::DirStruct& dir2,
-                                             CORBA::Double step2,
-                                             CORBA::Short nbtimes2)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Multi Rotation 1D
-  GEOM::GEOM_Shape_ptr MakeMultiRotation1D( GEOM::GEOM_Shape_ptr shape,
-                                          const GEOM::DirStruct& dir,
-                                          const GEOM::PointStruct& loc,
-                                          CORBA::Short nbtimes)
-    throw (SALOME::SALOME_Exception) ;
-
-  // Multi Rotation 2D
-  GEOM::GEOM_Shape_ptr MakeMultiRotation2D( GEOM::GEOM_Shape_ptr shape,
-                                          const GEOM::DirStruct& dir,
-                                          const GEOM::PointStruct& loc,
-                                          CORBA::Double ang,
-                                          CORBA::Short nbtimes1,
-                                          CORBA::Double step,
-                                          CORBA::Short nbtimes2)
-    throw (SALOME::SALOME_Exception) ;
-
-  //--------------------------------------------------------------------//
-  // Primitives Construction                                            //
-  //--------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr MakeBox(CORBA::Double x1,
-                              CORBA::Double y1,
-                              CORBA::Double z1,
-                              CORBA::Double x2,
-                              CORBA::Double y2,
-                              CORBA::Double z2)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeSphere(CORBA::Double x1,
-                                 CORBA::Double y1,
-                                 CORBA::Double z1,
-                                 CORBA::Double radius)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeCylinder(const  GEOM::PointStruct& pstruct,
-                                   const GEOM::DirStruct& dstruct,
-                                   CORBA::Double radius,
-                                   CORBA::Double height)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeTorus(const GEOM::PointStruct& pstruct,
-                                const GEOM::DirStruct& dstruct,
-                                CORBA::Double major_radius,
-                                CORBA::Double minor_radius)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeCone(const GEOM::PointStruct& pstruct,
-                               const GEOM::DirStruct& dstruct,
-                               CORBA::Double radius1,
-                               CORBA::Double radius2,
-                               CORBA::Double height)
-    throw (SALOME::SALOME_Exception) ;
-
-  //-------------------------------------------------------------------//
-  // Import/Export                                                     //
-  //-------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr ImportIGES(const char* filename) throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr ImportBREP(const char* filename) throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr ImportSTEP(const char* filename) throw (SALOME::SALOME_Exception) ;
-
-  void ExportIGES(const char* filename,GEOM::GEOM_Shape_ptr theShape) throw (SALOME::SALOME_Exception) ;
-  void ExportBREP(const char* filename,GEOM::GEOM_Shape_ptr theShape) throw (SALOME::SALOME_Exception) ;
-  void ExportSTEP(const char* filename,GEOM::GEOM_Shape_ptr theShape) throw (SALOME::SALOME_Exception) ;
-  //-------------------------------------------------------------------//
-  // Fillet and Chamfer construction                                   //
-  //-------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr MakeFillet (GEOM::GEOM_Shape_ptr shape,
-                                   CORBA::Double radius,
-                            CORBA::Short ShapeType,
-                                  const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-    throw (SALOME::SALOME_Exception) ;
-
-  GEOM::GEOM_Shape_ptr MakeChamfer(GEOM::GEOM_Shape_ptr shape,
-                                  CORBA::Double d1,
-                                  CORBA::Double d2,
-                                  CORBA::Short ShapeType,
-                                  const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfID)
-    throw (SALOME::SALOME_Exception) ;
-
-  //-------------------------------------------------------------------//
-  // Mesures Construction                                              //
-  //-------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr MakeCDG(GEOM::GEOM_Shape_ptr shape)
-    throw (SALOME::SALOME_Exception) ;
-
-  //-------------------------------------------------------------------//
-  // Check Shape                                                       //
-  //-------------------------------------------------------------------//
-  CORBA::Boolean CheckShape(GEOM::GEOM_Shape_ptr shape)
-    throw (SALOME::SALOME_Exception) ;
-
-  //-------------------------------------------------------------------//
-  // Primitives Construction                                           //
-  //-------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr MakeVertex(CORBA::Double x,
-                                 CORBA::Double y,
-                                 CORBA::Double z)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeVector(const GEOM::PointStruct& pstruct1,
-                                 const GEOM::PointStruct& pstruct2)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeLine  (const GEOM::PointStruct& pstruct,
-                                 const GEOM::DirStruct& dstruc)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakePlane (const GEOM::PointStruct& pstruct,
-                                 const GEOM::DirStruct& dstruc,
-                                 CORBA::Double trimsize)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeCircle(const  GEOM::PointStruct& pstruct,
-                                 const GEOM::DirStruct& dstruct,
-                                 CORBA::Double radius)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeArc   (const  GEOM::PointStruct& pInit,
-                                 const  GEOM::PointStruct& pCircle,
-                                 const  GEOM::PointStruct& pEnd)
-    throw (SALOME::SALOME_Exception) ;
-
-  GEOM::GEOM_Shape_ptr MakeCompound (const GEOM::GEOM_Gen::ListOfIOR& ListShapes)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeWire     (const GEOM::GEOM_Gen::ListOfIOR& ListShapes)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeEdge     (const GEOM::PointStruct& pstruct1,
-                                    const GEOM::PointStruct& pstruct2)
-    throw (SALOME::SALOME_Exception) ;
-  GEOM::GEOM_Shape_ptr MakeFace     (GEOM::GEOM_Shape_ptr wire, CORBA::Boolean wantplanarface)
-    throw (SALOME::SALOME_Exception) ;
-
-
-  //-------------------------------------------------------------------//
-  // Speciic method Archimede                                          //
-  //-------------------------------------------------------------------//
-  GEOM::GEOM_Shape_ptr Archimede(GEOM::GEOM_Shape_ptr aShape,
-                                 CORBA::Double aWeight,
-                                 CORBA::Double aWaterDensity,
-                                 CORBA::Double aMeshingDeflection)
-    throw (SALOME::SALOME_Exception) ;
-
-};
-
-#endif 
diff --git a/GEOM/GEOM_Shape_i.cc b/GEOM/GEOM_Shape_i.cc
deleted file mode 100644 (file)
index bf7cdf0..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-//  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : GEOM_Shape_i.cc
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
-
-using namespace std;
-#include <BRepTools_ShapeSet.hxx>
-#include "GEOM_Shape_i.hh"
-#include "SALOME_NamingService.hxx"
-#include <fstream.h>
-#include <BRepTools.hxx>
-
-
-
-//=================================================================================
-// function : GEOM_Shape_i() constructor (no arguments)
-// purpose  : for what now ?
-//=================================================================================
-GEOM_Shape_i::GEOM_Shape_i() { }
-
-
-
-//=================================================================================
-// function : constructor
-// purpose  : constructor for servant creation
-//=================================================================================
-GEOM_Shape_i::GEOM_Shape_i(TopoDS_Shape geom,
-                          CORBA::ORB_ptr orb,
-                          GEOM::GEOM_Gen_ptr engine,
-                          const GEOM::GEOM_Shape::ListOfSubShapeID& index,
-                          GEOM::shape_type sht,
-                          bool ismain) {
-  _geom = geom;
-  _orb = orb;
-  _engine = engine;
-  _shapetype = sht ;
-  _ismain = ismain;
-  _index = index ;
-
-  _shapeid = "";
-  _studyshapeid = "";
-
-  _name = "";
-  _mainname ="";
-  _nametype ="";
-
-}
-
-
-
-//=================================================================================
-// function : destructor
-// purpose  : deleting the internal geometry structure
-//=================================================================================
-GEOM_Shape_i::~GEOM_Shape_i() { delete &_geom; }
-
-
-//=================================================================================
-// function : Name (set method)
-// purpose  : to set the attribute 'name' of this shape.
-//          : WARNING : Register to naming service actually removed !
-//=================================================================================
-void GEOM_Shape_i::Name(const char* name) {
-  _name = strdup(name);
-  GEOM::GEOM_Shape_ptr g = GEOM::GEOM_Shape::_narrow(_this());
-
-  // Removed declaration of shapes to naming service
-  //SALOME_NamingService * ns = new SALOME_NamingService(_orb);
-  //ns->Register(g, _name);
-}
-
-
-//=================================================================================
-// function : Name (get method)
-// purpose  : to get the attribute 'name' of this shape
-//=================================================================================
-char* GEOM_Shape_i::Name() { return strdup(_name); }
-
-//=================================================================================
-// function : MainName (set method)
-// purpose  : to set the attribute 'name' of this mainshape. 
-//=================================================================================
-void GEOM_Shape_i::MainName(const char* name) {
-  _mainname = strdup(name);
-}
-
-
-//=================================================================================
-// function : MainName (get method)
-// purpose  : to get the attribute 'name' of this shape
-//=================================================================================
-char* GEOM_Shape_i::MainName() { return strdup(_mainname); }
-
-//=================================================================================
-// function : IsMainShape (get method)
-// purpose  : return 'true' if this is a main shape (not a sub shape)
-//=================================================================================
-bool GEOM_Shape_i::IsMainShape() { return _ismain ; }
-
-
-//=================================================================================
-// function : IsMainShape (set method)
-// purpose  : to set the property 'ismain' true or false of this shape
-//=================================================================================
-void GEOM_Shape_i::IsMainShape(const bool abool) { _ismain = abool ; }
-
-
-//=================================================================================
-// function : ShapeId
-// purpose  : to get the id of this shape from GEOM (OCAF entry)
-//=================================================================================
-char* GEOM_Shape_i::ShapeId() { return strdup(_shapeid) ; }
-
-
-//=================================================================================
-// function : ShapeId (set method) 
-// purpose  : to set the id of this shape in GEOM/OCAF doc
-//=================================================================================
-void GEOM_Shape_i::ShapeId(const char * shapeid) { _shapeid = strdup(shapeid) ; }
-
-
-
-//=================================================================================
-// function : StudyShapeId (get method)
-// purpose  : to get the id of this shape from the study document (OCAF entry)
-//=================================================================================
-char* GEOM_Shape_i::StudyShapeId() { return strdup(_studyshapeid) ; }
-
-
-//=================================================================================
-// function : StudyShapeId (set method) 
-// purpose  : to set the id of this shape in the Study document (OCAF entry)
-//=================================================================================
-void GEOM_Shape_i::StudyShapeId(const char * studyshapeid)
-{ _studyshapeid = strdup(studyshapeid) ; }
-
-
-
-//=================================================================================
-// function : Index (get method)
-// purpose  : to get the index of this sub shape in its main shape
-//=================================================================================
-GEOM::GEOM_Shape::ListOfSubShapeID* GEOM_Shape_i::Index() { 
-  unsigned int _length = _index.length();
-  GEOM::GEOM_Shape::ListOfSubShapeID_var _list = new GEOM::GEOM_Shape::ListOfSubShapeID;
-  _list->length(_length);
-
-  for (unsigned int ind = 0; ind < _length; ind++) {
-    _list[ind] = _index[ind];
-  }
-
-  return _list._retn() ; 
-}
-
-
-//=================================================================================
-// function : Index (set method) 
-// purpose  : to set the index of this sub shape (in a main shape)
-//=================================================================================
-void GEOM_Shape_i::Index(const GEOM::GEOM_Shape::ListOfSubShapeID& ListOfSubShapeID) 
-{ _index = ListOfSubShapeID ; }
-
-
-//=================================================================================
-// function : ShapeType (get method)
-// purpose  : to get the topological type of this shape as defined in enum of IDL file
-//=================================================================================
-GEOM::shape_type GEOM_Shape_i::ShapeType() { return _shapetype ; }
-
-
-//=================================================================================
-// function : SetType (set method)
-// purpose  : to set the topological type of this shape (see GetType)
-//=================================================================================
-void GEOM_Shape_i::ShapeType(GEOM::shape_type sht) { _shapetype = sht ; }
-
-
-//=================================================================================
-// function : NameType (set method)
-// purpose  : to set the attribute 'nametype' of this shape. 
-//=================================================================================
-void GEOM_Shape_i::NameType(const char* name) {
-}
-
-//=================================================================================
-// function : NameType (get method)
-// purpose  : to get the attribute 'nametype' of this shape
-//=================================================================================
-char* GEOM_Shape_i::NameType() { return strdup(_nametype); }
-
-//=================================================================================
-// function : GetShapeStream
-// Transfer resulting shape to client as sequence of bytes
-//client can extract shape from stream using BrepTools::Read function
-//=================================================================================
-GEOM::GEOM_Shape::TMPFile* GEOM_Shape_i::GetShapeStream()
-{
-  ostrstream streamShape;
-  //Write TopoDS_Shape in ASCII format to the stream
-  BRepTools::Write(_geom, streamShape);
-  //Returns the number of bytes that have been stored in the stream's buffer.
-  int size = streamShape.pcount();
-  char* buf = new char [size];
-  //Get pointer on internal character array in ostrstream
-  char* valueOfStream = streamShape.str();
-  //Create copy of ostrstream content
-  memcpy(buf, valueOfStream, size);
-  //Allow automatic deletion of ostrstream content 
-  streamShape.rdbuf()->freeze(0);
-
-  CORBA::Octet* OctetBuf =  (CORBA::Octet*)buf;
-  GEOM::GEOM_Shape::TMPFile_var SeqFile = new GEOM::GEOM_Shape::TMPFile(size,size,OctetBuf,1);
-  return SeqFile._retn();
-
-}
-
-//=======================================================================
-//function : Engine
-//purpose  : return generator engine
-//=======================================================================
-
-GEOM::GEOM_Gen_ptr GEOM_Shape_i::Engine()
-{
-  return _engine;
-}
diff --git a/GEOM/GEOM_Shape_i.hh b/GEOM/GEOM_Shape_i.hh
deleted file mode 100644 (file)
index a976b31..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-//  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : GEOM_Shape_i.hh
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
-
-#ifndef __GEOM_SHAPE_I_H__
-#define __GEOM_SHAPE_I_H__
-
-// SALOME config header
-#include <SALOMEconfig.h>
-
-// Standard C++ headers
-#include <iostream.h>
-
-// IDL headers
-#include CORBA_SERVER_HEADER(GEOM_Gen)
-#include CORBA_SERVER_HEADER(GEOM_Shape)
-
-// Cascade headers
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Vertex.hxx>
-#include <TopExp_Explorer.hxx>
-#include <BRep_Tool.hxx>
-#include <gp_Pnt.hxx>
-#include <TopoDS.hxx>
-
-
-//=====================================================================
-// GEOM_Shape_i : class definition
-//=====================================================================
-class GEOM_Shape_i: public POA_GEOM::GEOM_Shape,
-                   public PortableServer::RefCountServantBase {
-private:
-  
-  TopoDS_Shape _geom;
-  CORBA::ORB_ptr _orb;
-  GEOM::GEOM_Gen_ptr _engine;
-  
-  GEOM::shape_type _shapetype ; // enum defined in the IDL file (Occ topol. type of a shape)
-  bool _ismain;
-  GEOM::GEOM_Shape::ListOfSubShapeID _index;
-  char* _name;
-  char* _mainname;
-  char* _shapeid;
-  char* _studyshapeid; // exists only if added in the study document
-  char* _nametype;
-
-public:
-
-  // no-arg constructor, doing nothing (for now ?)
-  GEOM_Shape_i();
-  
-  // constructor to be called for servant creation
-  GEOM_Shape_i(TopoDS_Shape geom,
-              CORBA::ORB_ptr orb,
-              GEOM::GEOM_Gen_ptr engine,
-              const GEOM::GEOM_Shape::ListOfSubShapeID& index,
-              GEOM::shape_type sht = GEOM::SHAPE, 
-              bool ismain = true);
-  
-  // destructor deleting the internal geometry structure
-  ~GEOM_Shape_i();
-  char* Name();
-  void  Name(const char* name);
-  
-  char* MainName();
-  void  MainName(const char* name);
-
-  char* NameType();
-  void  NameType(const char* name);
-
-  bool  IsMainShape(); 
-  void  IsMainShape(const bool abool);
-
-  char* ShapeId(); 
-  void  ShapeId(const char* shapeid);
-
-  char* StudyShapeId();
-  void  StudyShapeId(const char* studyshapeid);
-
-  GEOM::GEOM_Shape::ListOfSubShapeID* Index();
-  void  Index(const GEOM::GEOM_Shape::ListOfSubShapeID&);
-
-  GEOM::shape_type ShapeType();
-  void  ShapeType(GEOM::shape_type sht);
-
-  GEOM::GEOM_Shape::TMPFile* GetShapeStream();
-
-  GEOM::GEOM_Gen_ptr Engine();
-};
-  
-#endif
diff --git a/GEOM/Makefile.in b/GEOM/Makefile.in
deleted file mode 100644 (file)
index e80abfe..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-#
-#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-# 
-#  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-#
-#
-#
-#  File   : Makefile.in
-#  Author : Patrick GOLDBRONN (CEA)
-#  Module : GEOM
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libGeometryEngine.la
-LIB_SRC = GEOM_Shape_i.cc GEOM_Gen_i.cc
-LIB_SERVER_IDL = SALOME_Component.idl SALOMEDS.idl SALOME_Exception.idl GEOM_Gen.idl GEOM_Shape.idl 
-
-# Executables targets
-BIN = 
-BIN_SRC = 
-BIN_CLIENT_IDL = 
-BIN_SERVER_IDL =
-
-EXPORT_HEADERS =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES)
-CXXFLAGS += $(OCC_CXXFLAGS)
-LDFLAGS  += $(OCC_LIBS) -lGeometryDS -lTOOLSDS -lSalomeNS -lSalomeContainer -lGeometryPartition -lGeometryArchimede
-
-# additional file to be cleaned
-MOSTLYCLEAN =
-CLEAN =
-DISTCLEAN =
-
-@CONCLUDE@
-
diff --git a/GEOM/geom.cxx b/GEOM/geom.cxx
deleted file mode 100644 (file)
index 37707e7..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-//  GEOM GEOM : implementaion of GEOM_Gen.idl and GEOM_Shape.idl
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : geom.cxx
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
-
-using namespace std;
-#include "GEOM_Gen_i.hh"
-#include "SALOME_NamingService.hxx"
-
-//==================================================================================
-// function : main()                      MAIN 
-// purpose  :
-//==================================================================================
-int main(int argc, char** argv)
-{
-  try {
-    // Create and initialise the ORB.
-    //    CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB4");
-    CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB3");
-    
-    // Obtain a reference to the root POA.
-    CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
-    PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
-
-    // We allocate the objects on the heap.  Since these are reference
-    // counted objects, they will be deleted by the POA when they are no
-    // longer needed.    
-    GEOM_Gen_i * myGEOM_Gen_i = new GEOM_Gen_i(orb);
-
-    // Activate the objects.  This tells the POA that the objects are
-    // ready to accept requests.
-    PortableServer::ObjectId_var myGEOM_Gen_iid = poa->activate_object(myGEOM_Gen_i);
-    myGEOM_Gen_i->register_name("/myGEOM_Gen");
-    // Obtain a POAManager, and tell the POA to start accepting
-    // requests on its objects.
-    PortableServer::POAManager_var pman = poa->the_POAManager();
-    pman->activate();
-
-    orb->run();
-    orb->destroy();
-  }
-  catch(CORBA::SystemException&) {
-    cerr << "Caught CORBA::SystemException." << endl;
-  }
-  catch(CORBA::Exception&) {
-    cerr << "Caught CORBA::Exception." << endl;
-  }
-  catch(omniORB::fatalException& fe) {
-    cerr << "Caught omniORB::fatalException:" << endl;
-    cerr << "  file: " << fe.file() << endl;
-    cerr << "  line: " << fe.line() << endl;
-    cerr << "  msg: " << fe.errmsg() << endl;
-  }
-  catch(...) {
-    cerr << "Caught unknown exception." << endl;
-  }
-  return 0;
-}