Salome HOME
The merging type of conflict bathymetries has been added for calculation region.
[modules/hydro.git] / src / HYDROData / HYDROData_Region.cxx
1
2 #include "HYDROData_Region.h"
3
4 #include "HYDROData_Document.h"
5 #include "HYDROData_Iterator.h"
6 #include "HYDROData_Zone.h"
7
8 #include <QStringList>
9
10 #include <TDataStd_Integer.hxx>
11
12 #define PYTHON_REGION_ID "KIND_REGION"
13
14 IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Entity)
15 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Entity)
16
17
18 HYDROData_Region::HYDROData_Region()
19  : HYDROData_Entity()
20 {
21   SetMergeType( Merge_ZMIN );
22 }
23
24 HYDROData_Region::~HYDROData_Region()
25 {
26 }
27
28 QStringList HYDROData_Region::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
29 {
30   QStringList aResList;
31
32   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this );
33   if ( aDocument.IsNull() )
34     return aResList;
35
36   QString aDocName = aDocument->GetDocPyName();
37   QString aRegionName = GetName();
38
39   aResList << QString( "%1 = %2.CreateObject( %3 );" )
40               .arg( aRegionName ).arg( aDocName ).arg( PYTHON_REGION_ID );
41   aResList << QString( "%1.SetName( \"%2\" );" )
42               .arg( aRegionName ).arg( aRegionName );
43   aResList << QString( "" );
44
45   HYDROData_SequenceOfObjects aZones = GetZones();
46   HYDROData_SequenceOfObjects::Iterator anIter( aZones );
47   for ( ; anIter.More(); anIter.Next() )
48   {
49     Handle(HYDROData_Zone) aRefZone =
50       Handle(HYDROData_Zone)::DownCast( anIter.Value() );
51     if ( !aRefZone.IsNull() )
52       setPythonReferenceObject( theTreatedObjects, aResList, aRefZone, "AddZone" );
53   }
54   aResList << QString( "" );
55
56   return aResList;
57 }
58
59 Handle(HYDROData_Zone) HYDROData_Region::AddNewZone()
60 {
61   TDF_Label aNewLab = myLab.FindChild( ChildTag_Zone ).NewChild();
62
63   return Handle(HYDROData_Zone)::DownCast(
64     HYDROData_Iterator::CreateObject( aNewLab, KIND_ZONE ) );
65 }
66
67 void HYDROData_Region::RemoveChildZones()
68 {
69   myLab.FindChild( ChildTag_Zone ).ForgetAllAttributes( true );
70 }
71
72 void HYDROData_Region::SetMergeType( const MergeBathymetriesType& theType )
73 {
74   Handle(TDataStd_Integer) anInt;
75   if ( !myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) )
76     anInt = TDataStd_Integer::Set( myLab, 0 );
77   anInt->Set( (int)theType );
78 }
79
80 HYDROData_Region::MergeBathymetriesType HYDROData_Region::GetMergeType() const
81 {
82   MergeBathymetriesType aMergeType = Merge_ZMIN;
83   
84   Handle(TDataStd_Integer) anInt;
85   if ( myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) )
86     aMergeType = (MergeBathymetriesType)anInt->Get();
87
88   return aMergeType;
89 }
90
91 int HYDROData_Region::NbZones() const
92 {
93   return NbReferenceObjects( DataTag_Zone );
94 }
95
96 void HYDROData_Region::AddZone( const Handle(HYDROData_Zone)& theZone )
97 {
98   AddReferenceObject( theZone, DataTag_Zone );
99 }
100
101 void HYDROData_Region::SetZone( const int                     theIndex,
102                                 const Handle(HYDROData_Zone)& theZone )
103 {
104   SetReferenceObject( theZone, DataTag_Zone, theIndex );
105 }
106
107 void HYDROData_Region::InsertZone( const int                     theBeforeIndex,
108                                    const Handle(HYDROData_Zone)& theZone )
109 {
110   InsertReferenceObject( theZone, DataTag_Zone, theBeforeIndex );
111 }
112
113 void HYDROData_Region::SetZones( const HYDROData_SequenceOfObjects& theZones )
114 {
115   SetReferenceObjects( theZones, DataTag_Zone );
116 }
117
118 Handle(HYDROData_Zone) HYDROData_Region::GetZone( const int theIndex ) const
119 {
120   return Handle(HYDROData_Zone)::DownCast( 
121            GetReferenceObject( DataTag_Zone, theIndex ) );
122 }
123
124 HYDROData_SequenceOfObjects HYDROData_Region::GetZones() const
125 {
126   return GetReferenceObjects( DataTag_Zone );
127 }
128
129 void HYDROData_Region::RemoveZone( const Handle(HYDROData_Zone)& theZone )
130 {
131   if ( theZone.IsNull() )
132     return;
133
134   RemoveReferenceObject( theZone->Label(), DataTag_Zone );
135 }
136
137 void HYDROData_Region::RemoveZone( const int theIndex )
138 {
139   RemoveReferenceObject( DataTag_Zone, theIndex );
140 }
141
142 void HYDROData_Region::RemoveZones()
143 {
144   ClearReferenceObjects( DataTag_Zone );
145 }
146
147