Salome HOME
refs #524: draft implementation of "Recognize contours" operation.
[modules/hydro.git] / src / HYDROData / HYDROData_CalculationCase.cxx
index 5e0ce79ec10159a36f052a1b24c417a36676baee..56f5259ac9eb0f9b9e817026cd5804f27af0b224 100644 (file)
@@ -1,3 +1,20 @@
+// Copyright (C) 2014-2015  EDF-R&D
+// 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, or (at your option) any later version.
+//
+// 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
+//
 
 #include "HYDROData_CalculationCase.h"
 
@@ -11,6 +28,7 @@
 #include "HYDROData_SplittedShapesGroup.h"
 #include "HYDROData_Region.h"
 #include "HYDROData_Tool.h"
+#include "HYDROData_GeomTool.h"
 
 #include <GEOMBase.h>
 
 
 #define EXPORT_NAME "HYDRO_" + GetName()
 
-#include <SALOME_NamingService.hxx>
-#include <SALOME_LifeCycleCORBA.hxx>
-
-
-
-
-
 IMPLEMENT_STANDARD_HANDLE(HYDROData_CalculationCase, HYDROData_Entity)
 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_CalculationCase, HYDROData_Entity)
 
@@ -180,19 +191,9 @@ QStringList HYDROData_CalculationCase::DumpToPython( MapOfTreatedObjects& theTre
       if ( aRegion.IsNull() )
         continue;
 
-      QString aRegionName = aRegion->GetName();
-
-      HYDROData_SequenceOfObjects aZones = aRegion->GetZones();
-      HYDROData_SequenceOfObjects::Iterator aZonesIter( aZones );
-      for ( ; aZonesIter.More(); aZonesIter.Next() )
-      {
-        Handle(HYDROData_Zone) aRegZone =
-          Handle(HYDROData_Zone)::DownCast( aZonesIter.Value() );
-        if ( aRegZone.IsNull() )
-          continue;
-
-        // TODO
-      }
+      theTreatedObjects.insert( aRegion->GetName(), aRegion );
+      QStringList aRegDump = aRegion->DumpToPython( theTreatedObjects );
+      aResList << aRegDump;
     }
   }
 
@@ -228,6 +229,7 @@ void HYDROData_CalculationCase::DumpSampleMeshing( QStringList& theResList,
   theResList << "# Meshing";
   theResList << "import SMESH, SALOMEDS";
   theResList << "from salome.smesh import smeshBuilder";
+  theResList << "from salome.geom import geomBuilder";
 
   theResList << QString( "smesh = smeshBuilder.New( %1 )" ).arg( theStudyName );
   theResList << QString( "%1 = smesh.Mesh( %2 )" ).arg( theMeshName ).arg( theGeomShapeName );
@@ -244,6 +246,16 @@ void HYDROData_CalculationCase::DumpSampleMeshing( QStringList& theResList,
   theResList << "smesh.SetName( Max_Size_1, 'Max Size_1' )";
   theResList << "smesh.SetName( Max_Element_Area_1, 'Max. Element Area_1' )";
   theResList << QString( "smesh.SetName( %1.GetMesh(), '%1' )" ).arg( theMeshName );
+
+  theResList << "";
+  theResList << "# Greate SMESH groups";
+  theResList << QString( "geompy = geomBuilder.New( %1 )" ).arg( theStudyName );
+  theResList << QString( "geom_groups = geompy.GetGroups( %1 )" ).arg( theGeomShapeName );
+  theResList << QString( "for group in geom_groups:" );
+  theResList << QString( "    smesh_group = %1.GroupOnGeom(group, group.GetName(), SMESH.EDGE)" )
+                .arg( theMeshName );
+  theResList << QString( "    smesh.SetName(smesh_group, group.GetName())" );
+  theResList << QString( "    print \"SMESH group '%s': %s\" % (smesh_group.GetName(), smesh_group)" );
 }
 
 HYDROData_SequenceOfObjects HYDROData_CalculationCase::GetAllReferenceObjects() const
@@ -907,18 +919,9 @@ Handle(HYDROData_SplittedShapesGroup) HYDROData_CalculationCase::addNewSplittedG
 
 QString HYDROData_CalculationCase::Export( int theStudyId ) const
 {
-  int argc = 0;
-  char** argv = 0;
-  CORBA::ORB_var anORB = CORBA::ORB_init( argc, argv, "omniORB4"/*CORBA::ORB_ID*/ );
-  SALOME_NamingService aNameService( anORB );
-  SALOME_LifeCycleCORBA aLCC( &aNameService );
-  Engines::EngineComponent_var aComponent = aLCC.FindOrLoad_Component( "FactoryServer", "GEOM" );
-  GEOM::GEOM_Gen_var aGEOMEngine = GEOM::GEOM_Gen::_narrow( aComponent );
+  GEOM::GEOM_Gen_var aGEOMEngine = HYDROData_GeomTool::GetGeomGen();
+  SALOMEDS::Study_var aDSStudy = HYDROData_GeomTool::GetStudyByID( theStudyId );
   
-  CORBA::Object_var aSMObject = aNameService.Resolve("/myStudyManager");
-  SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
-  SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID( theStudyId );
-
   QString aGeomObjEntry;
   bool isOK = Export( aGEOMEngine, aDSStudy, aGeomObjEntry );
   return isOK ? aGeomObjEntry : QString();
@@ -958,7 +961,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
   {
     Handle(HYDROData_Region) aRegion =
       Handle(HYDROData_Region)::DownCast( aRegionIter.Value() );
-    if( aRegion.IsNull() )
+    if( aRegion.IsNull() || !aRegion->IsSubmersible() )
       continue;
 
     TopoDS_Shape aRegionShape = aRegion->GetShape( &aSeqOfGroupsDefs );
@@ -1026,7 +1029,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   // Publish the sewed shape
   QString aName = EXPORT_NAME;
   GEOM::GEOM_Object_ptr aMainShape = 
-    publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName, theGeomObjEntry );
+    HYDROData_GeomTool::publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName, theGeomObjEntry );
 
   if ( aMainShape->_is_nil() )  
     return false;
@@ -1123,52 +1126,6 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   return true;
 }
 
