X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Channel.cxx;h=e1363d79e9db29b016e712ba7efdbaad1ddf84a5;hb=424f8230c9003d00fb27499b2441c4b3a2a28292;hp=0a1d13bd4d8ce2fe4c70412959e51f15135a82f6;hpb=7b9454f8053b968f127bf7981eb05b6749e261f4;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Channel.cxx b/src/HYDROData/HYDROData_Channel.cxx index 0a1d13bd..e1363d79 100644 --- a/src/HYDROData/HYDROData_Channel.cxx +++ b/src/HYDROData/HYDROData_Channel.cxx @@ -2,8 +2,17 @@ #include "HYDROData_Channel.h" #include "HYDROData_Document.h" - -#include +#include "HYDROData_Polyline3D.h" +#include "HYDROData_Profile.h" + +#include +#include +#include +#include +//#define DEB_CHANNEL 1 +#ifdef DEB_CHANNEL +#include +#endif #include @@ -26,7 +35,7 @@ QStringList HYDROData_Channel::DumpToPython( MapOfTreatedObjects& theTreatedObje { QStringList aResList; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this ); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); if ( aDocument.IsNull() ) return aResList; @@ -44,17 +53,147 @@ QStringList HYDROData_Channel::DumpToPython( MapOfTreatedObjects& theTreatedObje 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 { - // TODO return getTopShape(); } TopoDS_Shape HYDROData_Channel::GetShape3D() const { - // TODO return getShape3D(); } +void HYDROData_Channel::Update() +{ + HYDROData_ArtificialObject::Update(); + Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine(); + Handle(HYDROData_Profile) aProfile = GetProfile(); + if ( aGuideLine.IsNull() || aProfile.IsNull() ) + return; + // TODO + TopoDS_Wire aPathWire = TopoDS::Wire(aGuideLine->GetShape3D()); + if(aPathWire.IsNull()) + return; + TopoDS_Wire aProfileWire = TopoDS::Wire( aProfile->GetShape3D() ); + if(aProfileWire.IsNull()) + return; + + BRepOffsetAPI_MakePipeShell aMkSweep(aPathWire); + aMkSweep.Add(aProfileWire,Standard_True, Standard_True); + aMkSweep.SetTransitionMode(BRepBuilderAPI_RightCorner); + aMkSweep.SetMode(Standard_True); + aMkSweep.Build(); + if(aMkSweep.IsDone()) { + const TopoDS_Shape& aChannel = aMkSweep.Shape(); + BRepCheck_Analyzer aCheck(aChannel); + if(aCheck.IsValid()) + { + //BRepTools::Write(aChannel, "ChanV.brep"); + SetShape3D( aMkSweep.Shape()); + } else { +#ifdef DEB_CHANNEL + cout <<"NOT VALID" <GetTopShape() ); + if ( aHydraulicWire.IsNull() ) + return false; // The polyline must be a single wire + + SetReferenceObject( theGuideLine, DataTag_GuideLine ); + + // Indicate model of the need to update the chanel presentation + SetToUpdate( true ); + + return true; +} + +Handle(HYDROData_Polyline3D) HYDROData_Channel::GetGuideLine() const +{ + return Handle(HYDROData_Polyline3D)::DownCast( + GetReferenceObject( DataTag_GuideLine ) ); +} + +void HYDROData_Channel::RemoveGuideLine() +{ + Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine(); + if ( aPrevGuideLine.IsNull() ) + return; + + ClearReferenceObjects( DataTag_GuideLine ); + + // Indicate model of the need to update the chanel presentation + SetToUpdate( true ); +} + +bool HYDROData_Channel::SetProfile( const Handle(HYDROData_Profile)& theProfile ) +{ + Handle(HYDROData_Profile) aPrevProfile = GetProfile(); + + if ( theProfile.IsNull() ) + { + RemoveProfile(); + return !aPrevProfile.IsNull(); + } + + if ( IsEqual( aPrevProfile, theProfile ) ) + return false; + + SetReferenceObject( theProfile, DataTag_Profile ); + + // Indicate model of the need to update the chanel presentation + SetToUpdate( true ); + + return true; +} + +Handle(HYDROData_Profile) HYDROData_Channel::GetProfile() const +{ + return Handle(HYDROData_Profile)::DownCast( + GetReferenceObject( DataTag_Profile ) ); +} + +void HYDROData_Channel::RemoveProfile() +{ + Handle(HYDROData_Profile) aPrevProfile = GetProfile(); + if ( aPrevProfile.IsNull() ) + return; + + ClearReferenceObjects( DataTag_Profile ); + + // Indicate model of the need to update the chanel presentation + SetToUpdate( true ); +}