// This file is generated by omniidl (C++ backend)- omniORB_4_1. Do not edit.
#ifndef __SMESH__MeshEditor_hh__
#define __SMESH__MeshEditor_hh__

#ifndef __CORBA_H_EXTERNAL_GUARD__
#include <omniORB4/CORBA.h>
#endif

#ifndef  USE_stub_in_nt_dll
# define USE_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif
#ifndef  USE_core_stub_in_nt_dll
# define USE_core_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif
#ifndef  USE_dyn_stub_in_nt_dll
# define USE_dyn_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif



#ifndef __SALOME__Exception_hh_EXTERNAL_GUARD__
#define __SALOME__Exception_hh_EXTERNAL_GUARD__
#include <SALOME_Exception.hh>
#endif
#ifndef __SALOME__GenericObj_hh_EXTERNAL_GUARD__
#define __SALOME__GenericObj_hh_EXTERNAL_GUARD__
#include <SALOME_GenericObj.hh>
#endif
#ifndef __SALOMEDS_hh_EXTERNAL_GUARD__
#define __SALOMEDS_hh_EXTERNAL_GUARD__
#include <SALOMEDS.hh>
#endif
#ifndef __SALOME__PyNode_hh_EXTERNAL_GUARD__
#define __SALOME__PyNode_hh_EXTERNAL_GUARD__
#include <SALOME_PyNode.hh>
#endif
#ifndef __SALOME__Component_hh_EXTERNAL_GUARD__
#define __SALOME__Component_hh_EXTERNAL_GUARD__
#include <SALOME_Component.hh>
#endif
#ifndef __SALOMEDS__Attributes_hh_EXTERNAL_GUARD__
#define __SALOMEDS__Attributes_hh_EXTERNAL_GUARD__
#include <SALOMEDS_Attributes.hh>
#endif
#ifndef __GEOM__Gen_hh_EXTERNAL_GUARD__
#define __GEOM__Gen_hh_EXTERNAL_GUARD__
#include <GEOM_Gen.hh>
#endif
#ifndef __SALOME__Comm_hh_EXTERNAL_GUARD__
#define __SALOME__Comm_hh_EXTERNAL_GUARD__
#include <SALOME_Comm.hh>
#endif
#ifndef __MED_hh_EXTERNAL_GUARD__
#define __MED_hh_EXTERNAL_GUARD__
#include <MED.hh>
#endif
#ifndef __SMESH__Mesh_hh_EXTERNAL_GUARD__
#define __SMESH__Mesh_hh_EXTERNAL_GUARD__
#include <SMESH_Mesh.hh>
#endif



#ifdef USE_stub_in_nt_dll
# ifndef USE_core_stub_in_nt_dll
#  define USE_core_stub_in_nt_dll
# endif
# ifndef USE_dyn_stub_in_nt_dll
#  define USE_dyn_stub_in_nt_dll
# endif
#endif

#ifdef _core_attr
# error "A local CPP macro _core_attr has already been defined."
#else
# ifdef  USE_core_stub_in_nt_dll
#  define _core_attr _OMNIORB_NTDLL_IMPORT
# else
#  define _core_attr
# endif
#endif

#ifdef _dyn_attr
# error "A local CPP macro _dyn_attr has already been defined."
#else
# ifdef  USE_dyn_stub_in_nt_dll
#  define _dyn_attr _OMNIORB_NTDLL_IMPORT
# else
#  define _dyn_attr
# endif
#endif





_CORBA_MODULE SMESH

_CORBA_MODULE_BEG

#ifndef __SMESH_mNumericalFunctor__
#define __SMESH_mNumericalFunctor__

  class NumericalFunctor;
  class _objref_NumericalFunctor;
  class _impl_NumericalFunctor;
  
  typedef _objref_NumericalFunctor* NumericalFunctor_ptr;
  typedef NumericalFunctor_ptr NumericalFunctorRef;

  class NumericalFunctor_Helper {
  public:
    typedef NumericalFunctor_ptr _ptr_type;

    static _ptr_type _nil();
    static _CORBA_Boolean is_nil(_ptr_type);
    static void release(_ptr_type);
    static void duplicate(_ptr_type);
    static void marshalObjRef(_ptr_type, cdrStream&);
    static _ptr_type unmarshalObjRef(cdrStream&);
  };

  typedef _CORBA_ObjRef_Var<_objref_NumericalFunctor, NumericalFunctor_Helper> NumericalFunctor_var;
  typedef _CORBA_ObjRef_OUT_arg<_objref_NumericalFunctor,NumericalFunctor_Helper > NumericalFunctor_out;

#endif

#ifndef __SMESH_mSMESH__MeshEditor__
#define __SMESH_mSMESH__MeshEditor__

  class SMESH_MeshEditor;
  class _objref_SMESH_MeshEditor;
  class _impl_SMESH_MeshEditor;
  
  typedef _objref_SMESH_MeshEditor* SMESH_MeshEditor_ptr;
  typedef SMESH_MeshEditor_ptr SMESH_MeshEditorRef;

  class SMESH_MeshEditor_Helper {
  public:
    typedef SMESH_MeshEditor_ptr _ptr_type;

    static _ptr_type _nil();
    static _CORBA_Boolean is_nil(_ptr_type);
    static void release(_ptr_type);
    static void duplicate(_ptr_type);
    static void marshalObjRef(_ptr_type, cdrStream&);
    static _ptr_type unmarshalObjRef(cdrStream&);
  };

  typedef _CORBA_ObjRef_Var<_objref_SMESH_MeshEditor, SMESH_MeshEditor_Helper> SMESH_MeshEditor_var;
  typedef _CORBA_ObjRef_OUT_arg<_objref_SMESH_MeshEditor,SMESH_MeshEditor_Helper > SMESH_MeshEditor_out;

