+
+bool HYDROData_PriorityQueue::GetRule( const TDF_Label& theRulesLab,
+ int theIndex,
+ Handle(HYDROData_Entity)& theObject1,
+ HYDROData_PriorityType& thePriority,
+ Handle(HYDROData_Entity)& theObject2,
+ HYDROData_Zone::MergeType& 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 = HYDROData_Iterator::Object( aRefs1->First() );
+ thePriority = ( HYDROData_PriorityType ) aPriorityAttr->Get();
+ theObject2 = HYDROData_Iterator::Object( aRefs2->First() );
+ theMergeType = ( HYDROData_Zone::MergeType ) aMergeAttr->Get();
+ }
+ return isOK;
+}