Salome HOME
0020918: EDF 1447 SMESH: Mesh common borders
authoreap <eap@opencascade.com>
Fri, 12 Nov 2010 15:00:12 +0000 (15:00 +0000)
committereap <eap@opencascade.com>
Fri, 12 Nov 2010 15:00:12 +0000 (15:00 +0000)
+ StdMeshers_ImportSource1D_i.cxx \
+ StdMeshers_ImportSource2D_i.cxx \
+ StdMeshers_Import_1D_i.cxx \
+ StdMeshers_Import_1D2D_i.cxx

src/StdMeshers_I/Makefile.am
src/StdMeshers_I/StdMeshers_ImportSource1D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ImportSource1D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ImportSource2D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ImportSource2D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Import_1D2D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Import_1D2D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Import_1D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Import_1D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_i.cxx

index 3331c0b368f61d1445a8e998f4cf97b73bd41d92..17d7c9f6fafbd543c9473629162f8cb6e81b1e2d 100644 (file)
@@ -63,7 +63,11 @@ salomeinclude_HEADERS = \
        StdMeshers_MaxLength_i.hxx \
        StdMeshers_QuadrangleParams_i.hxx \
        StdMeshers_RadialQuadrangle_1D2D_i.hxx \
-       SMESH_StdMeshers_I.hxx
+       SMESH_StdMeshers_I.hxx \
+       StdMeshers_ImportSource1D_i.hxx \
+       StdMeshers_ImportSource2D_i.hxx \
+       StdMeshers_Import_1D_i.hxx \
+       StdMeshers_Import_1D2D_i.hxx
 
 # Libraries targets
 lib_LTLIBRARIES = libStdMeshersEngine.la
@@ -105,7 +109,11 @@ dist_libStdMeshersEngine_la_SOURCES = \
        StdMeshers_TrianglePreference_i.cxx \
        StdMeshers_MaxLength_i.cxx \
        StdMeshers_QuadrangleParams_i.cxx \
-       StdMeshers_RadialQuadrangle_1D2D_i.cxx
+       StdMeshers_RadialQuadrangle_1D2D_i.cxx \
+       StdMeshers_ImportSource1D_i.cxx \
+       StdMeshers_ImportSource2D_i.cxx \
+       StdMeshers_Import_1D_i.cxx \
+       StdMeshers_Import_1D2D_i.cxx
 
 # additionnal information to compil and link file
 libStdMeshersEngine_la_CPPFLAGS = \