#endif

  // interface SMESH_MeshEditor
  class SMESH_MeshEditor {
  public:
    // Declarations for this interface type.
    typedef SMESH_MeshEditor_ptr _ptr_type;
    typedef SMESH_MeshEditor_var _var_type;

    static _ptr_type _duplicate(_ptr_type);
    static _ptr_type _narrow(::CORBA::Object_ptr);
    static _ptr_type _unchecked_narrow(::CORBA::Object_ptr);
    
    static _ptr_type _nil();

    static inline void _marshalObjRef(_ptr_type, cdrStream&);

    static inline _ptr_type _unmarshalObjRef(cdrStream& s) {
      omniObjRef* o = omniObjRef::_unMarshal(_PD_repoId,s);
      if (o)
        return (_ptr_type) o->_ptrToObjRef(_PD_repoId);
      else
        return _nil();
    }

    static _core_attr const char* _PD_repoId;

    // Other IDL defined within this scope.
    enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH /*, __max_Smooth_Method=0xffffffff */ };
    typedef Smooth_Method& Smooth_Method_out;

    static _dyn_attr const ::CORBA::TypeCode_ptr _tc_Smooth_Method;

    enum Extrusion_Error { EXTR_OK, EXTR_NO_ELEMENTS, EXTR_PATH_NOT_EDGE, EXTR_BAD_PATH_SHAPE, EXTR_BAD_STARTING_NODE, EXTR_BAD_ANGLES_NUMBER, EXTR_CANT_GET_TANGENT /*, __max_Extrusion_Error=0xffffffff */ };
    typedef Extrusion_Error& Extrusion_Error_out;

    static _dyn_attr const ::CORBA::TypeCode_ptr _tc_Extrusion_Error;

    enum MirrorType { POINT, AXIS, PLANE /*, __max_MirrorType=0xffffffff */ };
    typedef MirrorType& MirrorType_out;

    static _dyn_attr const ::CORBA::TypeCode_ptr _tc_MirrorType;

    enum Sew_Error { SEW_OK, SEW_BORDER1_NOT_FOUND, SEW_BORDER2_NOT_FOUND, SEW_BOTH_BORDERS_NOT_FOUND, SEW_BAD_SIDE_NODES, SEW_VOLUMES_TO_SPLIT, SEW_DIFF_NB_OF_ELEMENTS, SEW_TOPO_DIFF_SETS_OF_ELEMENTS, SEW_BAD_SIDE1_NODES, SEW_BAD_SIDE2_NODES /*, __max_Sew_Error=0xffffffff */ };
    typedef Sew_Error& Sew_Error_out;

    static _dyn_attr const ::CORBA::TypeCode_ptr _tc_Sew_Error;

  
  };

  class _objref_SMESH_MeshEditor :
    public virtual ::CORBA::Object,
    public virtual omniObjRef
  {
  public:
    SMESH_IDSource_ptr MakeIDSource(const ::SMESH::long_array& IDsOfElements);
    ::CORBA::Boolean RemoveElements(const ::SMESH::long_array& IDsOfElements);
    ::CORBA::Boolean RemoveNodes(const ::SMESH::long_array& IDsOfNodes);
    ::CORBA::Long AddNode(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z);
    ::CORBA::Long Add0DElement(::CORBA::Long IDOfNode);
    ::CORBA::Long AddEdge(const ::SMESH::long_array& IDsOfNodes);
    ::CORBA::Long AddFace(const ::SMESH::long_array& IDsOfNodes);
    ::CORBA::Long AddPolygonalFace(const ::SMESH::long_array& IdsOfNodes);
    ::CORBA::Long AddVolume(const ::SMESH::long_array& IDsOfNodes);
    ::CORBA::Long AddPolyhedralVolume(const ::SMESH::long_array& IdsOfNodes, const ::SMESH::long_array& Quantities);
    ::CORBA::Long AddPolyhedralVolumeByFaces(const ::SMESH::long_array& IdsOfFaces);
    void SetNodeOnVertex(::CORBA::Long NodeID, ::CORBA::Long VertexID);
    void SetNodeOnEdge(::CORBA::Long NodeID, ::CORBA::Long EdgeID, ::CORBA::Double paramOnEdge);
    void SetNodeOnFace(::CORBA::Long NodeID, ::CORBA::Long FaceID, ::CORBA::Double u, ::CORBA::Double v);
    void SetNodeInVolume(::CORBA::Long NodeID, ::CORBA::Long SolidID);
    void SetMeshElementOnShape(::CORBA::Long ElementID, ::CORBA::Long ShapeID);
    ::CORBA::Boolean MoveNode(::CORBA::Long NodeID, ::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z);
    ::CORBA::Boolean InverseDiag(::CORBA::Long NodeID1, ::CORBA::Long NodeID2);
    ::CORBA::Boolean DeleteDiag(::CORBA::Long NodeID1, ::CORBA::Long NodeID2);
    ::CORBA::Boolean Reorient(const ::SMESH::long_array& IDsOfElements);
    ::CORBA::Boolean ReorientObject(::SMESH::SMESH_IDSource_ptr theObject);
    ::CORBA::Boolean TriToQuad(const ::SMESH::long_array& IDsOfElements, ::SMESH::NumericalFunctor_ptr Criterion, ::CORBA::Double MaxAngle);
    ::CORBA::Boolean TriToQuadObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::NumericalFunctor_ptr Criterion, ::CORBA::Double MaxAngle);
    ::CORBA::Boolean QuadToTri(const ::SMESH::long_array& IDsOfElements, ::SMESH::NumericalFunctor_ptr Criterion);
    ::CORBA::Boolean QuadToTriObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::NumericalFunctor_ptr Criterion);
    ::CORBA::Boolean SplitQuad(const ::SMESH::long_array& IDsOfElements, ::CORBA::Boolean Diag13);
    ::CORBA::Boolean SplitQuadObject(::SMESH::SMESH_IDSource_ptr theObject, ::CORBA::Boolean Diag13);
    ::CORBA::Long BestSplit(::CORBA::Long IDOfQuad, ::SMESH::NumericalFunctor_ptr Criterion);
    void SplitVolumesIntoTetra(::SMESH::SMESH_IDSource_ptr elems, ::CORBA::Short methodFlags);
    ::CORBA::Boolean Smooth(const ::SMESH::long_array& IDsOfElements, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method);
    ::CORBA::Boolean SmoothObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method);
    ::CORBA::Boolean SmoothParametric(const ::SMESH::long_array& IDsOfElements, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method);
    ::CORBA::Boolean SmoothParametricObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method);
    void ConvertToQuadratic(::CORBA::Boolean theForce3d);
    ::CORBA::Boolean ConvertFromQuadratic();
    void RenumberNodes();
    void RenumberElements();
    void RotationSweep(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    ListOfGroups* RotationSweepMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    void RotationSweepObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    ListOfGroups* RotationSweepObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    void RotationSweepObject1D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    ListOfGroups* RotationSweepObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    void RotationSweepObject2D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    ListOfGroups* RotationSweepObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance);
    void ExtrusionSweep(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    ListOfGroups* ExtrusionSweepMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    void AdvancedExtrusion(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps, ::CORBA::Long ExtrFlags, ::CORBA::Double SewTolerance);
    ListOfGroups* AdvancedExtrusionMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps, ::CORBA::Long ExtrFlags, ::CORBA::Double SewTolerance);
    void ExtrusionSweepObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    ListOfGroups* ExtrusionSweepObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    void ExtrusionSweepObject1D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    ListOfGroups* ExtrusionSweepObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    void ExtrusionSweepObject2D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    ListOfGroups* ExtrusionSweepObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps);
    ListOfGroups* ExtrusionAlongPathX(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_IDSource_ptr Path, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean LinearVariation, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::CORBA::Boolean MakeGroups, ::SMESH::ElementType ElemType, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    ListOfGroups* ExtrusionAlongPathObjX(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_IDSource_ptr Path, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean LinearVariation, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::CORBA::Boolean MakeGroups, ::SMESH::ElementType ElemType, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPath(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint);
    ListOfGroups* ExtrusionAlongPathMakeGroups(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint);
    ListOfGroups* ExtrusionAlongPathObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject1D(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint);
    ListOfGroups* ExtrusionAlongPathObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject2D(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint);
    ListOfGroups* ExtrusionAlongPathObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
    double_array* LinearAnglesVariation(::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, const ::SMESH::double_array& Angles);
    void Mirror(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean Copy);
    ListOfGroups* MirrorMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type);
    SMESH_Mesh_ptr MirrorMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void MirrorObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean Copy);
    ListOfGroups* MirrorObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type);
    SMESH_Mesh_ptr MirrorObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void Translate(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean Copy);
    ListOfGroups* TranslateMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector);
    SMESH_Mesh_ptr TranslateMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void TranslateObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean Copy);
    ListOfGroups* TranslateObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector);
    SMESH_Mesh_ptr TranslateObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void Scale(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact, ::CORBA::Boolean Copy);
    ListOfGroups* ScaleMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact);
    SMESH_Mesh_ptr ScaleMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void Rotate(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean Copy);
    ListOfGroups* RotateMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians);
    SMESH_Mesh_ptr RotateMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void RotateObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean Copy);
    ListOfGroups* RotateObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians);
    SMESH_Mesh_ptr RotateObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean CopyGroups, const char* MeshName);
    void FindCoincidentNodes(::CORBA::Double Tolerance, ::SMESH::array_of_long_array_out GroupsOfNodes);
    void FindCoincidentNodesOnPart(::SMESH::SMESH_IDSource_ptr SubMeshOrGroup, ::CORBA::Double Tolerance, ::SMESH::array_of_long_array_out GroupsOfNodes);
    void MergeNodes(const ::SMESH::array_of_long_array& GroupsOfNodes);
    void FindEqualElements(::SMESH::SMESH_IDSource_ptr MeshOrSubMeshOrGroup, ::SMESH::array_of_long_array_out GroupsOfElementsID);
    void MergeElements(const ::SMESH::array_of_long_array& GroupsOfElementsID);
    void MergeEqualElements();
    ::CORBA::Long MoveClosestNodeToPoint(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z, ::CORBA::Long nodeID);
    ::CORBA::Long FindNodeClosestTo(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z);
    long_array* FindElementsByPoint(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z, ::SMESH::ElementType type);
    ::CORBA::Short GetPointState(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z);
    SMESH_MeshEditor::Sew_Error SewFreeBorders(::CORBA::Long FirstNodeID1, ::CORBA::Long SecondNodeID1, ::CORBA::Long LastNodeID1, ::CORBA::Long FirstNodeID2, ::CORBA::Long SecondNodeID2, ::CORBA::Long LastNodeID2, ::CORBA::Boolean CreatePolygons, ::CORBA::Boolean CreatePolyedrs);
    SMESH_MeshEditor::Sew_Error SewConformFreeBorders(::CORBA::Long FirstNodeID1, ::CORBA::Long SecondNodeID1, ::CORBA::Long LastNodeID1, ::CORBA::Long FirstNodeID2, ::CORBA::Long SecondNodeID2);
    SMESH_MeshEditor::Sew_Error SewBorderToSide(::CORBA::Long FirstNodeIDOnFreeBorder, ::CORBA::Long SecondNodeIDOnFreeBorder, ::CORBA::Long LastNodeIDOnFreeBorder, ::CORBA::Long FirstNodeIDOnSide, ::CORBA::Long LastNodeIDOnSide, ::CORBA::Boolean CreatePolygons, ::CORBA::Boolean CreatePolyedrs);
    SMESH_MeshEditor::Sew_Error SewSideElements(const ::SMESH::long_array& IDsOfSide1Elements, const ::SMESH::long_array& IDsOfSide2Elements, ::CORBA::Long NodeID1OfSide1ToMerge, ::CORBA::Long NodeID1OfSide2ToMerge, ::CORBA::Long NodeID2OfSide1ToMerge, ::CORBA::Long NodeID2OfSide2ToMerge);
    ::CORBA::Boolean ChangeElemNodes(::CORBA::Long ide, const ::SMESH::long_array& newIDs);
    MeshPreviewStruct* GetPreviewData();
    long_array* GetLastCreatedNodes();
    long_array* GetLastCreatedElems();
    ::CORBA::Boolean DoubleNodes(const ::SMESH::long_array& theNodes, const ::SMESH::long_array& theModifiedElems);
    ::CORBA::Boolean DoubleNode(::CORBA::Long theNodeId, const ::SMESH::long_array& theModifiedElems);
    ::CORBA::Boolean DoubleNodeGroup(::SMESH::SMESH_GroupBase_ptr theNodes, ::SMESH::SMESH_GroupBase_ptr theModifiedElems);
    ::CORBA::Boolean DoubleNodeGroups(const ::SMESH::ListOfGroups& theNodes, const ::SMESH::ListOfGroups& theModifiedElems);
    ::CORBA::Boolean DoubleNodeElem(const ::SMESH::long_array& theElems, const ::SMESH::long_array& theNodesNot, const ::SMESH::long_array& theAffectedElems);
    ::CORBA::Boolean DoubleNodeElemInRegion(const ::SMESH::long_array& theElems, const ::SMESH::long_array& theNodesNot, ::GEOM::GEOM_Object_ptr theShape);
    ::CORBA::Boolean DoubleNodeElemGroup(::SMESH::SMESH_GroupBase_ptr theElems, ::SMESH::SMESH_GroupBase_ptr theNodesNot, ::SMESH::SMESH_GroupBase_ptr theAffectedElems);
    ::CORBA::Boolean DoubleNodeElemGroupInRegion(::SMESH::SMESH_GroupBase_ptr theElems, ::SMESH::SMESH_GroupBase_ptr theNodesNot, ::GEOM::GEOM_Object_ptr theShape);
    ::CORBA::Boolean DoubleNodeElemGroups(const ::SMESH::ListOfGroups& theElems, const ::SMESH::ListOfGroups& theNodesNot, const ::SMESH::ListOfGroups& theAffectedElems);
    ::CORBA::Boolean DoubleNodeElemGroupsInRegion(const ::SMESH::ListOfGroups& theElems, const ::SMESH::ListOfGroups& theNodesNot, ::GEOM::GEOM_Object_ptr theShape);
    ::CORBA::Boolean Make2DMeshFrom3D();

    inline _objref_SMESH_MeshEditor()  { _PR_setobj(0); }  // nil
    _objref_SMESH_MeshEditor(omniIOR*, omniIdentity*);

  protected:
    virtual ~_objref_SMESH_MeshEditor();

    
  private:
    virtual void* _ptrToObjRef(const char*);

    _objref_SMESH_MeshEditor(const _objref_SMESH_MeshEditor&);
    _objref_SMESH_MeshEditor& operator = (const _objref_SMESH_MeshEditor&);
    // not implemented

    friend class SMESH_MeshEditor;
  };

  class _pof_SMESH_MeshEditor : public _OMNI_NS(proxyObjectFactory) {
  public:
    inline _pof_SMESH_MeshEditor() : _OMNI_NS(proxyObjectFactory)(SMESH_MeshEditor::_PD_repoId) {}
    virtual ~_pof_SMESH_MeshEditor();

    virtual omniObjRef* newObjRef(omniIOR*,omniIdentity*);
    virtual _CORBA_Boolean is_a(const char*) const;
  };

  class _impl_SMESH_MeshEditor :
    public virtual omniServant
  {
  public:
    virtual ~_impl_SMESH_MeshEditor();

    virtual SMESH_IDSource_ptr MakeIDSource(const ::SMESH::long_array& IDsOfElements) = 0;
    virtual ::CORBA::Boolean RemoveElements(const ::SMESH::long_array& IDsOfElements) = 0;
    virtual ::CORBA::Boolean RemoveNodes(const ::SMESH::long_array& IDsOfNodes) = 0;
    virtual ::CORBA::Long AddNode(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z) = 0;
    virtual ::CORBA::Long Add0DElement(::CORBA::Long IDOfNode) = 0;
    virtual ::CORBA::Long AddEdge(const ::SMESH::long_array& IDsOfNodes) = 0;
    virtual ::CORBA::Long AddFace(const ::SMESH::long_array& IDsOfNodes) = 0;
    virtual ::CORBA::Long AddPolygonalFace(const ::SMESH::long_array& IdsOfNodes) = 0;
    virtual ::CORBA::Long AddVolume(const ::SMESH::long_array& IDsOfNodes) = 0;
    virtual ::CORBA::Long AddPolyhedralVolume(const ::SMESH::long_array& IdsOfNodes, const ::SMESH::long_array& Quantities) = 0;
    virtual ::CORBA::Long AddPolyhedralVolumeByFaces(const ::SMESH::long_array& IdsOfFaces) = 0;
    virtual void SetNodeOnVertex(::CORBA::Long NodeID, ::CORBA::Long VertexID) = 0;
    virtual void SetNodeOnEdge(::CORBA::Long NodeID, ::CORBA::Long EdgeID, ::CORBA::Double paramOnEdge) = 0;
    virtual void SetNodeOnFace(::CORBA::Long NodeID, ::CORBA::Long FaceID, ::CORBA::Double u, ::CORBA::Double v) = 0;
    virtual void SetNodeInVolume(::CORBA::Long NodeID, ::CORBA::Long SolidID) = 0;
    virtual void SetMeshElementOnShape(::CORBA::Long ElementID, ::CORBA::Long ShapeID) = 0;
    virtual ::CORBA::Boolean MoveNode(::CORBA::Long NodeID, ::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z) = 0;
    virtual ::CORBA::Boolean InverseDiag(::CORBA::Long NodeID1, ::CORBA::Long NodeID2) = 0;
    virtual ::CORBA::Boolean DeleteDiag(::CORBA::Long NodeID1, ::CORBA::Long NodeID2) = 0;
    virtual ::CORBA::Boolean Reorient(const ::SMESH::long_array& IDsOfElements) = 0;
    virtual ::CORBA::Boolean ReorientObject(::SMESH::SMESH_IDSource_ptr theObject) = 0;
    virtual ::CORBA::Boolean TriToQuad(const ::SMESH::long_array& IDsOfElements, ::SMESH::NumericalFunctor_ptr Criterion, ::CORBA::Double MaxAngle) = 0;
    virtual ::CORBA::Boolean TriToQuadObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::NumericalFunctor_ptr Criterion, ::CORBA::Double MaxAngle) = 0;
    virtual ::CORBA::Boolean QuadToTri(const ::SMESH::long_array& IDsOfElements, ::SMESH::NumericalFunctor_ptr Criterion) = 0;
    virtual ::CORBA::Boolean QuadToTriObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::NumericalFunctor_ptr Criterion) = 0;
    virtual ::CORBA::Boolean SplitQuad(const ::SMESH::long_array& IDsOfElements, ::CORBA::Boolean Diag13) = 0;
    virtual ::CORBA::Boolean SplitQuadObject(::SMESH::SMESH_IDSource_ptr theObject, ::CORBA::Boolean Diag13) = 0;
    virtual ::CORBA::Long BestSplit(::CORBA::Long IDOfQuad, ::SMESH::NumericalFunctor_ptr Criterion) = 0;
    virtual void SplitVolumesIntoTetra(::SMESH::SMESH_IDSource_ptr elems, ::CORBA::Short methodFlags) = 0;
    virtual ::CORBA::Boolean Smooth(const ::SMESH::long_array& IDsOfElements, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method) = 0;
    virtual ::CORBA::Boolean SmoothObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method) = 0;
    virtual ::CORBA::Boolean SmoothParametric(const ::SMESH::long_array& IDsOfElements, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method) = 0;
    virtual ::CORBA::Boolean SmoothParametricObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::long_array& IDsOfFixedNodes, ::CORBA::Long MaxNbOfIterations, ::CORBA::Double MaxAspectRatio, ::SMESH::SMESH_MeshEditor::Smooth_Method Method) = 0;
    virtual void ConvertToQuadratic(::CORBA::Boolean theForce3d) = 0;
    virtual ::CORBA::Boolean ConvertFromQuadratic() = 0;
    virtual void RenumberNodes() = 0;
    virtual void RenumberElements() = 0;
    virtual void RotationSweep(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual ListOfGroups* RotationSweepMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual void RotationSweepObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual ListOfGroups* RotationSweepObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual void RotationSweepObject1D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual ListOfGroups* RotationSweepObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual void RotationSweepObject2D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual ListOfGroups* RotationSweepObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axix, ::CORBA::Double AngleInRadians, ::CORBA::Long NbOfSteps, ::CORBA::Double Tolerance) = 0;
    virtual void ExtrusionSweep(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual ListOfGroups* ExtrusionSweepMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual void AdvancedExtrusion(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps, ::CORBA::Long ExtrFlags, ::CORBA::Double SewTolerance) = 0;
    virtual ListOfGroups* AdvancedExtrusionMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps, ::CORBA::Long ExtrFlags, ::CORBA::Double SewTolerance) = 0;
    virtual void ExtrusionSweepObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual ListOfGroups* ExtrusionSweepObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual void ExtrusionSweepObject1D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual ListOfGroups* ExtrusionSweepObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual void ExtrusionSweepObject2D(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual ListOfGroups* ExtrusionSweepObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& StepVector, ::CORBA::Long NbOfSteps) = 0;
    virtual ListOfGroups* ExtrusionAlongPathX(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_IDSource_ptr Path, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean LinearVariation, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::CORBA::Boolean MakeGroups, ::SMESH::ElementType ElemType, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual ListOfGroups* ExtrusionAlongPathObjX(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_IDSource_ptr Path, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean LinearVariation, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::CORBA::Boolean MakeGroups, ::SMESH::ElementType ElemType, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPath(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint) = 0;
    virtual ListOfGroups* ExtrusionAlongPathMakeGroups(const ::SMESH::long_array& IDsOfElements, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint) = 0;
    virtual ListOfGroups* ExtrusionAlongPathObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject1D(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint) = 0;
    virtual ListOfGroups* ExtrusionAlongPathObject1DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual SMESH_MeshEditor::Extrusion_Error ExtrusionAlongPathObject2D(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint) = 0;
    virtual ListOfGroups* ExtrusionAlongPathObject2DMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, ::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, ::CORBA::Long NodeStart, ::CORBA::Boolean HasAngles, const ::SMESH::double_array& Angles, ::CORBA::Boolean HasRefPoint, const ::SMESH::PointStruct& RefPoint, ::SMESH::SMESH_MeshEditor::Extrusion_Error& Error) = 0;
    virtual double_array* LinearAnglesVariation(::SMESH::SMESH_Mesh_ptr PathMesh, ::GEOM::GEOM_Object_ptr PathShape, const ::SMESH::double_array& Angles) = 0;
    virtual void Mirror(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* MirrorMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type) = 0;
    virtual SMESH_Mesh_ptr MirrorMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void MirrorObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* MirrorObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type) = 0;
    virtual SMESH_Mesh_ptr MirrorObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Mirror, ::SMESH::SMESH_MeshEditor::MirrorType Type, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void Translate(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* TranslateMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector) = 0;
    virtual SMESH_Mesh_ptr TranslateMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void TranslateObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* TranslateObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector) = 0;
    virtual SMESH_Mesh_ptr TranslateObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::DirStruct& Vector, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void Scale(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* ScaleMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact) = 0;
    virtual SMESH_Mesh_ptr ScaleMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::PointStruct& thePoint, const ::SMESH::double_array& theScaleFact, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void Rotate(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* RotateMakeGroups(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians) = 0;
    virtual SMESH_Mesh_ptr RotateMakeMesh(const ::SMESH::long_array& IDsOfElements, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void RotateObject(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean Copy) = 0;
    virtual ListOfGroups* RotateObjectMakeGroups(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians) = 0;
    virtual SMESH_Mesh_ptr RotateObjectMakeMesh(::SMESH::SMESH_IDSource_ptr theObject, const ::SMESH::AxisStruct& Axis, ::CORBA::Double AngleInRadians, ::CORBA::Boolean CopyGroups, const char* MeshName) = 0;
    virtual void FindCoincidentNodes(::CORBA::Double Tolerance, ::SMESH::array_of_long_array_out GroupsOfNodes) = 0;
    virtual void FindCoincidentNodesOnPart(::SMESH::SMESH_IDSource_ptr SubMeshOrGroup, ::CORBA::Double Tolerance, ::SMESH::array_of_long_array_out GroupsOfNodes) = 0;
    virtual void MergeNodes(const ::SMESH::array_of_long_array& GroupsOfNodes) = 0;
    virtual void FindEqualElements(::SMESH::SMESH_IDSource_ptr MeshOrSubMeshOrGroup, ::SMESH::array_of_long_array_out GroupsOfElementsID) = 0;
    virtual void MergeElements(const ::SMESH::array_of_long_array& GroupsOfElementsID) = 0;
    virtual void MergeEqualElements() = 0;
    virtual ::CORBA::Long MoveClosestNodeToPoint(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z, ::CORBA::Long nodeID) = 0;
    virtual ::CORBA::Long FindNodeClosestTo(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z) = 0;
    virtual long_array* FindElementsByPoint(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z, ::SMESH::ElementType type) = 0;
    virtual ::CORBA::Short GetPointState(::CORBA::Double x, ::CORBA::Double y, ::CORBA::Double z) = 0;
    virtual SMESH_MeshEditor::Sew_Error SewFreeBorders(::CORBA::Long FirstNodeID1, ::CORBA::Long SecondNodeID1, ::CORBA::Long LastNodeID1, ::CORBA::Long FirstNodeID2, ::CORBA::Long SecondNodeID2, ::CORBA::Long LastNodeID2, ::CORBA::Boolean CreatePolygons, ::CORBA::Boolean CreatePolyedrs) = 0;
    virtual SMESH_MeshEditor::Sew_Error SewConformFreeBorders(::CORBA::Long FirstNodeID1, ::CORBA::Long SecondNodeID1, ::CORBA::Long LastNodeID1, ::CORBA::Long FirstNodeID2, ::CORBA::Long SecondNodeID2) = 0;
    virtual SMESH_MeshEditor::Sew_Error SewBorderToSide(::CORBA::Long FirstNodeIDOnFreeBorder, ::CORBA::Long SecondNodeIDOnFreeBorder, ::CORBA::Long LastNodeIDOnFreeBorder, ::CORBA::Long FirstNodeIDOnSide, ::CORBA::Long LastNodeIDOnSide, ::CORBA::Boolean CreatePolygons, ::CORBA::Boolean CreatePolyedrs) = 0;
    virtual SMESH_MeshEditor::Sew_Error SewSideElements(const ::SMESH::long_array& IDsOfSide1Elements, const ::SMESH::long_array& IDsOfSide2Elements, ::CORBA::Long NodeID1OfSide1ToMerge, ::CORBA::Long NodeID1OfSide2ToMerge, ::CORBA::Long NodeID2OfSide1ToMerge, ::CORBA::Long NodeID2OfSide2ToMerge) = 0;
    virtual ::CORBA::Boolean ChangeElemNodes(::CORBA::Long ide, const ::SMESH::long_array& newIDs) = 0;
    virtual MeshPreviewStruct* GetPreviewData() = 0;
    virtual long_array* GetLastCreatedNodes() = 0;
    virtual long_array* GetLastCreatedElems() = 0;
    virtual ::CORBA::Boolean DoubleNodes(const ::SMESH::long_array& theNodes, const ::SMESH::long_array& theModifiedElems) = 0;
    virtual ::CORBA::Boolean DoubleNode(::CORBA::Long theNodeId, const ::SMESH::long_array& theModifiedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeGroup(::SMESH::SMESH_GroupBase_ptr theNodes, ::SMESH::SMESH_GroupBase_ptr theModifiedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeGroups(const ::SMESH::ListOfGroups& theNodes, const ::SMESH::ListOfGroups& theModifiedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeElem(const ::SMESH::long_array& theElems, const ::SMESH::long_array& theNodesNot, const ::SMESH::long_array& theAffectedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeElemInRegion(const ::SMESH::long_array& theElems, const ::SMESH::long_array& theNodesNot, ::GEOM::GEOM_Object_ptr theShape) = 0;
    virtual ::CORBA::Boolean DoubleNodeElemGroup(::SMESH::SMESH_GroupBase_ptr theElems, ::SMESH::SMESH_GroupBase_ptr theNodesNot, ::SMESH::SMESH_GroupBase_ptr theAffectedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeElemGroupInRegion(::SMESH::SMESH_GroupBase_ptr theElems, ::SMESH::SMESH_GroupBase_ptr theNodesNot, ::GEOM::GEOM_Object_ptr theShape) = 0;
    virtual ::CORBA::Boolean DoubleNodeElemGroups(const ::SMESH::ListOfGroups& theElems, const ::SMESH::ListOfGroups& theNodesNot, const ::SMESH::ListOfGroups& theAffectedElems) = 0;
    virtual ::CORBA::Boolean DoubleNodeElemGroupsInRegion(const ::SMESH::ListOfGroups& theElems, const ::SMESH::ListOfGroups& theNodesNot, ::GEOM::GEOM_Object_ptr theShape) = 0;
    virtual ::CORBA::Boolean Make2DMeshFrom3D() = 0;
    
  public:  // Really protected, workaround for xlC
    virtual _CORBA_Boolean _dispatch(omniCallHandle&);

  private:
    virtual void* _ptrToInterface(const char*);
    virtual const char* _mostDerivedRepoId();
    
  };


  _CORBA_MODULE_VAR _dyn_attr const ::CORBA::TypeCode_ptr _tc_SMESH_MeshEditor;

_CORBA_MODULE_END



_CORBA_MODULE POA_SMESH
_CORBA_MODULE_BEG

  class SMESH_MeshEditor :
    public virtual SMESH::_impl_SMESH_MeshEditor,
    public virtual ::PortableServer::ServantBase
  {
  public:
    virtual ~SMESH_MeshEditor();

    inline ::SMESH::SMESH_MeshEditor_ptr _this() {
      return (::SMESH::SMESH_MeshEditor_ptr) _do_this(::SMESH::SMESH_MeshEditor::_PD_repoId);
    }
  };

_CORBA_MODULE_END



_CORBA_MODULE OBV_SMESH
_CORBA_MODULE_BEG

_CORBA_MODULE_END





#undef _core_attr
#undef _dyn_attr

inline void operator >>=(SMESH::SMESH_MeshEditor::Smooth_Method _e, cdrStream& s) {
  ::operator>>=((::CORBA::ULong)_e, s);
}

inline void operator <<= (SMESH::SMESH_MeshEditor::Smooth_Method& _e, cdrStream& s) {
  ::CORBA::ULong _0RL_e;
  ::operator<<=(_0RL_e,s);
  if (_0RL_e <= SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH) {
    _e = (SMESH::SMESH_MeshEditor::Smooth_Method) _0RL_e;
  }
  else {
    OMNIORB_THROW(MARSHAL,_OMNI_NS(MARSHAL_InvalidEnumValue),
                  (::CORBA::CompletionStatus)s.completion());
  }
}

void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Smooth_Method _s);
_CORBA_Boolean operator>>=(const ::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Smooth_Method& _s);

inline void operator >>=(SMESH::SMESH_MeshEditor::Extrusion_Error _e, cdrStream& s) {
  ::operator>>=((::CORBA::ULong)_e, s);
}

inline void operator <<= (SMESH::SMESH_MeshEditor::Extrusion_Error& _e, cdrStream& s) {
  ::CORBA::ULong _0RL_e;
  ::operator<<=(_0RL_e,s);
  if (_0RL_e <= SMESH::SMESH_MeshEditor::EXTR_CANT_GET_TANGENT) {
    _e = (SMESH::SMESH_MeshEditor::Extrusion_Error) _0RL_e;
  }
  else {
    OMNIORB_THROW(MARSHAL,_OMNI_NS(MARSHAL_InvalidEnumValue),
                  (::CORBA::CompletionStatus)s.completion());
  }
}

void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Extrusion_Error _s);
_CORBA_Boolean operator>>=(const ::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Extrusion_Error& _s);

inline void operator >>=(SMESH::SMESH_MeshEditor::MirrorType _e, cdrStream& s) {
  ::operator>>=((::CORBA::ULong)_e, s);
}

inline void operator <<= (SMESH::SMESH_MeshEditor::MirrorType& _e, cdrStream& s) {
  ::CORBA::ULong _0RL_e;
  ::operator<<=(_0RL_e,s);
  if (_0RL_e <= SMESH::SMESH_MeshEditor::PLANE) {
    _e = (SMESH::SMESH_MeshEditor::MirrorType) _0RL_e;
  }
  else {
    OMNIORB_THROW(MARSHAL,_OMNI_NS(MARSHAL_InvalidEnumValue),
                  (::CORBA::CompletionStatus)s.completion());
  }
}

void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor::MirrorType _s);
_CORBA_Boolean operator>>=(const ::CORBA::Any& _a, SMESH::SMESH_MeshEditor::MirrorType& _s);

inline void operator >>=(SMESH::SMESH_MeshEditor::Sew_Error _e, cdrStream& s) {
  ::operator>>=((::CORBA::ULong)_e, s);
}

inline void operator <<= (SMESH::SMESH_MeshEditor::Sew_Error& _e, cdrStream& s) {
  ::CORBA::ULong _0RL_e;
  ::operator<<=(_0RL_e,s);
  if (_0RL_e <= SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES) {
    _e = (SMESH::SMESH_MeshEditor::Sew_Error) _0RL_e;
  }
  else {
    OMNIORB_THROW(MARSHAL,_OMNI_NS(MARSHAL_InvalidEnumValue),
                  (::CORBA::CompletionStatus)s.completion());
  }
}

void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Sew_Error _s);
_CORBA_Boolean operator>>=(const ::CORBA::Any& _a, SMESH::SMESH_MeshEditor::Sew_Error& _s);

void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor_ptr _s);
void operator<<=(::CORBA::Any& _a, SMESH::SMESH_MeshEditor_ptr* _s);
_CORBA_Boolean operator>>=(const ::CORBA::Any& _a, SMESH::SMESH_MeshEditor_ptr& _s);



inline void
SMESH::SMESH_MeshEditor::_marshalObjRef(::SMESH::SMESH_MeshEditor_ptr obj, cdrStream& s) {
  omniObjRef::_marshal(obj->_PR_getobj(),s);
}




#ifdef   USE_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
# undef  USE_stub_in_nt_dll
# undef  USE_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif
#ifdef   USE_core_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
# undef  USE_core_stub_in_nt_dll
# undef  USE_core_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif
#ifdef   USE_dyn_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
# undef  USE_dyn_stub_in_nt_dll
# undef  USE_dyn_stub_in_nt_dll_NOT_DEFINED_SMESH__MeshEditor
#endif

#endif  // __SMESH__MeshEditor_hh__

