#include "HYDROData_Iterator.h"
#include "HYDROData_NaturalObject.h"
#include "HYDROData_PolylineXY.h"
+#include "HYDROData_StricklerTable.h"
+#include "HYDROData_LandCover.h"
#include "HYDROData_SplittedShapesGroup.h"
#include "HYDROData_Region.h"
#include "HYDROData_Tool.h"
QMap<QString, Handle(HYDROData_Region)> aRegionsMap; //object name to region
QMap<QString, QString> aRegionNameToObjNameMap;
QString aZonesPref = CALCULATION_ZONES_PREF;
- HYDROData_PriorityQueue aPr( this );
+ HYDROData_PriorityQueue aPr( this, DataTag_CustomRules );
// 1. First we create a default region for each object included into the calculation case
HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
{
const HYDROData_SplitToZonesTool::SplitData& aSplitData = anIter.next();
HYDROData_Zone::MergeAltitudesType aMergeType;
- Handle(HYDROData_Object) aRegObj = aPr.GetMostPriorityObject( aSplitData.ObjectNames, aMergeType );
+ Handle(HYDROData_Object) aRegObj =
+ Handle(HYDROData_Object)::DownCast( aPr.GetMostPriorityObject( aSplitData.ObjectNames, aMergeType ) );
if( aRegObj.IsNull() )
continue;
Handle(HYDROData_Region) aRegion = aRegionsMap[aRegObj->GetName()];
SetToUpdate( !aPrevPolyline.IsNull() || IsMustBeUpdated() );
}
+void HYDROData_CalculationCase::SetStricklerTable( const Handle(HYDROData_StricklerTable)& theStricklerTable )
+{
+ Handle(HYDROData_StricklerTable) aPrevStricklerTable = GetStricklerTable();
+
+ SetReferenceObject( theStricklerTable, DataTag_StricklerTable );
+
+ // Indicate model of the need to update land covers partition
+ SetToUpdate( !IsEqual( aPrevStricklerTable, theStricklerTable ) || IsMustBeUpdated() );
+}
+
+Handle(HYDROData_StricklerTable) HYDROData_CalculationCase::GetStricklerTable() const
+{
+ return Handle(HYDROData_StricklerTable)::DownCast(
+ GetReferenceObject( DataTag_StricklerTable ) );
+}
+
+void HYDROData_CalculationCase::RemoveStricklerTable()
+{
+ Handle(HYDROData_StricklerTable) aPrevStricklerTable = GetStricklerTable();
+
+ ClearReferenceObjects( DataTag_StricklerTable );
+
+ // Indicate model of the need to update land covers partition
+ SetToUpdate( !aPrevStricklerTable.IsNull() || IsMustBeUpdated() );
+}
+
+bool HYDROData_CalculationCase::AddLandCover( const Handle(HYDROData_LandCover)& theLandCover )
+{
+ if ( HasReference( theLandCover, DataTag_LandCover ) )
+ return false; // Land cover is already in reference list
+
+ AddReferenceObject( theLandCover, DataTag_LandCover );
+
+ // Indicate model of the need to update land covers partition
+ SetToUpdate( true );
+
+ return true;
+}
+
+HYDROData_SequenceOfObjects HYDROData_CalculationCase::GetLandCovers() const
+{
+ return GetReferenceObjects( DataTag_LandCover );
+}
+
+void HYDROData_CalculationCase::RemoveLandCover( const Handle(HYDROData_LandCover)& theLandCover )
+{
+ if ( theLandCover.IsNull() )
+ return;
+
+ RemoveReferenceObject( theLandCover->Label(), DataTag_LandCover );
+
+ // Indicate model of the need to update land cover partition
+ SetToUpdate( true );
+}
+
+void HYDROData_CalculationCase::RemoveLandCovers()
+{
+ ClearReferenceObjects( DataTag_LandCover );
+
+ // Indicate model of the need to update land cover partition
+ SetToUpdate( true );
+}
+
Handle(HYDROData_Region) HYDROData_CalculationCase::AddNewRegion( const Handle(HYDROData_Zone)& theZone )
{
Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
{
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 );
// 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;
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 = HYDROData_GeomTool::GetFreeName( theStudy, 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 )
+void HYDROData_CalculationCase::ClearRules( HYDROData_CalculationCase::DataTag theDataTag,
+ const bool theIsSetToUpdate )
{
- TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
+ TDF_Label aRulesLab = myLab.FindChild( theDataTag );
HYDROData_PriorityQueue::ClearRules( aRulesLab );
// Indicate model of the need to update splitting
}
}
-void HYDROData_CalculationCase::AddRule( const Handle(HYDROData_Object)& theObject1,
+void HYDROData_CalculationCase::AddRule( const Handle(HYDROData_Entity)& theObject1,
HYDROData_PriorityType thePriority,
- const Handle(HYDROData_Object)& theObject2,
- HYDROData_Zone::MergeAltitudesType theMergeType )
+ const Handle(HYDROData_Entity)& theObject2,
+ HYDROData_Zone::MergeAltitudesType theMergeType,
+ HYDROData_CalculationCase::DataTag theDataTag )
{
- TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
+ TDF_Label aRulesLab = myLab.FindChild( theDataTag );
HYDROData_PriorityQueue::AddRule( aRulesLab, theObject1, thePriority, theObject2, theMergeType );
// Indicate model of the need to update splitting
}
bool HYDROData_CalculationCase::GetRule( int theIndex,
- Handle(HYDROData_Object)& theObject1,
+ Handle(HYDROData_Entity)& theObject1,
HYDROData_PriorityType& thePriority,
- Handle(HYDROData_Object)& theObject2,
- HYDROData_Zone::MergeAltitudesType& theMergeType ) const
+ Handle(HYDROData_Entity)& theObject2,
+ HYDROData_Zone::MergeAltitudesType& theMergeType,
+ HYDROData_CalculationCase::DataTag& theDataTag) const
{
- TDF_Label aRulesLab = myLab.FindChild( DataTag_CustomRules );
+ TDF_Label aRulesLab = myLab.FindChild( theDataTag );
return HYDROData_PriorityQueue::GetRule( aRulesLab, theIndex,
theObject1, thePriority, theObject2, theMergeType );
}
+
+void HYDROData_CalculationCase::SetAssignmentLandCoverMode( AssignmentMode theMode )
+{
+ TDF_Label aModeLab = myLab.FindChild( DataTag_AssignmentLandCoverMode );
+ TDataStd_Integer::Set( aModeLab, ( int ) theMode );
+
+ // Indicate model of the need to update land covers partition
+ SetToUpdate( true );
+}
+
+HYDROData_CalculationCase::AssignmentMode HYDROData_CalculationCase::GetAssignmentLandCoverMode() const
+{
+ Handle(TDataStd_Integer) aModeAttr;
+ bool isOK = myLab.FindChild( DataTag_AssignmentLandCoverMode ).FindAttribute( TDataStd_Integer::GetID(), aModeAttr );
+ if( isOK )
+ return ( AssignmentMode ) aModeAttr->Get();
+ else
+ return MANUAL;
+}