Handle(HYDROData_Object) HYDROData_PriorityQueue::GetMostPriorityObject( const QStringList& theZoneObjects,
HYDROData_Zone::MergeAltitudesType& theMergeType ) const
{
+ QStringList aSortedZoneObjects;
+ for( int i=myGeomObjects.Lower(), n=myGeomObjects.Upper(); i<=n; i++ )
+ {
+ QString aName = myGeomObjects.Value( i )->GetName();
+ if( theZoneObjects.contains( aName ) )
+ aSortedZoneObjects.append( aName );
+ }
+
Handle(HYDROData_Object) aMostPriorityObj;
- theMergeType = HYDROData_Zone::Merge_Object;
- QStringList::const_iterator anIt = theZoneObjects.begin(), aLast = theZoneObjects.end();
+ theMergeType = HYDROData_Zone::Merge_UNKNOWN;
+ QStringList::const_iterator anIt = aSortedZoneObjects.begin(), aLast = aSortedZoneObjects.end();
for( ; anIt!=aLast; anIt++ )
{
HYDROData_Zone::MergeAltitudesType aLocalMerge = HYDROData_Zone::Merge_UNKNOWN;
Handle(HYDROData_Object) anObj = myNames[*anIt];
if( !anObj.IsNull() )
- if( aMostPriorityObj.IsNull() || IsMorePriority( anObj, aMostPriorityObj, aLocalMerge ) )
+ {
+ if( aMostPriorityObj.IsNull() )
{
aMostPriorityObj = anObj;
- theMergeType = aLocalMerge;
+ continue;
}
+
+ bool isMorePriority = IsMorePriority( anObj, aMostPriorityObj, aLocalMerge );
+
+ if( isMorePriority )
+ aMostPriorityObj = anObj;
+
+ if( aLocalMerge != HYDROData_Zone::Merge_UNKNOWN &&
+ ( theMergeType==HYDROData_Zone::Merge_UNKNOWN || isMorePriority ) )
+ theMergeType = aLocalMerge;
+ }
}
return aMostPriorityObj;
}
}
return aDump;
}
+
+void HYDROData_PriorityQueue::DumpRulesToPython( const TDF_Label& theRulesLab,
+ const QString& theCalcCaseName,
+ QStringList& theScript )
+{
+ HYDROData_ListOfRules aRules = GetRules( theRulesLab );
+ HYDROData_ListOfRules::const_iterator anIt = aRules.begin(), aLast = aRules.end();
+ for( ; anIt!=aLast; anIt++ )
+ {
+ QString anObj1 = anIt->Object1->GetObjPyName();
+ QString anObj2 = anIt->Object2->GetObjPyName();
+ QString aPriority = anIt->Priority == LESS ? "LESS" : "GREATER";
+ QString aMergeType;
+
+ switch( anIt->MergeType )
+ {
+ case HYDROData_Zone::Merge_UNKNOWN:
+ aMergeType = "HYDROData_Zone.Merge_UNKNOWN";
+ break;
+ case HYDROData_Zone::Merge_ZMIN:
+ aMergeType = "HYDROData_Zone.Merge_ZMIN";
+ break;
+ case HYDROData_Zone::Merge_ZMAX:
+ aMergeType = "HYDROData_Zone.Merge_ZMAX";
+ break;
+ case HYDROData_Zone::Merge_Object:
+ aMergeType = "HYDROData_Zone.Merge_Object";
+ break;
+ }
+
+ QString aRule = QString( "%0.AddRule( %1, %2, %3, %4 )" ).
+ arg( theCalcCaseName ).arg( anObj1 ).arg( aPriority ).arg( anObj2 ).arg( aMergeType );
+
+ theScript << aRule;
+ }
+}
+
+bool HYDROData_PriorityQueue::GetRule( const TDF_Label& theRulesLab,
+ int theIndex,
+ Handle(HYDROData_Object)& theObject1,
+ HYDROData_PriorityType& thePriority,
+ Handle(HYDROData_Object)& theObject2,
+ HYDROData_Zone::MergeAltitudesType& theMergeType )
+{
+ TDF_Label aRuleLabel = theRulesLab.FindChild( theIndex );
+
+ Handle(TDataStd_ReferenceList) aRefs1, aRefs2;
+ Handle(TDataStd_Integer) aPriorityAttr, aMergeAttr;
+
+ bool isObj1OK = aRuleLabel.FindChild ( Object1_Tag ). FindAttribute( TDataStd_ReferenceList::GetID(), aRefs1 );
+ bool isPriorityOK = aRuleLabel.FindChild( Priority_Tag ).FindAttribute( TDataStd_Integer::GetID(), aPriorityAttr );
+ bool isObj2OK = aRuleLabel.FindChild ( Object2_Tag ). FindAttribute( TDataStd_ReferenceList::GetID(), aRefs2 );
+ bool isMergeOK = aRuleLabel.FindChild ( Merge_Tag ). FindAttribute( TDataStd_Integer::GetID(), aMergeAttr );
+
+ bool isOK = isObj1OK && isPriorityOK && isObj2OK && isMergeOK;
+ if( isOK )
+ {
+ theObject1 = Handle_HYDROData_Object::DownCast( HYDROData_Iterator::Object( aRefs1->First() ) );
+ thePriority = ( HYDROData_PriorityType ) aPriorityAttr->Get();
+ theObject2 = Handle_HYDROData_Object::DownCast( HYDROData_Iterator::Object( aRefs2->First() ) );
+ theMergeType = ( HYDROData_Zone::MergeAltitudesType ) aMergeAttr->Get();
+ }
+ return isOK;
+}