#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)
{
}
+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() ) {