Salome HOME
Refs #289 - Spline profile is represented in OCC view as polyline profile
[modules/hydro.git] / src / HYDROData / HYDROData_Channel.cxx
index 9499aea834fd372eb43cfc4eaea9cfdbc9185d4b..e011807bd2c1ba9adfb5481e88c61f3a8c2d70a1 100644 (file)
@@ -8,10 +8,12 @@
 #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>
 
@@ -107,90 +109,61 @@ void HYDROData_Channel::Update()
   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" <<endl;
-      BRepTools::Write(aChannel, "ChanNV.brep");
-#endif
-    }
-  }
-
-  TopoDS_Shape a3dShape = GetShape3D();
-  if ( a3dShape.IsNull() )
-    return;
-
-  // build 2d shape -- temporary solution!!
-  TopoDS_Face aProj = HYDROData_Projection::MakeProjection( a3dShape );
-  SetTopShape( aProj );
-  if ( aProj.IsNull() )
-    return;
-
-  // Create the channel groups
-  TopoDS_Shape aFirstShape = aMkSweep.FirstShape();
-  TopoDS_Shape aLastShape = aMkSweep.LastShape();
-  if ( aFirstShape.IsNull() || aFirstShape.ShapeType() != TopAbs_WIRE ||
-       aLastShape.IsNull()  || aLastShape.ShapeType() != TopAbs_WIRE )
-    return;
-
-  TopoDS_Wire anInletWire = TopoDS::Wire( aFirstShape );
-  TopoDS_Wire anOutletWire = TopoDS::Wire( aLastShape );
+  //BRepTools::Write( aPathWire, "guideline.brep" );
+  //BRepTools::Write( aProfileWire, "profile.brep" );
 
-  TopoDS_Vertex anInletFirstVert, anInletLastVert;
-  TopExp::Vertices( anInletWire, anInletFirstVert, anInletLastVert );
+  HYDROData_Canal3dAnd2d aChannelConstructor( aProfileWire, aPathWire );
+  aChannelConstructor.Create3dPresentation();
+  aChannelConstructor.Create2dPresentation();
+  SetShape3D( aChannelConstructor.Get3dPresentation() );
+  SetTopShape( aChannelConstructor.Get2dPresentation() );
 
-  const TopTools_ListOfShape& aGeneratedLeftEdges = aMkSweep.Generated( anInletFirstVert );
-  const TopTools_ListOfShape& aGeneratedRightEdges = aMkSweep.Generated( anInletLastVert );
+  //BRepTools::Write( aPathWire, "guideline.brep" );
+  //BRepTools::Write( aProfileWire, "profile.brep" );
+  //BRepTools::Write( aChannelConstructor.Get2dPresentation(), "channel2d.brep" );
+  //BRepTools::Write( aChannelConstructor.Get3dPresentation(), "channel3d.brep" );
 
-  TopTools_SequenceOfShape aProjEdges;
-  HYDROData_ShapesTool::ExploreShapeToShapes( aProj, TopAbs_EDGE, aProjEdges );
+  // 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 aProjLeftEdges;
-  findEdges( aProjEdges, aGeneratedLeftEdges, aProjLeftEdges );
+  TopTools_SequenceOfShape aLeftBankEdges;
+  HYDROData_ShapesTool::ExploreShapeToShapes( aLeftBank, TopAbs_EDGE, aLeftBankEdges );
 
-  TopTools_SequenceOfShape aProjRightEdges;
-  findEdges( aProjEdges, aGeneratedRightEdges, aProjRightEdges );
+  TopTools_SequenceOfShape aRightBankEdges;
+  HYDROData_ShapesTool::ExploreShapeToShapes( aRightBank, TopAbs_EDGE, aRightBankEdges );
 
