Salome HOME
Useless method has been removed.
[modules/hydro.git] / src / HYDROData / HYDROData_Region.cxx
index 166806535995977ecdb0d576de304e449544c235..10275833185f1117fdfa734c460b8f0e369a6235 100644 (file)
@@ -1,20 +1,20 @@
 
 #include "HYDROData_Region.h"
 
-#include <TNaming_Builder.hxx>
-#include <TNaming_NamedShape.hxx>
-#include <TopoDS.hxx>
+#include "HYDROData_Document.h"
+#include "HYDROData_Iterator.h"
+#include "HYDROData_Zone.h"
 
-#include <QString>
+#include <QStringList>
 
 #define PYTHON_REGION_ID "KIND_REGION"
 
-
-IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Domain)
-IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Domain)
+IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Entity)
+IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Entity)
 
 
 HYDROData_Region::HYDROData_Region()
+ : HYDROData_Entity()
 {
 }
 
@@ -22,24 +22,92 @@ HYDROData_Region::~HYDROData_Region()
 {
 }
 
-void HYDROData_Region::SetFace( const TopoDS_Face& theFace )
+QStringList HYDROData_Region::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
 {
-  TNaming_Builder aBuilder( myLab );
-  aBuilder.Generated( theFace );
+  QStringList aResList;
+
+  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this );
+  if ( aDocument.IsNull() )
+    return aResList;
+
+  QString aDocName = aDocument->GetDocPyName();
+  QString aRegionName = GetName();
+
+  aResList << QString( "%1 = %2.CreateObject( %3 );" )
+              .arg( aRegionName ).arg( aDocName ).arg( PYTHON_REGION_ID );
+  aResList << QString( "%1.SetName( \"%2\" );" )
+              .arg( aRegionName ).arg( aRegionName );
+  aResList << QString( "" );
+
+  HYDROData_SequenceOfObjects aZones = GetZones();
+  HYDROData_SequenceOfObjects::Iterator anIter( aZones );
+  for ( ; anIter.More(); anIter.Next() )
+  {
+    Handle(HYDROData_Zone) aRefZone =
+      Handle(HYDROData_Zone)::DownCast( anIter.Value() );
+    if ( !aRefZone.IsNull() )
+      setPythonReferenceObject( theTreatedObjects, aResList, aRefZone, "AddZone" );
+  }
+  aResList << QString( "" );
+
+  return aResList;
 }
 
-TopoDS_Face HYDROData_Region::Face() const
+bool HYDROData_Region::AddZone( Handle(HYDROData_Zone)& theZone )
 {
-  Handle(TNaming_NamedShape) aNamedShape;
-  if( myLab.FindAttribute( TNaming_NamedShape::GetID(), aNamedShape ) )
-    return TopoDS::Face( aNamedShape->Get() );
-  return TopoDS_Face();
+  if ( theZone.IsNull() )
+    return false;
+  
+  if ( HasReference( theZone, DataTag_Zone ) )
+    return false; // Object is already in reference list
+
+  // Move the zone from other region
+  Handle(HYDROData_Region) aFatherRegion = 
+    Handle(HYDROData_Region)::DownCast( theZone->GetFatherObject() );
+  if ( !aFatherRegion.IsNull() && aFatherRegion->Label() != myLab )
+  {
+    Handle(HYDROData_Zone) aNewZone = AddNewZone();
+    theZone->CopyTo( aNewZone );
+
+    aFatherRegion->RemoveZone( theZone );
+
+    theZone = aNewZone;
+  }
+
+  AddReferenceObject( theZone, DataTag_Zone );
+  return true;
 }
 
-QString HYDROData_Region::getPythonKindId() const
+HYDROData_SequenceOfObjects HYDROData_Region::GetZones() const
 {
-  return QString( PYTHON_REGION_ID );
+  return GetReferenceObjects( DataTag_Zone );
 }
 
+void HYDROData_Region::RemoveZone( const Handle(HYDROData_Zone)& theZone )
+{
+  if ( theZone.IsNull() || !HasReference( theZone, DataTag_Zone ) )
+    return;
 
+  RemoveReferenceObject( theZone->Label(), DataTag_Zone );
+
+  // Remove zone from data model
+  theZone->Remove();
+}
+
+void HYDROData_Region::RemoveZones()
+{
+  ClearReferenceObjects( DataTag_Zone );
+  myLab.FindChild( ChildTag_Zone ).ForgetAllAttributes( true );
+}
+
+Handle(HYDROData_Zone) HYDROData_Region::AddNewZone()
+{
+  TDF_Label aNewLab = myLab.FindChild( ChildTag_Zone ).NewChild();
+
+  Handle(HYDROData_Zone) aNewZone =
+    Handle(HYDROData_Zone)::DownCast( HYDROData_Iterator::CreateObject( aNewLab, KIND_ZONE ) );
+  AddZone( aNewZone );
+
+  return aNewZone;
+}