Salome HOME
Methods renamed.
[modules/hydro.git] / src / HYDROData / HYDROData_Stream.cxx
index ec2b1cb9cb199810671025fe882878c7bbc95692..63e983ec1d35109f89a4b77de997c7387b09dbf7 100644 (file)
@@ -5,13 +5,19 @@
 #include "HYDROData_PolylineXY.h"
 #include "HYDROData_Profile.h"
 
-#include <BRep_Builder.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <BRepBuilderAPI_MakeWire.hxx>
-#include <BRepBuilderAPI_MakeFace.hxx>
-
 #include <TDataStd_RealArray.hxx>
 
+#include <Precision.hxx>
+
+#include <NCollection_DataMap.hxx>
+
+#include <TColStd_Array1OfReal.hxx>
+#include <TColStd_ListOfReal.hxx>
+#include <TColStd_ListIteratorOfListOfReal.hxx>
+#include <TCollection_CompareOfReal.hxx>
+#include <TColgp_Array1OfPnt.hxx>
+#include <TColgp_HArray1OfPnt.hxx>
+
 #include <TopoDS.hxx>
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
+
+#include <Bnd_Box.hxx>
+
+#include <BRep_Builder.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRepBuilderAPI_MakeWire.hxx>
+#include <BRepBuilderAPI_MakeFace.hxx>
+
+#include <BRepBndLib.hxx>
 #include <BRepProj_Projection.hxx>
 #include <BRepExtrema_ExtCC.hxx>
+#include <BRepCheck_Analyzer.hxx>
+
+#include <gp.hxx>
 #include <gp_Ax1.hxx>
 #include <gp_Ax2.hxx>
 #include <gp_Ax3.hxx>
 #include <gp_Vec.hxx>
 #include <gp_Pnt.hxx>
 #include <gp_Pln.hxx>
-#include <gp.hxx>
-#include <Bnd_Box.hxx>
-#include <BRepBndLib.hxx>
-#include <TColStd_Array1OfReal.hxx>
-#include <Precision.hxx>
-#include <QStringList>
 
-#include <NCollection_DataMap.hxx>
-typedef NCollection_DataMap<Standard_Real, Handle(HYDROData_Profile)> HYDROData_DataMapOfRealOfHDProfile;
-#include <TColStd_ListOfReal.hxx>
-#include <TColStd_ListIteratorOfListOfReal.hxx>
-#include <TCollection_CompareOfReal.hxx>
-#include <SortTools_QuickSortOfReal.hxx>
-#include <TColgp_Array1OfPnt.hxx>
-#include <TColgp_HArray1OfPnt.hxx>
 #include <GeomAPI_Interpolate.hxx>
 #include <Geom_BSplineCurve.hxx>
+
 #include <TopTools_Array1OfShape.hxx>
-#include <BRepCheck_Analyzer.hxx>
+
+#include <SortTools_QuickSortOfReal.hxx>
+
+#include <QColor>
+#include <QStringList>
 
 //#define DEB_STREAM 1
 #ifdef DEB_STREAM
@@ -58,6 +67,8 @@ typedef NCollection_DataMap<Standard_Real, Handle(HYDROData_Profile)> HYDROData_
 
 #define PYTHON_STREAM_ID "KIND_STREAM"
 
+typedef NCollection_DataMap<Standard_Real, Handle(HYDROData_Profile)> HYDROData_DataMapOfRealOfHDProfile;
+
 IMPLEMENT_STANDARD_HANDLE(HYDROData_Stream,HYDROData_NaturalObject)
 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Stream,HYDROData_NaturalObject)
 
@@ -111,11 +122,14 @@ TopoDS_Shape HYDROData_Stream::GetTopShape() const
 {
   return getTopShape();
 }
+
 TopoDS_Shape HYDROData_Stream::GetShape3D() const
 {
   return getShape3D();
 }
- Handle(Geom_BSplineCurve) HYDROData_Stream::buildInterpolationCurve(const   Handle(TColgp_HArray1OfPnt)& theArrayOfPnt)
+
+Handle(Geom_BSplineCurve) HYDROData_Stream::buildInterpolationCurve( 
+  const Handle(TColgp_HArray1OfPnt)& theArrayOfPnt )
 {
   Handle(Geom_BSplineCurve) aBSpline;
   GeomAPI_Interpolate anInterpolator (theArrayOfPnt, Standard_False, 1.0e-5); 
@@ -124,13 +138,14 @@ TopoDS_Shape HYDROData_Stream::GetShape3D() const
        aBSpline = anInterpolator.Curve();
   return aBSpline; 
 }
