Salome HOME
Merge branch 'BR_LAND_COVER_MAP' of ssh://git.salome-platform.org/modules/hydro into...
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Polyline.cxx
index 7d312cb56d6c75b55e674507463c87bd1c4afbd1..4f070b47c634761832d79a24ef1b43df8269f823 100644 (file)
@@ -26,6 +26,7 @@
 #include <BRep_Tool.hxx>
 #include <GCPnts_AbscissaPoint.hxx>
 #include <GeomAdaptor_Curve.hxx>
+#include <Graphic3d_AspectLine3d.hxx>
 #include <gp_Pnt.hxx>
 #include <gp_Dir.hxx>
 #include <Prs3d_Arrow.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <BRepBndLib.hxx>
 #include <Precision.hxx>
+#include <Graphic3d_ArrayOfPolylines.hxx>
+#include <GCPnts_QuasiUniformDeflection.hxx>
+#include <BRepAdaptor_Curve.hxx>
+#include <Prs3d_LineAspect.hxx>
 
 IMPLEMENT_STANDARD_HANDLE (HYDROGUI_Polyline, AIS_Shape)
 IMPLEMENT_STANDARD_RTTIEXT(HYDROGUI_Polyline, AIS_Shape)
@@ -53,11 +58,49 @@ HYDROGUI_Polyline::~HYDROGUI_Polyline()
 {
 }
 
+Handle( Graphic3d_ArrayOfPolylines ) BuildEdgePresentation( const TopoDS_Edge& theEdge, double theDeviation )
+{
+  BRepAdaptor_Curve aCurveAdaptor( theEdge );
+  GCPnts_QuasiUniformDeflection aPnts( aCurveAdaptor, theDeviation );
+
+  Handle( Graphic3d_ArrayOfPolylines ) anArray;
+  if( !aPnts.IsDone() )
+    return anArray;
+
+  int n = aPnts.NbPoints();
+  anArray = new Graphic3d_ArrayOfPolylines( n );
+  for( int i=1; i<=n; i++ )
+    anArray->AddVertex( aPnts.Value( i ) );
+
+  return anArray;
+}
+
 void HYDROGUI_Polyline::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
                             const Handle(Prs3d_Presentation)& aPrs,
                             const Standard_Integer aMode)
 {  
-  AIS_Shape::Compute(aPresentationManager, aPrs, aMode);
+  //AIS_Shape::Compute(aPresentationManager, aPrs, aMode);
+
+  aPrs->Clear();
+  Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs );
+  Quantity_Color aColor;
+  Aspect_TypeOfLine aType;
+  Standard_Real anWidth;
+  Attributes()->LineAspect()->Aspect()->Values( aColor, aType, anWidth );
+  Handle(Graphic3d_AspectLine3d) anAspect = new Graphic3d_AspectLine3d( aColor, aType, anWidth );
+
+  TopExp_Explorer Exp1 ( myshape, TopAbs_EDGE );
+  for ( ; Exp1.More(); Exp1.Next() )
+  {
+    TopoDS_Edge anEdge = TopoDS::Edge( Exp1.Current() );
+    Handle( Graphic3d_ArrayOfPolylines ) anArray = BuildEdgePresentation( anEdge, 0.1 );
+    if( !anArray.IsNull() )
+    {
+      aGroup->SetPrimitivesAspect( anAspect );
+      aGroup->AddPrimitiveArray( anArray );
+    }
+  }
+
    
   TopExp_Explorer Exp ( myshape, TopAbs_EDGE );
   for ( ; Exp.More(); Exp.Next() ) {