X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Curve.cxx;h=129520136437240ed6e21fce61cf9ae439a34aad;hb=8edd427af3997521bda72ca3c416cc1d490565d5;hp=99845e43dac2aa3ae38942d1adf1f86bcc0f5a54;hpb=1e9be94cc5ff4ad886099c507462d5b70f6d71f9;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.cxx b/src/HYDROCurveCreator/CurveCreator_Curve.cxx index 99845e43..12952013 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.cxx @@ -26,20 +26,17 @@ #include "CurveCreator_PosPoint.hxx" #include "CurveCreator_Section.hxx" #include "CurveCreator_Displayer.h" +#include "CurveCreator_Utils.h" #include #include #include -#include -#include #include #include #include #include #include #include -#include -#include #include @@ -185,126 +182,17 @@ int CurveCreator_Curve::toICoord(const int theIPnt) const return theIPnt * myDimension; } -#include -#include -#include -#include -//#define USE_COMPOUND std::vector CurveCreator_Curve::constructSection( int theISection ) const { std::vector aSectionRepresentation; - CurveCreator::SectionType aSectType = getSectionType( theISection ); - int aPointSize = getNbPoints( theISection ); - bool aSectIsClosed = isClosed( theISection ); - if( aSectType == CurveCreator::Polyline ) - { -#ifdef USE_COMPOUND - BRep_Builder aBuilder; - TopoDS_Compound aComp; - aBuilder.MakeCompound(aComp); - - int iPoint = 0; - gp_Pnt aPrevPoint, aPoint; - if ( aPointSize == 1 ) { - getPoint( theISection, iPoint, aPrevPoint ); - TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex( aPrevPoint ).Vertex(); - aBuilder.Add( aComp, aVertex ); - } - else if ( aPointSize > 1 ) { - TopoDS_Edge aPointEdge; - TopoDS_Vertex aVertex; - getPoint( theISection, iPoint, aPrevPoint ); - aVertex = BRepBuilderAPI_MakeVertex( aPrevPoint ).Vertex(); - aBuilder.Add( aComp, aVertex ); - iPoint++; - for( ; iPoint < aPointSize; iPoint++ ) { - getPoint( theISection, iPoint, aPoint ); - aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); - aBuilder.Add( aComp, aVertex ); - aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge(); - aBuilder.Add( aComp, aPointEdge ); - aPrevPoint = aPoint; - } - if( isClosed( theISection ) && ( aPointSize > 2 ) ) { - getPoint( theISection, 0, aPoint ); - aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex(); - aBuilder.Add( aComp, aVertex ); - aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge(); - aBuilder.Add( aComp, aPointEdge ); - } - AIS_Shape* aShape = new AIS_Shape( aComp ); - //aShape->SetSelectionMode( AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) ); - aSectionRepresentation.push_back( aShape ); - } -#else - int iPoint = 0; - for( ; iPoint < ( aPointSize - 1 ) ; iPoint++ ){ - Handle_AIS_Point anAISPnt = getAISPoint(theISection, iPoint); - aSectionRepresentation.push_back( anAISPnt ); - Handle_AIS_Line aLine = getAISLine( theISection, iPoint, iPoint+1 ); - aSectionRepresentation.push_back( aLine ); - } - if( aPointSize != 0 ){ - Handle_AIS_Point anAISPnt = getAISPoint(theISection, iPoint); - aSectionRepresentation.push_back( anAISPnt ); - if( isClosed(theISection) && ( aPointSize > 1 ) ){ - Handle_AIS_Line aLine = getAISLine( theISection, iPoint, 0 ); - aSectionRepresentation.push_back( aLine ); - } - } -#endif - } - else if( aSectType == CurveCreator::Spline ) - { -#ifdef USE_COMPOUND - -#else - std::vector aPoints; - for( int iPoint = 0; iPoint < aPointSize; iPoint++ ) - { - Handle_AIS_Point anAISPnt = getAISPoint( theISection, iPoint ); - aSectionRepresentation.push_back( anAISPnt ); - - CurveCreator::Coordinates aCoords = getPoint( theISection, iPoint ); - double aX = aCoords[0]; - double aY = aCoords[1]; - double aZ = aCoords[2]; - aPoints.push_back( aX ); - aPoints.push_back( aY ); - } + TopoDS_Shape aShape; + CurveCreator_Utils::constructShape( this, theISection, aShape, aSectionRepresentation ); - if( aPointSize > 1 ) - { - Handle(Geom_BSplineCurve) aBSplineCurve; - // fill array for algorithm by the received coordinates - int aLen = aPoints.size() / 2; - Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt (1, aLen); - std::vector::const_iterator aListIter = aPoints.begin(); - for (int ind = 1; ind <= aLen; ind++) { - gp_Pnt aPnt(gp::Origin()); - aPnt.SetX(*aListIter); - aListIter++; - aPnt.SetY(*aListIter); - aListIter++; - aPnt.SetZ(0); - aHCurvePoints->SetValue(ind, aPnt); - } - // compute BSpline - GeomAPI_Interpolate aGBC(aHCurvePoints, aSectIsClosed, gp::Resolution()); - aGBC.Perform(); - if (aGBC.IsDone()) { - aBSplineCurve = aGBC.Curve(); - } - TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge( aBSplineCurve ).Edge(); + AIS_Shape* anAISShape = new AIS_Shape( aShape ); + //aShape->SetSelectionMode( AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) ); + aSectionRepresentation.push_back( anAISShape ); - TopoDS_Wire aWire = BRepBuilderAPI_MakeWire( anEdge ).Wire(); - - Handle(AIS_Shape) aShape = new AIS_Shape( aWire ); - aSectionRepresentation.push_back( aShape ); - } -#endif - } return aSectionRepresentation; } @@ -406,6 +294,7 @@ void CurveCreator_Curve::getCoordinates( int theISection, int theIPoint, double& } } +//#define USE_COMPOUND void CurveCreator_Curve::redisplayCurve() { if( myDisplayer ) {