+void HYDROData_Zone::SetMergeType( const MergeType& theType )
+{
+ TDataStd_Integer::Set( myLab.FindChild( DataTag_MergeType ), (int)theType );
+}
+
+HYDROData_Zone::MergeType HYDROData_Zone::GetMergeType() const
+{
+ MergeType aMergeType = Merge_UNKNOWN;
+
+ TDF_Label aLabel = myLab.FindChild( DataTag_MergeType, false );
+ if ( !aLabel.IsNull() )
+ {
+ Handle(TDataStd_Integer) anInt;
+ if ( aLabel.FindAttribute( TDataStd_Integer::GetID(), anInt ) )
+ aMergeType = (MergeType)anInt->Get();
+ }
+
+ return aMergeType;
+}
+
+void HYDROData_Zone::SetMergeObject( const Handle(HYDROData_Entity)& theObject )
+{
+ SetReferenceObject( theObject, DataTag_MergeObject );
+}
+
+Handle(HYDROData_Entity) HYDROData_Zone::GetMergeObject() const
+{
+ return Handle(HYDROData_Entity)::DownCast(
+ GetReferenceObject( DataTag_MergeObject ) );
+}
+
+void HYDROData_Zone::RemoveMergeObject()
+{
+ ClearReferenceObjects( DataTag_MergeObject );
+}
+
+bool HYDROData_Zone::AddObject( const Handle(HYDROData_Entity)& theObject )
+{
+ if ( theObject.IsNull() )
+ return false;
+
+ if ( !theObject->IsKind( STANDARD_TYPE(HYDROData_ArtificialObject) ) &&
+ !theObject->IsKind( STANDARD_TYPE(HYDROData_NaturalObject) ) )
+ return false; // Wrong type of object
+
+ if ( HasReference( theObject, DataTag_Object ) )
+ return false; // Object is already in reference list
+
+ AddReferenceObject( theObject, DataTag_Object );
+
+ return true;
+}
+
+HYDROData_SequenceOfObjects HYDROData_Zone::GetObjects() const
+{
+ return GetReferenceObjects( DataTag_Object );
+}
+
+void HYDROData_Zone::RemoveObjects()
+{
+ ClearReferenceObjects( DataTag_Object );
+}
+
+bool HYDROData_Zone::IsSubmersible() const
+{
+ HYDROData_SequenceOfObjects anObjects = GetObjects();
+ HYDROData_SequenceOfObjects::Iterator anObjsIter( anObjects );
+ for ( ; anObjsIter.More(); anObjsIter.Next() )
+ {
+ Handle(HYDROData_Object) aRefGeomObj =
+ Handle(HYDROData_Object)::DownCast( anObjsIter.Value() );
+ if ( aRefGeomObj.IsNull() )
+ continue;
+
+ if( !aRefGeomObj->IsSubmersible() )
+ return false; //if one of geometry objects is not submersible the zone is considered as not submersible
+ }
+ return true;
+}