2 #include "HYDROData_ImmersibleZone.h"
4 #include "HYDROData_Bathymetry.h"
5 #include "HYDROData_Document.h"
6 #include "HYDROData_PolylineXY.h"
8 #include <BRepBuilderAPI_MakeFace.hxx>
11 #include <TopoDS_Face.hxx>
12 #include <TopoDS_Wire.hxx>
13 #include <TopoDS_Compound.hxx>
14 #include <TopExp_Explorer.hxx>
15 #include <TopTools_ListIteratorOfListOfShape.hxx>
16 #include <BRep_Builder.hxx>
17 #include <BRepAlgo_FaceRestrictor.hxx>
18 #include <BRepCheck_Analyzer.hxx>
20 #include <QStringList>
22 #define PYTHON_IMMERSIBLE_ZONE_ID "KIND_IMMERSIBLE_ZONE"
23 //#define HYDRODATA_IMZONE_DEB 1
25 IMPLEMENT_STANDARD_HANDLE(HYDROData_ImmersibleZone,HYDROData_NaturalObject)
26 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_ImmersibleZone,HYDROData_NaturalObject)
29 HYDROData_ImmersibleZone::HYDROData_ImmersibleZone()
30 : HYDROData_NaturalObject()
34 HYDROData_ImmersibleZone::~HYDROData_ImmersibleZone()
38 QStringList HYDROData_ImmersibleZone::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
42 Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
43 if ( aDocument.IsNull() )
46 QString aDocName = aDocument->GetDocPyName();
47 QString aZoneName = GetName();
49 aResList << QString( "%1 = %2.CreateObject( %3 );" )
50 .arg( aZoneName ).arg( aDocName ).arg( PYTHON_IMMERSIBLE_ZONE_ID );
51 aResList << QString( "%1.SetName( \"%2\" );" )
52 .arg( aZoneName ).arg( aZoneName );
53 aResList << QString( "" );
55 QColor aFillingColor = GetFillingColor();
56 aResList << QString( "filling_color = QColor( %1, %2, %3, %4 );" )
57 .arg( aFillingColor.red() ).arg( aFillingColor.green() )
58 .arg( aFillingColor.blue() ).arg( aFillingColor.alpha() );
59 aResList << QString( "%1.SetFillingColor( filling_color );" ).arg( aZoneName );
60 aResList << QString( "" );
62 QColor aBorderColor = GetBorderColor();
63 aResList << QString( "border_color = QColor( %1, %2, %3, %4 );" )
64 .arg( aBorderColor.red() ).arg( aBorderColor.green() )
65 .arg( aBorderColor.blue() ).arg( aBorderColor.alpha() );
66 aResList << QString( "%1.SetBorderColor( border_color );" ).arg( aZoneName );
67 aResList << QString( "" );
69 Handle(HYDROData_Bathymetry) aRefBathymetry = GetBathymetry();
70 setPythonReferenceObject( theTreatedObjects, aResList, aRefBathymetry, "SetBathymetry" );
72 Handle(HYDROData_PolylineXY) aRefPolyline = GetPolyline();
73 setPythonReferenceObject( theTreatedObjects, aResList, aRefPolyline, "SetPolyline" );
78 HYDROData_SequenceOfObjects HYDROData_ImmersibleZone::GetAllReferenceObjects() const
80 HYDROData_SequenceOfObjects aResSeq = HYDROData_NaturalObject::GetAllReferenceObjects();
82 Handle(HYDROData_PolylineXY) aRefPolyline = GetPolyline();
83 if ( !aRefPolyline.IsNull() )
84 aResSeq.Append( aRefPolyline );
89 TopoDS_Shape HYDROData_ImmersibleZone::GetTopShape() const
94 void HYDROData_ImmersibleZone::Update()
96 HYDROData_NaturalObject::Update();
98 TopoDS_Shape aResShape = generateTopShape();
99 SetTopShape( aResShape );
102 TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape() const
104 TopoDS_Shape aResShape = TopoDS_Face();
106 Handle(HYDROData_PolylineXY) aPolyline = GetPolyline();
107 if( !aPolyline.IsNull() )
109 TopoDS_Shape aPolylineShape = aPolyline->GetShape();
110 TopTools_ListOfShape aWiresList;
112 if ( !aPolylineShape.IsNull() &&
113 aPolylineShape.ShapeType() == TopAbs_WIRE ) {
114 const TopoDS_Wire& aPolylineWire = TopoDS::Wire( aPolylineShape );
115 if ( !aPolylineWire.IsNull() ) {
116 BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True );
118 if( aMakeFace.IsDone() ) {
119 return aMakeFace.Face();
123 TopExp_Explorer anExp( aPolylineShape, TopAbs_WIRE );
124 for ( ; anExp.More(); anExp.Next() ) {
125 if(!anExp.Current().IsNull()) {
126 const TopoDS_Wire& aWire = TopoDS::Wire( anExp.Current() );
127 aWiresList.Append( aWire );
130 if(aWiresList.IsEmpty())
132 BRepAlgo_FaceRestrictor aFR;
133 TopoDS_Face aRefFace;
134 TopoDS_Shape aS = aWiresList.First();
135 BRepBuilderAPI_MakeFace aMakeFace( TopoDS::Wire(aWiresList.First()), Standard_True );
137 if( aMakeFace.IsDone() ) {
138 aRefFace = aMakeFace.Face();
140 if(aRefFace.IsNull())
142 aFR.Init(aRefFace,Standard_False, Standard_True);
143 TopTools_ListIteratorOfListOfShape anIt( aWiresList );
144 for ( ; anIt.More(); anIt.Next() ) {
145 TopoDS_Wire& aWire = TopoDS::Wire( anIt.Value() );
146 if ( aWire.IsNull() )
152 TopoDS_Compound aResult;
154 aBB.MakeCompound(aResult);
155 for (; aFR.More(); aFR.Next()) {
156 const TopoDS_Face& aFF = aFR.Current();
157 aBB.Add(aResult,aFF);
159 BRepCheck_Analyzer aChecker(aResult);
160 if(aChecker.IsValid())
162 #ifdef HYDRODATA_IMZONE_DEB
173 TopoDS_Shape HYDROData_ImmersibleZone::GetShape3D() const
175 return getTopShape();
178 QColor HYDROData_ImmersibleZone::DefaultFillingColor()
180 return QColor( Qt::darkBlue );
183 QColor HYDROData_ImmersibleZone::DefaultBorderColor()
185 return QColor( Qt::transparent );
188 QColor HYDROData_ImmersibleZone::getDefaultFillingColor() const
190 return DefaultFillingColor();
193 QColor HYDROData_ImmersibleZone::getDefaultBorderColor() const
195 return DefaultBorderColor();
198 void HYDROData_ImmersibleZone::SetPolyline( const Handle(HYDROData_PolylineXY)& thePolyline )
200 SetReferenceObject( thePolyline, DataTag_Polyline );
204 Handle(HYDROData_PolylineXY) HYDROData_ImmersibleZone::GetPolyline() const
206 return Handle(HYDROData_PolylineXY)::DownCast(
207 GetReferenceObject( DataTag_Polyline ) );
210 void HYDROData_ImmersibleZone::RemovePolyline()
212 ClearReferenceObjects( DataTag_Polyline );