diff --git a/src/StdMeshers_I/StdMeshers_ImportSource1D_i.cxx b/src/StdMeshers_I/StdMeshers_ImportSource1D_i.cxx
new file mode 100644 (file)
index 0000000..ff78f6f
--- /dev/null
@@ -0,0 +1,282 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ImportSource1D_i.cxx
+//  Module : SMESH
+//
+#include "StdMeshers_ImportSource1D_i.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Group_i.hxx"
+#include "SMESH_PythonDump.hxx"
+#include "StdMeshers_ObjRefUlils.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource1D_i::StdMeshers_ImportSource1D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ImportSource1D_i::StdMeshers_ImportSource1D_i( PortableServer::POA_ptr thePOA,
+                                                          int                     theStudyId,
+                                                          ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ImportSource1D_i::StdMeshers_ImportSource1D_i" );
+  myBaseImpl = new ::StdMeshers_ImportSource1D( theGenImpl->GetANewId(),
+                                                theStudyId,
+                                                theGenImpl );
+  _groupEntries = new SMESH::string_array();
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource1D_i::~StdMeshers_ImportSource1D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ImportSource1D_i::~StdMeshers_ImportSource1D_i()
+{
+  MESSAGE( "StdMeshers_ImportSource1D_i::~StdMeshers_ImportSource1D_i" );
+}
+
+//=============================================================================
+/*!
+ *  SetSourceEdges
+ */
+//=============================================================================
+
+void StdMeshers_ImportSource1D_i::SetSourceEdges(const SMESH::ListOfGroups& groups)
+{
+  MESSAGE( "StdMeshers_ImportSource1D_i::SetSourceEdges" );
+  ASSERT( myBaseImpl );
+  try
+  {
+    std::vector<SMESH_Group*> smesh_groups;
+    std::vector<string> entries;
+    SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
+    for ( int i = 0; i < groups.length(); ++i )
+      if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( groups[i] ))
+      {
+        if ( gp_i->GetType() != SMESH::EDGE )
+          THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
+        smesh_groups.push_back( gp_i->GetSmeshGroup() );
+
+        SALOMEDS::SObject_var so = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject(study, groups[i]);
+        if ( !so->_is_nil())
+        {
+          CORBA::String_var entry = so->GetID();
+          entries.push_back( entry.in() );
+        }
+      }
+    this->GetImpl()->SetGroups( smesh_groups );
+
+    _groupEntries = new SMESH::string_array;
+    _groupEntries->length( entries.size ());
+    for ( int i = 0; i < entries.size(); ++i )
+      _groupEntries[i] = entries[i].c_str();
+  }
+  catch ( SALOME_Exception& S_ex )
+  {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceEdges( " << groups << " )";
+}
+
+//=============================================================================
+/*!
+ * Return entries of groups
+ */
+//=============================================================================
+
+SMESH::string_array*  StdMeshers_ImportSource1D_i::GetSourceEdges()
+{
+  MESSAGE( "StdMeshers_ImportSource1D_i::GetImportSource" );
+  SMESH::string_array_var res = new SMESH::string_array( _groupEntries );
+  return res._retn();
+}
+
+//================================================================================
+/*!
+ * \brief Set to copy mesh and groups
+ */
+//================================================================================
+
+void StdMeshers_ImportSource1D_i::SetCopySourceMesh(CORBA::Boolean toCopyMesh,
+                                                    CORBA::Boolean toCopyGroups)
+{
+  GetImpl()->SetCopySourceMesh(toCopyMesh,toCopyGroups);
+  SMESH::TPythonDump() << _this() << ".SetCopySourceMesh( "
+                       << toCopyMesh << ", " << toCopyGroups << " )";
+}
+
+//================================================================================
+/*!
+ * \brief Return "to copy mesh and groups"
+ */
+//================================================================================
+
+void StdMeshers_ImportSource1D_i::GetCopySourceMesh(CORBA::Boolean& toCopyMesh,
+                                                    CORBA::Boolean& toCopyGroups)
+{
+  GetImpl()->GetCopySourceMesh(toCopyMesh,toCopyGroups);
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_ImportSource1D_i::SaveTo()
+{
+  std::ostringstream os;
+  os << " " << _groupEntries->length();
+
+  SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
+  for ( int i = 0; i < _groupEntries->length(); ++i )
+  {
+    // entry
+    os << " " << _groupEntries[i];
+
+    // id
+    SALOMEDS::SObject_var groupSO = study->FindObjectID( _groupEntries[i] );
+    CORBA::Object_var groupObj;
+    if ( !groupSO->_is_nil() )
+      groupObj = groupSO->GetObject();
+    StdMeshers_ObjRefUlils::SaveToStream( groupObj, os );
+  }
+
+  myBaseImpl->SaveTo( os );
+  cout << "SaveTo() " << os.str() << endl;
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_ImportSource1D_i::LoadFrom( const char* theStream )
+{
+  std::istringstream is( theStream );
+
+  int nbGroups;
+  is >> nbGroups;
+
+  _groupEntries = new SMESH::string_array;
+  _groupEntries->length( nbGroups );
+  std::string id, entry;
+  for ( int i = 0; i < _groupEntries->length(); ++i )
+  {
+    if ( is >> entry )
+      _groupEntries[i] = entry.c_str();
+    else
+    {
+      _groupEntries->length( i );
+      is.clear(ios::badbit | is.rdstate());
+      break;
+    }
+    if ( is >> id )
+      _groupIDs.push_back( id );
+    else
+    {
+      is.clear(ios::badbit | is.rdstate());
+      break;
+    }
+  }
+
+  myBaseImpl->LoadFrom( is );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve groups by their ids loaded by LoadFrom()
+ * This is possible only when all meshes are fully loaded
+ */
+//================================================================================
+
+void StdMeshers_ImportSource1D_i::UpdateAsMeshesRestored()
+{
+  std::vector<SMESH_Group*> smesh_groups;
+  for ( unsigned i = 0; i < _groupIDs.size(); ++i )
+  {
+    std::istringstream is( _groupIDs[i].c_str() );
+    SMESH::SMESH_GroupBase_var group =
+      StdMeshers_ObjRefUlils::LoadObjectFromStream<SMESH::SMESH_GroupBase>( is );
+    if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( group ))
+      smesh_groups.push_back( gp_i->GetSmeshGroup() );
+  }
+  cout << "UpdateAsMeshesRestored(): " << smesh_groups.size() << endl;
+  GetImpl()->RestoreGroups(smesh_groups);
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource1D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ImportSource1D* StdMeshers_ImportSource1D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_ImportSource1D_i::GetImpl" );
+  return ( ::StdMeshers_ImportSource1D* )myBaseImpl;
+}
+
+//================================================================================
+/*!
+ * \brief Verify whether hypothesis supports given entity type 
+  * \param type - dimension (see SMESH::Dimension enumeration)
+  * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
+ * 
+ * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration)
+ */
+//================================================================================  
+CORBA::Boolean StdMeshers_ImportSource1D_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_1D;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ImportSource1D_i.hxx b/src/StdMeshers_I/StdMeshers_ImportSource1D_i.hxx
new file mode 100644 (file)
index 0000000..216244a
--- /dev/null
@@ -0,0 +1,74 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ImportSource1D_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_ImportSource1D_I_HXX_
+#define _SMESH_ImportSource1D_I_HXX_
+
+#include "SMESH_StdMeshers_I.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ImportSource.hxx"
+
+class SMESH_Gen;
+
+class STDMESHERS_I_EXPORT StdMeshers_ImportSource1D_i:
+  public virtual POA_StdMeshers::StdMeshers_ImportSource1D,
+  public virtual SMESH_Hypothesis_i
+{
+ public:
+  // Constructor
+  StdMeshers_ImportSource1D_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ImportSource1D_i();
+
+  void SetSourceEdges(const ::SMESH::ListOfGroups& groups);
+  SMESH::string_array* GetSourceEdges();
+  void SetCopySourceMesh(::CORBA::Boolean toCopyMesh, ::CORBA::Boolean toCopyGroups);
+  void GetCopySourceMesh(::CORBA::Boolean& toCopyMesh, ::CORBA::Boolean& toCopyGroups);
+
+  // Get implementation
+  ::StdMeshers_ImportSource1D* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+  virtual void  UpdateAsMeshesRestored();
+
+ private:
+  SMESH::string_array_var _groupEntries;
+  std::vector< std::string > _groupIDs;
+};
+
+#endif
+
diff --git a/src/StdMeshers_I/StdMeshers_ImportSource2D_i.cxx b/src/StdMeshers_I/StdMeshers_ImportSource2D_i.cxx
new file mode 100644 (file)
index 0000000..7228b39
--- /dev/null
@@ -0,0 +1,282 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ImportSource2D_i.cxx
+//  Module : SMESH
+//
+#include "StdMeshers_ImportSource2D_i.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Group_i.hxx"
+#include "SMESH_PythonDump.hxx"
+#include "StdMeshers_ObjRefUlils.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource2D_i::StdMeshers_ImportSource2D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ImportSource2D_i::StdMeshers_ImportSource2D_i( PortableServer::POA_ptr thePOA,
+                                                          int                     theStudyId,
+                                                          ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ImportSource2D_i::StdMeshers_ImportSource2D_i" );
+  myBaseImpl = new ::StdMeshers_ImportSource2D( theGenImpl->GetANewId(),
+                                                theStudyId,
+                                                theGenImpl );
+  _groupEntries = new SMESH::string_array();
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource2D_i::~StdMeshers_ImportSource2D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ImportSource2D_i::~StdMeshers_ImportSource2D_i()
+{
+  MESSAGE( "StdMeshers_ImportSource2D_i::~StdMeshers_ImportSource2D_i" );
+}
+
+//=============================================================================
+/*!
+ *  SetSourceFaces
+ */
+//=============================================================================
+
+void StdMeshers_ImportSource2D_i::SetSourceFaces(const SMESH::ListOfGroups& groups)
+{
+  MESSAGE( "StdMeshers_ImportSource2D_i::SetSourceFaces" );
+  ASSERT( myBaseImpl );
+  try
+  {
+    std::vector<SMESH_Group*> smesh_groups;
+    std::vector<string> entries;
+    SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
+    for ( int i = 0; i < groups.length(); ++i )
+      if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( groups[i] ))
+      {
+        if ( gp_i->GetType() != SMESH::FACE )
+          THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
+        smesh_groups.push_back( gp_i->GetSmeshGroup() );
+
+        SALOMEDS::SObject_var so = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject(study, groups[i]);
+        if ( !so->_is_nil())
+        {
+          CORBA::String_var entry = so->GetID();
+          entries.push_back( entry.in() );
+        }
+      }
+    this->GetImpl()->SetGroups( smesh_groups );
+
+    _groupEntries = new SMESH::string_array;
+    _groupEntries->length( entries.size ());
+    for ( int i = 0; i < entries.size(); ++i )
+      _groupEntries[i] = entries[i].c_str();
+  }
+  catch ( SALOME_Exception& S_ex )
+  {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceFaces( " << groups << " )";
+}
+
+//=============================================================================
+/*!
+ * Return entries of groups
+ */
+//=============================================================================
+
+SMESH::string_array*  StdMeshers_ImportSource2D_i::GetSourceFaces()
+{
+  MESSAGE( "StdMeshers_ImportSource2D_i::GetImportSource" );
+  SMESH::string_array_var res = new SMESH::string_array( _groupEntries );
+  return res._retn();
+}
+
+//================================================================================
+/*!
+ * \brief Set to copy mesh and groups
+ */
+//================================================================================
+
+void StdMeshers_ImportSource2D_i::SetCopySourceMesh(CORBA::Boolean toCopyMesh,
+                                                    CORBA::Boolean toCopyGroups)
+{
+  GetImpl()->SetCopySourceMesh(toCopyMesh,toCopyGroups);
+  SMESH::TPythonDump() << _this() << ".SetCopySourceMesh( "
+                       << toCopyMesh << ", " << toCopyGroups << " )";
+}
+
+//================================================================================
+/*!
+ * \brief Return "to copy mesh and groups"
+ */
+//================================================================================
+
+void StdMeshers_ImportSource2D_i::GetCopySourceMesh(CORBA::Boolean& toCopyMesh,
+                                                    CORBA::Boolean& toCopyGroups)
+{
+  GetImpl()->GetCopySourceMesh(toCopyMesh,toCopyGroups);
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_ImportSource2D_i::SaveTo()
+{
+  std::ostringstream os;
+  os << " " << _groupEntries->length();
+
+  SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
+  for ( int i = 0; i < _groupEntries->length(); ++i )
+  {
+    // entry
+    os << " " << _groupEntries[i];
+
+    // id
+    SALOMEDS::SObject_var groupSO = study->FindObjectID( _groupEntries[i] );
+    CORBA::Object_var groupObj;
+    if ( !groupSO->_is_nil() )
+      groupObj = groupSO->GetObject();
+    StdMeshers_ObjRefUlils::SaveToStream( groupObj, os );
+  }
+
+  myBaseImpl->SaveTo( os );
+  cout << "SaveTo() " << os.str() << endl;
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_ImportSource2D_i::LoadFrom( const char* theStream )
+{
+  std::istringstream is( theStream );
+
+  int nbGroups;
+  is >> nbGroups;
+
+  _groupEntries = new SMESH::string_array;
+  _groupEntries->length( nbGroups );
+  std::string id, entry;
+  for ( int i = 0; i < _groupEntries->length(); ++i )
+  {
+    if ( is >> entry )
+      _groupEntries[i] = entry.c_str();
+    else
+    {
+      _groupEntries->length( i );
+      is.clear(ios::badbit | is.rdstate());
+      break;
+    }
+    if ( is >> id )
+      _groupIDs.push_back( id );
+    else
+    {
+      is.clear(ios::badbit | is.rdstate());
+      break;
+    }
+  }
+
+  myBaseImpl->LoadFrom( is );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve groups by their ids loaded by LoadFrom()
+ * This is possible only when all meshes are fully loaded
+ */
+//================================================================================
+
+void StdMeshers_ImportSource2D_i::UpdateAsMeshesRestored()
+{
+  std::vector<SMESH_Group*> smesh_groups;
+  for ( unsigned i = 0; i < _groupIDs.size(); ++i )
+  {
+    std::istringstream is( _groupIDs[i].c_str() );
+    SMESH::SMESH_GroupBase_var group =
+      StdMeshers_ObjRefUlils::LoadObjectFromStream<SMESH::SMESH_GroupBase>( is );
+    if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( group ))
+      smesh_groups.push_back( gp_i->GetSmeshGroup() );
+  }
+  cout << "UpdateAsMeshesRestored(): " << smesh_groups.size() << endl;
+  GetImpl()->RestoreGroups(smesh_groups);
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ImportSource2D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ImportSource2D* StdMeshers_ImportSource2D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_ImportSource2D_i::GetImpl" );
+  return ( ::StdMeshers_ImportSource2D* )myBaseImpl;
+}
+
+//================================================================================
+/*!
+ * \brief Verify whether hypothesis supports given entity type 
+  * \param type - dimension (see SMESH::Dimension enumeration)
+  * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
+ * 
+ * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration)
+ */
+//================================================================================  
+CORBA::Boolean StdMeshers_ImportSource2D_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_2D;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ImportSource2D_i.hxx b/src/StdMeshers_I/StdMeshers_ImportSource2D_i.hxx
new file mode 100644 (file)
index 0000000..7f2d712
--- /dev/null
@@ -0,0 +1,74 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ImportSource2D_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_ImportSource2D_I_HXX_
+#define _SMESH_ImportSource2D_I_HXX_
+
+#include "SMESH_StdMeshers_I.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ImportSource.hxx"
+
+class SMESH_Gen;
+
+class STDMESHERS_I_EXPORT StdMeshers_ImportSource2D_i:
+  public virtual POA_StdMeshers::StdMeshers_ImportSource2D,
+  public virtual SMESH_Hypothesis_i
+{
+ public:
+  // Constructor
+  StdMeshers_ImportSource2D_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ImportSource2D_i();
+
+  void SetSourceFaces(const ::SMESH::ListOfGroups& groups);
+  SMESH::string_array*  GetSourceFaces();
+  void SetCopySourceMesh(::CORBA::Boolean toCopyMesh, ::CORBA::Boolean toCopyGroups);
+  void GetCopySourceMesh(::CORBA::Boolean& toCopyMesh, ::CORBA::Boolean& toCopyGroups);
+
+  // Get implementation
+  ::StdMeshers_ImportSource2D* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+  virtual void  UpdateAsMeshesRestored();
+
+ private:
+  SMESH::string_array_var _groupEntries;
+  std::vector< std::string > _groupIDs;
+};
+
+#endif
+
diff --git a/src/StdMeshers_I/StdMeshers_Import_1D2D_i.cxx b/src/StdMeshers_I/StdMeshers_Import_1D2D_i.cxx
new file mode 100644 (file)
index 0000000..e2489e5
--- /dev/null
@@ -0,0 +1,67 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_Import_1D2D_i.cxx
+//  Module : SMESH
+//
+#include "StdMeshers_Import_1D2D_i.hxx"
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+using namespace std;
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_Import_1D2D_i::StdMeshers_Import_1D2D_i
+ */
+//=============================================================================
+
+StdMeshers_Import_1D2D_i::StdMeshers_Import_1D2D_i (PortableServer::POA_ptr thePOA,
+                                                    int                     theStudyId,
+                                                    ::SMESH_Gen*            theGenImpl)
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA ), 
+    SMESH_Algo_i( thePOA ),
+    SMESH_2D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Import_1D2D_i::StdMeshers_Import_1D2D_i" );
+  myBaseImpl = new ::StdMeshers_Import_1D2D(theGenImpl->GetANewId(),
+                                            theStudyId,
+                                            theGenImpl );
+}
+
+//-----------------------------------------------------------------------------
+
+StdMeshers_Import_1D2D_i::~StdMeshers_Import_1D2D_i()
+{
+  MESSAGE( "StdMeshers_Import_1D2D_i::~StdMeshers_Import_1D2D_i" );
+}
+
+//-----------------------------------------------------------------------------
+
+::StdMeshers_Import_1D2D* StdMeshers_Import_1D2D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Import_1D2D_i::GetImpl" );
+  return ( ::StdMeshers_Import_1D2D* )myBaseImpl;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_Import_1D2D_i.hxx b/src/StdMeshers_I/StdMeshers_Import_1D2D_i.hxx
new file mode 100644 (file)
index 0000000..8e56966
--- /dev/null
@@ -0,0 +1,53 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_Import_1D2D_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_Import_1D2D_I_HXX_
+#define _SMESH_Import_1D2D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_2D_Algo_i.hxx"
+#include "StdMeshers_Import_1D2D.hxx"
+
+class SMESH_Gen;
+
+class StdMeshers_Import_1D2D_i:
+  public virtual POA_StdMeshers::StdMeshers_Import_1D2D,
+  public virtual SMESH_2D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_Import_1D2D_i( PortableServer::POA_ptr thePOA,
+                            int                     theStudyId,
+                            ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_Import_1D2D_i();
+
+  // Get implementation
+  ::StdMeshers_Import_1D2D* GetImpl();
+};
+
+
+#endif
diff --git a/src/StdMeshers_I/StdMeshers_Import_1D_i.cxx b/src/StdMeshers_I/StdMeshers_Import_1D_i.cxx
new file mode 100644 (file)
index 0000000..02b3e29
--- /dev/null
@@ -0,0 +1,85 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_Import_1D_i.cxx
+//           Moved here from SMESH_Import_1D_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//
+#include "StdMeshers_Import_1D_i.hxx"
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_Import_1D_i::StdMeshers_Import_1D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_Import_1D_i::StdMeshers_Import_1D_i( PortableServer::POA_ptr thePOA,
+                                                int                     theStudyId,
+                                                ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA ), 
+    SMESH_Algo_i( thePOA ),
+    SMESH_1D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Import_1D_i::StdMeshers_Import_1D_i" );
+  myBaseImpl = new ::StdMeshers_Import_1D( theGenImpl->GetANewId(),
+                                           theStudyId,
+                                           theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_Import_1D_i::~StdMeshers_Import_1D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_Import_1D_i::~StdMeshers_Import_1D_i()
+{
+  MESSAGE( "StdMeshers_Import_1D_i::~StdMeshers_Import_1D_i" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_Import_1D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_Import_1D* StdMeshers_Import_1D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Import_1D_i::GetImpl" );
+  return ( ::StdMeshers_Import_1D* )myBaseImpl;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_Import_1D_i.hxx b/src/StdMeshers_I/StdMeshers_Import_1D_i.hxx
new file mode 100644 (file)
index 0000000..d0e1d97
--- /dev/null
@@ -0,0 +1,54 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_Import_1D_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_Import_1D_I_HXX_
+#define _SMESH_Import_1D_I_HXX_
+
+#include "SMESH_StdMeshers_I.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_1D_Algo_i.hxx"
+#include "StdMeshers_Import_1D.hxx"
+
+class STDMESHERS_I_EXPORT StdMeshers_Import_1D_i:
+  public virtual POA_StdMeshers::StdMeshers_Import_1D,
+  public virtual SMESH_1D_Algo_i
+{
+ public:
+  // Constructor
+  StdMeshers_Import_1D_i( PortableServer::POA_ptr thePOA,
+                          int                     theStudyId,
+                          ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_Import_1D_i();
+
+  // Get implementation
+  ::StdMeshers_Import_1D* GetImpl();
+};
+
+#endif
index f50fae594d4c96aa2f8fe37fd0530a5e448dc22c..a8f6a9824f19d2fa46cf8bb0d67375b3c7d1f6e6 100644 (file)
@@ -56,6 +56,8 @@
 #include "StdMeshers_SegmentLengthAroundVertex_i.hxx"
 #include "StdMeshers_MaxLength_i.hxx"
 #include "StdMeshers_QuadrangleParams_i.hxx"
+#include "StdMeshers_ImportSource1D_i.hxx"
+#include "StdMeshers_ImportSource2D_i.hxx"
 
 #include "StdMeshers_Regular_1D_i.hxx"
 #include "StdMeshers_MEFISTO_2D_i.hxx"
@@ -67,6 +69,8 @@
 #include "StdMeshers_CompositeSegment_1D_i.hxx"
 #include "StdMeshers_UseExisting_1D2D_i.hxx"
 #include "StdMeshers_RadialQuadrangle_1D2D_i.hxx"
+#include "StdMeshers_Import_1D_i.hxx"
+#include "StdMeshers_Import_1D2D_i.hxx"
 
 
 template <class T> class StdHypothesisCreator_i:public HypothesisCreator_i<T>
@@ -141,6 +145,10 @@ STDMESHERS_I_EXPORT
       aCreator = new StdHypothesisCreator_i<StdMeshers_SegmentLengthAroundVertex_i>;
     else if (strcmp(aHypName, "QuadrangleParams") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_QuadrangleParams_i>;
+    else if (strcmp(aHypName, "ImportSource1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ImportSource1D_i>;
+    else if (strcmp(aHypName, "ImportSource2D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ImportSource2D_i>;
 
     // Algorithms
     else if (strcmp(aHypName, "Regular_1D") == 0)
@@ -171,6 +179,10 @@ STDMESHERS_I_EXPORT
       aCreator = new StdHypothesisCreator_i<StdMeshers_UseExisting_2D_i>;
     else if (strcmp(aHypName, "RadialQuadrangle_1D2D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_RadialQuadrangle_1D2D_i>;
+    else if (strcmp(aHypName, "Import_1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Import_1D_i>;
+    else if (strcmp(aHypName, "Import_1D2D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Import_1D2D_i>;
     else ;
 
     return aCreator;