+
 void HYDROData_Stream::Update()
 {
   HYDROData_NaturalObject::Update();
 
   Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
   HYDROData_SequenceOfObjects aRefProfiles = GetProfiles();
-  if ( aHydAxis.IsNull() || aRefProfiles.IsEmpty() )
+  if ( aHydAxis.IsNull() || aRefProfiles.Length() < 2 )
     return; 
  
   bool anIsFirst = true;
@@ -150,7 +165,7 @@ void HYDROData_Stream::Update()
       continue;        
        const TopoDS_Shape& aProf3d = aProfile->GetShape3D();
     gp_XY aPnt1, aPnt2;
-    if ( !aProfile->GetFirstPoint( aPnt1 ) || !aProfile->GetLastPoint( aPnt2 ) )
+    if ( !aProfile->GetLeftPoint( aPnt1 ) || !aProfile->GetRightPoint( aPnt2 ) )
       continue;
        anArrOfProfiles.SetValue(i,aProfile->GetShape3D());//aProfile->GetTopShape();
        anArrOf2DProfiles.SetValue(i,aProfile->GetTopShape());
@@ -270,6 +285,26 @@ void HYDROData_Stream::Update()
 
 }
 
+QColor HYDROData_Stream::DefaultFillingColor()
+{
+  return QColor( Qt::green );
+}
+
+QColor HYDROData_Stream::DefaultBorderColor()
+{
+  return QColor( Qt::transparent );
+}
+
+QColor HYDROData_Stream::getDefaultFillingColor() const
+{
+  return DefaultFillingColor();
+}
+
+QColor HYDROData_Stream::getDefaultBorderColor() const
+{
+  return DefaultBorderColor();
+}
+
 bool HYDROData_Stream::SetHydraulicAxis( const Handle(HYDROData_PolylineXY)& theAxis )
 {
   Handle(HYDROData_PolylineXY) aPrevAxis = GetHydraulicAxis();
@@ -319,14 +354,15 @@ void HYDROData_Stream::RemoveHydraulicAxis()
   SetToUpdate( true );
 }
 
-bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
-                                                                          Standard_Real& outPar ) const
+bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_PolylineXY)& theHydAxis, 
+                                        const Handle(HYDROData_Profile)& theProfile, 
+                                        const TopoDS_Face& thePlane,
+                                                                                                         Standard_Real& outPar)
 {
-  Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
-  if ( theProfile.IsNull() || aHydAxis.IsNull() )
+  if ( theProfile.IsNull() || theHydAxis.IsNull() )
     return false; 
 
-  TopoDS_Wire aHydraulicWire = TopoDS::Wire( aHydAxis->GetShape() ); //guide line
+  TopoDS_Wire aHydraulicWire = TopoDS::Wire( theHydAxis->GetShape() ); //guide line
   TopoDS_Wire aProfileWire = TopoDS::Wire( theProfile->GetTopShape() );
   if ( aHydraulicWire.IsNull() || aProfileWire.IsNull() )
     return false;
@@ -420,6 +456,14 @@ bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_Profile)& theProf
   return false;
 }
 
+bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
+                                                                          Standard_Real& outPar ) const
+{
+  Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
+
+  return HasIntersection( aHydAxis, theProfile, thePlane, outPar );
+}
+
 
 bool HYDROData_Stream::AddProfile( const Handle(HYDROData_Profile)& theProfile )
 {
@@ -726,6 +770,12 @@ void HYDROData_Stream::removeParameter( const int& theIndex )
   if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), aParamsArray ) )
     return;
 
+  if ( aParamsArray->Length() == 1 )
+  {
+    removeParametersArray();
+    return;
+  }
+
   TColStd_Array1OfReal aNewArr( aParamsArray->Lower(), aParamsArray->Upper() - 1 );
 
   for ( int i = aParamsArray->Lower(), j = i, k = 0, n = aParamsArray->Upper(); i <= n; ++i, ++k )