-  TopTools_SequenceOfShape aProjInletEdges;
-  findEdges( aProjEdges, anInletWire, aProjInletEdges );
+  TopTools_SequenceOfShape anInletEdges;
+  HYDROData_ShapesTool::ExploreShapeToShapes( anInlet, TopAbs_EDGE, anInletEdges );
 
-  TopTools_SequenceOfShape aProjOutletEdges;
-  findEdges( aProjEdges, anOutletWire, aProjOutletEdges );
+  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( aProjLeftEdges );
+  aLeftGroup->SetShapes( aLeftBankEdges );
 
   QString aRightGroupName = GetName() + "_Right_Bank";
 
   Handle(HYDROData_ShapesGroup) aRightGroup = createGroupObject();
   aRightGroup->SetName( aRightGroupName );
-  aRightGroup->SetShapes( aProjRightEdges );
+  aRightGroup->SetShapes( aRightBankEdges );
 
   QString anInGroupName = GetName() + "_Inlet";
 
   Handle(HYDROData_ShapesGroup) anInGroup = createGroupObject();
   anInGroup->SetName( anInGroupName );
-  anInGroup->SetShapes( aProjInletEdges );
+  anInGroup->SetShapes( anInletEdges );
 
   QString anOutGroupName = GetName() + "_Outlet";
 
   Handle(HYDROData_ShapesGroup) anOutGroup = createGroupObject();
   anOutGroup->SetName( anOutGroupName );
-  anOutGroup->SetShapes( aProjOutletEdges );
+  anOutGroup->SetShapes( anOutletEdges );
 }
 
 QColor HYDROData_Channel::DefaultFillingColor()
@@ -300,52 +273,3 @@ ObjectKind HYDROData_Channel::getAltitudeObjectType() const
   return KIND_OBSTACLE_ALTITUDE;
 }
 
-void HYDROData_Channel::findEdges( const TopTools_SequenceOfShape& theInShapes,
-                                   const TopTools_ListOfShape&     theEdges3D,
-                                   TopTools_SequenceOfShape&       theOutShapes ) const
-{
-  theOutShapes.Clear();
-  if ( theEdges3D.IsEmpty() || theInShapes.IsEmpty() )
-    return;
-
-  const TopoDS_Shape& aFirstShape3D = theEdges3D.First();
-  const TopoDS_Shape& aLastShape3D = theEdges3D.Last();
-
-  TopoDS_Vertex aFirstVert, aLastVert, aDummyVert;
-  if ( !HYDROData_ShapesTool::Vertices( aFirstShape3D, aFirstVert, aDummyVert ) ||
-       !HYDROData_ShapesTool::Vertices( aLastShape3D, aDummyVert, aLastVert ) )
-    return;
-
-  bool isStarted = false;
-  for ( int i = 1, n = theInShapes.Length(); i <= n; ++i )
-  {
-    const TopoDS_Shape& anInShape = theInShapes.Value( i );
-
-    TopoDS_Vertex aShapeFirstVert, aShapeLastVert;
-    if ( !HYDROData_ShapesTool::Vertices( anInShape, aShapeFirstVert, aShapeLastVert ) )
-      continue;
-
-    if ( !isStarted )
-    {
-      isStarted = HYDROData_ShapesTool::IsVerticesEquals( aFirstVert, aShapeFirstVert, true );
-    }
-
-    if ( isStarted )
-    {
-      theOutShapes.Append( anInShape );
-
-      if ( HYDROData_ShapesTool::IsVerticesEquals( aLastVert, aShapeLastVert, true ) )
-        break;
-    }
-  }
-}
-
-void HYDROData_Channel::findEdges( const TopTools_SequenceOfShape& theProjShapes,
-                                   const TopoDS_Shape&             theEdge3D,
-                                   TopTools_SequenceOfShape&       theOutShapes ) const
-{
-  TopTools_ListOfShape aTmpList;
-  aTmpList.Append( theEdge3D );
-  findEdges( theProjShapes, aTmpList, theOutShapes );
-}
-