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
91 TopoDS_Shape aResShape = TopoDS_Face();
93 Handle(HYDROData_PolylineXY) aPolyline = GetPolyline();
94 if( !aPolyline.IsNull() )
96 TopoDS_Shape aPolylineShape = aPolyline->GetShape();
97 TopTools_ListOfShape aWiresList;
99 if ( !aPolylineShape.IsNull() &&
100 aPolylineShape.ShapeType() == TopAbs_WIRE ) {
101 const TopoDS_Wire& aPolylineWire = TopoDS::Wire( aPolylineShape );
102 if ( !aPolylineWire.IsNull() ) {
103 BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True );
105 if( aMakeFace.IsDone() ) {
106 return aMakeFace.Face();
110 TopExp_Explorer anExp( aPolylineShape, TopAbs_WIRE );
111 for ( ; anExp.More(); anExp.Next() ) {
112 if(!anExp.Current().IsNull()) {
113 const TopoDS_Wire& aWire = TopoDS::Wire( anExp.Current() );
114 aWiresList.Append( aWire );
117 if(aWiresList.IsEmpty())
119 BRepAlgo_FaceRestrictor aFR;
120 TopoDS_Face aRefFace;
121 TopoDS_Shape aS = aWiresList.First();
122 BRepBuilderAPI_MakeFace aMakeFace( TopoDS::Wire(aWiresList.First()), Standard_True );
124 if( aMakeFace.IsDone() ) {
125 aRefFace = aMakeFace.Face();
127 if(aRefFace.IsNull())
129 aFR.Init(aRefFace,Standard_False, Standard_True);
130 TopTools_ListIteratorOfListOfShape anIt( aWiresList );
131 for ( ; anIt.More(); anIt.Next() ) {
132 TopoDS_Wire& aWire = TopoDS::Wire( anIt.Value() );
133 if ( aWire.IsNull() )
139 TopoDS_Compound aResult;
141 aBB.MakeCompound(aResult);
142 for (; aFR.More(); aFR.Next()) {
143 const TopoDS_Face& aFF = aFR.Current();
144 aBB.Add(aResult,aFF);
146 BRepCheck_Analyzer aChecker(aResult);
147 if(aChecker.IsValid())
149 #ifdef HYDRODATA_IMZONE_DEB
160 TopoDS_Shape HYDROData_ImmersibleZone::GetShape3D() const
163 return getTopShape();
166 QColor HYDROData_ImmersibleZone::DefaultFillingColor()
168 return QColor( Qt::green );
171 QColor HYDROData_ImmersibleZone::DefaultBorderColor()
173 return QColor( Qt::transparent );
176 void HYDROData_ImmersibleZone::SetPolyline( const Handle(HYDROData_PolylineXY)& thePolyline )
178 SetReferenceObject( thePolyline, DataTag_Polyline );
181 Handle(HYDROData_PolylineXY) HYDROData_ImmersibleZone::GetPolyline() const
183 return Handle(HYDROData_PolylineXY)::DownCast(
184 GetReferenceObject( DataTag_Polyline ) );
187 void HYDROData_ImmersibleZone::RemovePolyline()
189 ClearReferenceObjects( DataTag_Polyline );