2 #include "HYDROData_Zone.h"
4 #include "HYDROData_ArtificialObject.h"
5 #include "HYDROData_Bathymetry.h"
6 #include "HYDROData_Document.h"
7 #include "HYDROData_NaturalObject.h"
9 #include <TNaming_Builder.hxx>
10 #include <TNaming_NamedShape.hxx>
12 #include <TopoDS_Shape.hxx>
14 #include <QStringList>
16 #include <TDataStd_Integer.hxx>
18 #define PYTHON_ZONE_ID "KIND_ZONE"
20 IMPLEMENT_STANDARD_HANDLE(HYDROData_Zone, HYDROData_Entity)
21 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Zone, HYDROData_Entity)
24 HYDROData_Zone::HYDROData_Zone()
27 SetMergeType( Merge_ZMIN );
30 HYDROData_Zone::~HYDROData_Zone()
34 QStringList HYDROData_Zone::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
38 Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this );
39 if ( aDocument.IsNull() )
42 QString aDocName = aDocument->GetDocPyName();
43 QString aZoneName = GetName();
45 aResList << QString( "%1 = %2.CreateObject( %3 );" )
46 .arg( aZoneName ).arg( aDocName ).arg( PYTHON_ZONE_ID );
47 aResList << QString( "%1.SetName( \"%2\" );" )
48 .arg( aZoneName ).arg( aZoneName );
49 aResList << QString( "" );
51 HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects();
52 HYDROData_SequenceOfObjects::Iterator aGeomObjsIter( aGeomObjects );
53 for ( ; aGeomObjsIter.More(); aGeomObjsIter.Next() )
55 Handle(HYDROData_Object) aRefGeomObj =
56 Handle(HYDROData_Object)::DownCast( aGeomObjsIter.Value() );
57 if ( !aRefGeomObj.IsNull() )
58 setPythonReferenceObject( theTreatedObjects, aResList, aRefGeomObj, "AddGeometryObject" );
61 // How can we get the shape? Mb Update() method to intersect the shapes of reference objects?
62 // TODO: TopoDS_Shape aRefShape = GetShape();
67 void HYDROData_Zone::SetShape( const TopoDS_Shape& theShape )
69 TNaming_Builder aBuilder( myLab.FindChild( DataTag_Shape ) );
70 aBuilder.Generated( theShape );
73 TopoDS_Shape HYDROData_Zone::GetShape() const
75 Handle(TNaming_NamedShape) aNamedShape;
76 if( myLab.FindChild( DataTag_Shape ).FindAttribute( TNaming_NamedShape::GetID(), aNamedShape ) )
77 return aNamedShape->Get();
78 return TopoDS_Shape();
81 void HYDROData_Zone::SetMergeType( const MergeBathymetriesType& theType )
83 Handle(TDataStd_Integer) anInt;
84 if ( !myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) )
85 anInt = TDataStd_Integer::Set( myLab, 0 );
86 anInt->Set( (int)theType );
89 HYDROData_Zone::MergeBathymetriesType HYDROData_Zone::GetMergeType() const
91 MergeBathymetriesType aMergeType = Merge_ZMIN;
93 Handle(TDataStd_Integer) anInt;
94 if ( myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) )
95 aMergeType = (MergeBathymetriesType)anInt->Get();
100 void HYDROData_Zone::SetMergeBathymetry( const Handle(HYDROData_Bathymetry)& theBathymetry )
102 SetReferenceObject( theBathymetry, DataTag_Bathymetry );
105 Handle(HYDROData_Bathymetry) HYDROData_Zone::GetMergeBathymetry() const
107 return Handle(HYDROData_Bathymetry)::DownCast(
108 GetReferenceObject( DataTag_Bathymetry ) );
111 void HYDROData_Zone::RemoveMergeBathymetry()
113 ClearReferenceObjects( DataTag_Bathymetry );
116 bool HYDROData_Zone::AddGeometryObject( const Handle(HYDROData_Object)& theObject )
118 if ( theObject.IsNull() )
121 if ( !theObject->IsKind( STANDARD_TYPE(HYDROData_ArtificialObject) ) &&
122 !theObject->IsKind( STANDARD_TYPE(HYDROData_NaturalObject) ) )
123 return false; // Wrong type of object
125 if ( HasReference( theObject, DataTag_GeometryObject ) )
126 return false; // Object is already in reference list
128 AddReferenceObject( theObject, DataTag_GeometryObject );
132 HYDROData_SequenceOfObjects HYDROData_Zone::GetGeometryObjects() const
134 return GetReferenceObjects( DataTag_GeometryObject );
137 void HYDROData_Zone::RemoveGeometryObjects()
139 ClearReferenceObjects( DataTag_GeometryObject );