X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Channel.cxx;h=e1363d79e9db29b016e712ba7efdbaad1ddf84a5;hb=424f8230c9003d00fb27499b2441c4b3a2a28292;hp=9ad19c9716e70bc452562c8769c18b2d4c74dad0;hpb=43202d78bedfc132df783346843174f5363937d2;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Channel.cxx b/src/HYDROData/HYDROData_Channel.cxx index 9ad19c97..e1363d79 100644 --- a/src/HYDROData/HYDROData_Channel.cxx +++ b/src/HYDROData/HYDROData_Channel.cxx @@ -7,6 +7,12 @@ #include #include +#include +#include +//#define DEB_CHANNEL 1 +#ifdef DEB_CHANNEL +#include +#endif #include @@ -47,6 +53,21 @@ 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 { return getTopShape(); @@ -59,9 +80,7 @@ TopoDS_Shape HYDROData_Channel::GetShape3D() const void HYDROData_Channel::Update() { - removeTopShape(); - removeShape3D(); - SetToUpdate( false ); + HYDROData_ArtificialObject::Update(); Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine(); Handle(HYDROData_Profile) aProfile = GetProfile(); @@ -69,21 +88,51 @@ void HYDROData_Channel::Update() 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 - 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 @@ -112,12 +161,16 @@ void HYDROData_Channel::RemoveGuideLine() 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 );