#include "HYDROData_Document.h"
#include "HYDROData_Polyline3D.h"
#include "HYDROData_Profile.h"
+#include "HYDROData_PolylineXY.h"
+#include "HYDROData_Projection.h"
+#include "HYDROData_ShapesGroup.h"
+#include "HYDROData_ShapesTool.h"
+#include "HYDROData_Pipes.h"
+
+#include <BRepOffsetAPI_MakePipeShell.hxx>
+#include <BRepOffsetAPI_MakePipe.hxx>
+#include <BRepCheck_Analyzer.hxx>
+#include <BRepTools.hxx>
+
+#include <TopExp.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Wire.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Face.hxx>
+//#define DEB_CHANNEL 1
+#ifdef DEB_CHANNEL
+#include <BRepTools.hxx>
+#endif
+
+#include <QColor>
#include <QStringList>
#define PYTHON_CHANNEL_ID "KIND_CHANNEL"
return aResList;
}
+HYDROData_SequenceOfObjects HYDROData_Channel::GetAllReferenceObjects() const
+{
+ HYDROData_SequenceOfObjects aResSeq = HYDROData_ArtificialObject::GetAllReferenceObjects();
+
+ Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine();
+ if ( !aGuideLine.IsNull() )
+ aResSeq.Append( aGuideLine );
+
+ Handle(HYDROData_Profile) aProfile = GetProfile();
+ if ( !aProfile.IsNull() )
+ aResSeq.Append( aProfile );
+
+ return aResSeq;
+}
+
TopoDS_Shape HYDROData_Channel::GetTopShape() const
{
return getTopShape();
void HYDROData_Channel::Update()
{
- removeTopShape();
- removeShape3D();
- SetToUpdate( false );
+ HYDROData_ArtificialObject::Update();
Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine();
Handle(HYDROData_Profile) aProfile = GetProfile();
if ( aGuideLine.IsNull() || aProfile.IsNull() )
return;
- // TODO
+ // build 3d shape
+ TopoDS_Wire aPathWire = TopoDS::Wire(aGuideLine->GetShape3D());
+ if(aPathWire.IsNull())
+ return;
+ TopoDS_Wire aProfileWire = TopoDS::Wire( aProfile->GetShape3D() );
+ if(aProfileWire.IsNull())
+ return;
+
+ //BRepTools::Write( aPathWire, "guideline.brep" );
+ //BRepTools::Write( aProfileWire, "profile.brep" );
+
+ HYDROData_Canal3dAnd2d aChannelConstructor( aProfileWire, aPathWire );
+ aChannelConstructor.Create3dPresentation();
+ aChannelConstructor.Create2dPresentation();
+ SetShape3D( aChannelConstructor.Get3dPresentation() );
+ SetTopShape( aChannelConstructor.Get2dPresentation() );
+
+ //BRepTools::Write( aPathWire, "guideline.brep" );
+ //BRepTools::Write( aProfileWire, "profile.brep" );
+ //BRepTools::Write( aChannelConstructor.Get2dPresentation(), "channel2d.brep" );
+ //BRepTools::Write( aChannelConstructor.Get3dPresentation(), "channel3d.brep" );
+
+ // Create groups for channel
+ TopoDS_Wire aLeftBank = aChannelConstructor.GetLeftBank();
+ TopoDS_Wire aRightBank = aChannelConstructor.GetRightBank();
+ TopoDS_Wire anInlet = aChannelConstructor.GetInlet();
+ TopoDS_Wire anOutlet = aChannelConstructor.GetOutlet();
+
+ TopTools_SequenceOfShape aLeftBankEdges;
+ HYDROData_ShapesTool::ExploreShapeToShapes( aLeftBank, TopAbs_EDGE, aLeftBankEdges );
+
+ TopTools_SequenceOfShape aRightBankEdges;
+ HYDROData_ShapesTool::ExploreShapeToShapes( aRightBank, TopAbs_EDGE, aRightBankEdges );
+
+ TopTools_SequenceOfShape anInletEdges;
+ HYDROData_ShapesTool::ExploreShapeToShapes( anInlet, TopAbs_EDGE, anInletEdges );
+
+ TopTools_SequenceOfShape anOutletEdges;
+ HYDROData_ShapesTool::ExploreShapeToShapes( anOutlet, TopAbs_EDGE, anOutletEdges );
+
+ QString aLeftGroupName = GetName() + "_Left_Bank";
+
+ Handle(HYDROData_ShapesGroup) aLeftGroup = createGroupObject();
+ aLeftGroup->SetName( aLeftGroupName );
+ aLeftGroup->SetShapes( aLeftBankEdges );
+
+ QString aRightGroupName = GetName() + "_Right_Bank";
+
+ Handle(HYDROData_ShapesGroup) aRightGroup = createGroupObject();
+ aRightGroup->SetName( aRightGroupName );
+ aRightGroup->SetShapes( aRightBankEdges );
+
+ QString anInGroupName = GetName() + "_Inlet";
+
+ Handle(HYDROData_ShapesGroup) anInGroup = createGroupObject();
+ anInGroup->SetName( anInGroupName );
+ anInGroup->SetShapes( anInletEdges );
+
+ QString anOutGroupName = GetName() + "_Outlet";
+
+ Handle(HYDROData_ShapesGroup) anOutGroup = createGroupObject();
+ anOutGroup->SetName( anOutGroupName );
+ anOutGroup->SetShapes( anOutletEdges );
+}
+
+QColor HYDROData_Channel::DefaultFillingColor()
+{
+ return QColor( Qt::blue );
+}
+
+QColor HYDROData_Channel::DefaultBorderColor()
+{
+ return QColor( Qt::transparent );
+}
+
+QColor HYDROData_Channel::getDefaultFillingColor() const
+{
+ return DefaultFillingColor();
+}
+
+QColor HYDROData_Channel::getDefaultBorderColor() const
+{
+ return DefaultBorderColor();
}
bool HYDROData_Channel::SetGuideLine( const Handle(HYDROData_Polyline3D)& theGuideLine )
{
- if ( theGuideLine.IsNull() )
+ Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
+
+ if ( theGuideLine.IsNull() )
+ {
+ RemoveGuideLine();
+ return !aPrevGuideLine.IsNull();
+ }
+
+ if ( IsEqual( aPrevGuideLine, theGuideLine ) )
return false;
-
+
TopoDS_Wire aHydraulicWire = TopoDS::Wire( theGuideLine->GetTopShape() );
if ( aHydraulicWire.IsNull() )
return false; // The polyline must be a single wire
- Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
- if ( IsEqual( aPrevGuideLine, theGuideLine ) )
- return true;
-
SetReferenceObject( theGuideLine, DataTag_GuideLine );
// Indicate model of the need to update the chanel presentation
bool HYDROData_Channel::SetProfile( const Handle(HYDROData_Profile)& theProfile )
{
- if ( theProfile.IsNull() )
- return false;
-
Handle(HYDROData_Profile) aPrevProfile = GetProfile();
+
+ if ( theProfile.IsNull() )
+ {
+ RemoveProfile();
+ return !aPrevProfile.IsNull();
+ }
+
if ( IsEqual( aPrevProfile, theProfile ) )
- return true;
+ return false;
SetReferenceObject( theProfile, DataTag_Profile );
// Indicate model of the need to update the chanel presentation
SetToUpdate( true );
}
+
+ObjectKind HYDROData_Channel::getAltitudeObjectType() const
+{
+ return KIND_OBSTACLE_ALTITUDE;
+}
+