#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)
QStringList HYDROData_CalculationCase::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
{
QStringList aResList = dumpObjectCreation( theTreatedObjects );
+ aResList.prepend( "# Calculation case" );
QString aCalculName = GetObjPyName();
AssignmentMode aMode = GetAssignmentMode();
- QString aModeStr = aMode==MANUAL ? "MANUAL" : "AUTOMATIC";
+ QString aModeStr = aMode==MANUAL ? "HYDROData_CalculationCase.MANUAL" : "HYDROData_CalculationCase.AUTOMATIC";
aResList << QString( "%0.SetAssignmentMode( %1 )" ).arg( aCalculName ).arg( aModeStr );
HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
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();
if( aRegion.IsNull() )
continue;
Handle(HYDROData_Zone) aRegionZone = aRegion->addNewZone( theDoc, aZonesPref, aSplitData.Face(), aSplitData.ObjectNames );
+
+ if( aSplitData.ObjectNames.count() > 1 && aMergeType==HYDROData_Zone::Merge_UNKNOWN )
+ {
+ qDebug( "Error in algorithm: unresolved conflicts" );
+ }
+
switch( aMergeType )
{
case HYDROData_Zone::Merge_ZMIN:
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();
}
-void HYDROData_CalculationCase::ClearRules()
+void HYDROData_CalculationCase::ClearRules( const bool theIsSetToUpdate )
{
TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
HYDROData_PriorityQueue::ClearRules( aRulesLab );
+
+ // Indicate model of the need to update splitting
+ if ( theIsSetToUpdate ) {
+ SetToUpdate( true );
+ }
}
void HYDROData_CalculationCase::AddRule( const Handle(HYDROData_Object)& theObject1,
{
TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
HYDROData_PriorityQueue::AddRule( aRulesLab, theObject1, thePriority, theObject2, theMergeType );
+
+ // Indicate model of the need to update splitting
+ SetToUpdate( true );
}
QString HYDROData_CalculationCase::DumpRules() const
{
TDF_Label aModeLab = myLab.FindChild( DataTag_AssignmentMode );
TDataStd_Integer::Set( aModeLab, ( int ) theMode );
+
+ // Indicate model of the need to update splitting
+ SetToUpdate( true );
}
HYDROData_CalculationCase::AssignmentMode HYDROData_CalculationCase::GetAssignmentMode() const
myLastWarning.Data = theData;
}
-int HYDROData_CalculationCase::GetRulesCount() const
-{
- TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
- return HYDROData_PriorityQueue::GetRulesCount( aRulesLab );
-}
-
bool HYDROData_CalculationCase::GetRule( int theIndex,
Handle(HYDROData_Object)& theObject1,
HYDROData_PriorityType& thePriority,