-GEOM::GEOM_Object_ptr HYDROData_CalculationCase::publishShapeInGEOM( 
-  GEOM::GEOM_Gen_var theGeomEngine, SALOMEDS::Study_ptr theStudy,
-  const TopoDS_Shape& theShape, const QString& theName,
-  QString& theGeomObjEntry ) const
-{
-  theGeomObjEntry = "";
-  GEOM::GEOM_Object_var aGeomObj;
-
-  if ( theGeomEngine->_is_nil() || theStudy->_is_nil() ||
-       theShape.IsNull() ) {
-    return aGeomObj._retn();
-  }
-
-  std::ostringstream aStreamShape;
-  // Write TopoDS_Shape in ASCII format to the stream
-  BRepTools::Write( theShape, aStreamShape );
-  // Returns the number of bytes that have been stored in the stream's buffer.
-  int aSize = aStreamShape.str().size();
-  // Allocate octect buffer of required size
-  CORBA::Octet* anOctetBuf = SALOMEDS::TMPFile::allocbuf( aSize );
-  // Copy ostrstream content to the octect buffer
-  memcpy( anOctetBuf, aStreamShape.str().c_str(), aSize );
-  // Create TMPFile
-  SALOMEDS::TMPFile_var aSeqFile = new SALOMEDS::TMPFile( aSize, aSize, anOctetBuf, 1 );
-
-  // Restore shape from the stream and get the GEOM object
-  GEOM::GEOM_IInsertOperations_var anInsOp = theGeomEngine->GetIInsertOperations( theStudy->StudyId() );
-  aGeomObj = anInsOp->RestoreShape( aSeqFile );
-  
-  // Puplish the GEOM object
-  if ( !aGeomObj->_is_nil() ) {
-    QString aName = GEOMBase::GetDefaultName( theName );
-
-    SALOMEDS::SObject_var aResultSO = 
-      theGeomEngine->PublishInStudy( theStudy, SALOMEDS::SObject::_nil(), 
-                                     aGeomObj, qPrintable( aName ) );
-    if ( aResultSO->_is_nil() ) {
-      aGeomObj = GEOM::GEOM_Object::_nil();
-    }
-    else
-      theGeomObjEntry = aResultSO->GetID();
-  }
-
-  return aGeomObj._retn();
-}
-
 void HYDROData_CalculationCase::ClearRules( const bool theIsSetToUpdate )
 {
   TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );