+// Copyright (C) 2007-2015 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, 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"
#include "HYDROData_SplittedShapesGroup.h"
#include "HYDROData_Region.h"
#include "HYDROData_Tool.h"
+#include "HYDROData_GeomTool.h"
#include <GEOMBase.h>
QStringList HYDROData_CalculationCase::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
{
QStringList aResList = dumpObjectCreation( theTreatedObjects );
+ aResList.prepend( "# Calculation case" );
QString aCalculName = GetObjPyName();
aResList << QString( "%1.AddGeometryGroup( %2 );" ).arg( aCalculName ).arg( aGroupName );
}
- aResList << QString( "" );
Handle(HYDROData_PolylineXY) aBoundaryPolyline = GetBoundaryPolyline();
setPythonReferenceObject( theTreatedObjects, aResList, aBoundaryPolyline, "SetBoundaryPolyline" );
- aResList << QString( "" );
if( aMode==AUTOMATIC )
DumpRulesToPython( aCalculName, aResList );
aResList << QString( "" );
+ aResList << "# Start the algorithm of the partition and assignment";
aResList << QString( "%1.Update();" ).arg( aCalculName );
- aResList << QString( "" );
if( aMode==MANUAL )
{
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;
}
}
+ // Export calculation case
+ aResList << QString( "" );
+ aResList << "# Export of the calculation case";
+ QString aStudyName = "theStudy";
+ QString anEntryVar = aCalculName + "_entry";
+ aResList << QString( "%1 = %2.Export( %3._get_StudyId() )" ).arg( anEntryVar ).arg( aCalculName ).arg( aStudyName );
+
+ // Get geometry object and print debug information
+ aResList << "";
+ aResList << "# Get geometry shape and print debug information";
+ aResList << "import GEOM";
+ aResList << QString( "print \"Entry:\", %1" ).arg( anEntryVar );
+ QString aGeomShapeName = aCalculName + "_geom";
+ aResList << QString( "%1 = salome.IDToObject( str( %2 ) )" ).arg( aGeomShapeName ).arg( anEntryVar );
+ aResList << QString( "print \"Geom shape:\", %1" ).arg( aGeomShapeName );
+ aResList << QString( "print \"Geom shape name:\", %1.GetName()" ).arg( aGeomShapeName );
+
+ DumpSampleMeshing( aResList, aStudyName, aGeomShapeName, aCalculName+"_mesh" );
+
aResList << QString( "" );
return aResList;
}
+void HYDROData_CalculationCase::DumpSampleMeshing( QStringList& theResList,
+ const QString& theStudyName,
+ const QString& theGeomShapeName,
+ const QString& theMeshName ) const
+{
+ 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 );
+ theResList << QString( "MEFISTO_2D = %1.Triangle( algo=smeshBuilder.MEFISTO )" ).arg( theMeshName );
+ theResList << "Max_Element_Area_1 = MEFISTO_2D.MaxElementArea( 10 )";
+ theResList << QString( "Regular_1D = %1.Segment()" ).arg( theMeshName );
+ theResList << "Max_Size_1 = Regular_1D.MaxSize(10)";
+ theResList << QString( "isDone = %1.Compute()" ).arg( theMeshName );
+
+ theResList << "";
+ theResList << "# Set names of Mesh objects";
+ theResList << "smesh.SetName( MEFISTO_2D.GetAlgorithm(), 'MEFISTO_2D' )";
+ theResList << "smesh.SetName( Regular_1D.GetAlgorithm(), 'Regular_1D' )";
+ 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
{
HYDROData_SequenceOfObjects aResSeq = HYDROData_Entity::GetAllReferenceObjects();
bool isPrefix )
{
TDF_Label aNewLab = myLab.FindChild( DataTag_ChildRegion ).NewChild();
+ int aTag = aNewLab.Tag();
Handle(HYDROData_Region) aNewRegion =
Handle(HYDROData_Region)::DownCast( HYDROData_Iterator::CreateObject( aNewLab, KIND_REGION ) );
return aNewGroup;
}
+QString HYDROData_CalculationCase::Export( int theStudyId ) const
+{
+ GEOM::GEOM_Gen_var aGEOMEngine = HYDROData_GeomTool::GetGeomGen();
+ SALOMEDS::Study_var aDSStudy = HYDROData_GeomTool::GetStudyByID( theStudyId );
+
+ QString aGeomObjEntry;
+ bool isOK = Export( aGEOMEngine, aDSStudy, aGeomObjEntry );
+ return isOK ? aGeomObjEntry : QString();
+}
+
bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var theGeomEngine,
- SALOMEDS::Study_ptr theStudy ) const
+ SALOMEDS::Study_ptr theStudy,
+ QString& theGeomObjEntry ) const
{
HYDROData_ShapesGroup::SeqOfGroupsDefs aSeqOfGroupsDefs;
aFaces.Append( aRegionShape );
}
- return Export( theGeomEngine, theStudy, aFaces, aSeqOfGroupsDefs );
+ return Export( theGeomEngine, theStudy, aFaces, aSeqOfGroupsDefs, theGeomObjEntry );
}
bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var theGeomEngine,
SALOMEDS::Study_ptr theStudy,
const TopTools_ListOfShape& theFaces,
- const HYDROData_ShapesGroup::SeqOfGroupsDefs& theGroupsDefs ) const
+ const HYDROData_ShapesGroup::SeqOfGroupsDefs& theGroupsDefs,
+ QString& theGeomObjEntry ) const
{
// Sew faces
BRepBuilderAPI_Sewing aSewing( Precision::Confusion() * 10.0 );
// Publish the sewed shape
QString aName = EXPORT_NAME;
GEOM::GEOM_Object_ptr aMainShape =
- publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName );
+ publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName, theGeomObjEntry );
if ( aMainShape->_is_nil() )
return false;
GEOM::GEOM_Object_ptr HYDROData_CalculationCase::publishShapeInGEOM(
GEOM::GEOM_Gen_var theGeomEngine, SALOMEDS::Study_ptr theStudy,
- const TopoDS_Shape& theShape, const QString& theName ) const
+ const TopoDS_Shape& theShape, const QString& theName,
+ QString& theGeomObjEntry ) const
{
+ theGeomObjEntry = "";
GEOM::GEOM_Object_var aGeomObj;
if ( theGeomEngine->_is_nil() || theStudy->_is_nil() ||
// Puplish the GEOM object
if ( !aGeomObj->_is_nil() ) {
- QString aName = GEOMBase::GetDefaultName( theName );
+ QString aName = HYDROData_GeomTool::GetFreeName( theStudy, theName );
SALOMEDS::SObject_var aResultSO =
theGeomEngine->PublishInStudy( theStudy, SALOMEDS::SObject::_nil(),
if ( aResultSO->_is_nil() ) {
aGeomObj = GEOM::GEOM_Object::_nil();
}
+ else
+ theGeomObjEntry = aResultSO->GetID();
}
return aGeomObj._retn();