#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 );
return true;
}
-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;
+}