]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #527, #577: more exact polyline presentation BR_v14_rc
authorasl <asl@opencascade.com>
Mon, 12 Oct 2015 08:39:57 +0000 (11:39 +0300)
committerasl <asl@opencascade.com>
Mon, 12 Oct 2015 08:39:57 +0000 (11:39 +0300)
src/HYDROGUI/HYDROGUI_Polyline.cxx

index 7d312cb56d6c75b55e674507463c87bd1c4afbd1..91e0a06ab5c10de7e1653de9b4776db9f950ce4c 100644 (file)
 #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 +57,43 @@ 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 );
+  Handle(Graphic3d_AspectLine3d) anAspect = Attributes()->FaceBoundaryAspect()->Aspect();
+  aGroup->SetGroupPrimitivesAspect( anAspect );
+
+  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->AddPrimitiveArray ( anArray );
+  }
+
    
   TopExp_Explorer Exp ( myshape, TopAbs_EDGE );
   for ( ; Exp.More(); Exp.Next() ) {