#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)
{
}
+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() ) {
aDir = D;
}
else
- C->D1(aMaxRatioStep, C->Value (aMaxRatioStep), aDir);
+ C->D1(aMaxRatioStep, aPnt1, aDir);
if ( anEdge.Orientation() == TopAbs_REVERSED )
aDir = -aDir;