X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Curve.cxx;h=0c6c45be4b9bb85032d42816ef96cd575d0aabac;hb=dc34ffaf3febe0112406def578ba7e1cb41f4ae7;hp=1ce68e6c1fef900fa5998c6527b09f0e19c042ac;hpb=28b09f8fc96218c317aa67805bb3fc0e296aedbd;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.cxx b/src/HYDROCurveCreator/CurveCreator_Curve.cxx index 1ce68e6c..0c6c45be 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.cxx @@ -29,6 +29,7 @@ #include "CurveCreator_Utils.h" #include +#include #include #include #include @@ -244,9 +245,10 @@ void CurveCreator_Curve::getCoordinates( int theISection, int theIPoint, double& void CurveCreator_Curve::redisplayCurve() { if( myDisplayer ) { - myDisplayer->erase( false ); + myDisplayer->eraseAll( false ); myAISShape = NULL; - myDisplayer->display( constructWire(), true ); + + myDisplayer->display( getAISObject( true ), true ); } } @@ -292,25 +294,6 @@ bool CurveCreator_Curve::moveSection(const int theISection, return res; } -void CurveCreator_Curve::convert( const SectionToPointList& thePoints, - std::map< int, std::list >& theConvPoints ) -{ - theConvPoints.clear(); - - SectionToPointList::const_iterator anIt = thePoints.begin(), aLast = thePoints.end(); - std::list aPoints; - int aSectionId, aPointId; - for ( ; anIt != aLast; anIt++ ) { - aSectionId = anIt->first; - aPointId = anIt->second; - aPoints.clear(); - if ( theConvPoints.find( aSectionId ) != theConvPoints.end() ) - aPoints = theConvPoints[aSectionId]; - aPoints.push_back( aPointId ); - theConvPoints[aSectionId] = aPoints; - } -} - /************ Implementation of INTERFACE methods ************/ /***********************************************/ @@ -365,7 +348,7 @@ bool CurveCreator_Curve::clearInternal() { // erase curve from the viewer if( myDisplayer ) { - myDisplayer->erase( true ); + myDisplayer->eraseAll( true ); myAISShape = NULL; } // Delete all allocated data. @@ -848,34 +831,19 @@ bool CurveCreator_Curve::setSeveralPoints( const SectionToPointCoordsList &theSe //! For internal use only! Undo/Redo are not used here. bool CurveCreator_Curve::removePointsInternal( const SectionToPointList &thePoints ) { - bool res = false; + bool aRes = false; std::map > aConvPoints; convert( thePoints, aConvPoints ); std::map >::const_iterator anIt = aConvPoints.begin(), aLast = aConvPoints.end(); - CurveCreator_Section *aSection = 0; for ( ; anIt != aLast; anIt++ ) { int aSectionId = anIt->first; - aSection = mySections.at(aSectionId); - if( aSection ) { - std::list aSectionPoints = anIt->second; - aSectionPoints.sort(); - std::list::const_reverse_iterator aPntIt = aSectionPoints.rbegin(); - for( ; aPntIt != aSectionPoints.rend(); aPntIt++ ){ - int aPntIndx = *aPntIt; - CurveCreator::Coordinates::iterator aFirstPosition; - if(aPntIndx == -1) - aFirstPosition = aSection->myPoints.end() - getDimension(); - else - aFirstPosition = aSection->myPoints.begin() + toICoord(aPntIndx); - aSection->myPoints.erase( aFirstPosition, aFirstPosition + getDimension() ); - res = true; - } - } + aRes = removeSectionPoints(aSectionId, anIt->second); } - if(res) + if( aRes) redisplayCurve(); - return res; + + return aRes; } //! Remove point with given id @@ -939,27 +907,63 @@ CurveCreator::Coordinates CurveCreator_Curve::getPoints( const int theISection ) return aCoords; } - -/***********************************************/ -/*** Presentation methods ***/ -/***********************************************/ -std::vector CurveCreator_Curve::constructWire() +void CurveCreator_Curve::constructAISObject() { - std::vector aCurveRepresentation; - TopoDS_Shape aShape; CurveCreator_Utils::constructShape( this, aShape ); myAISShape = new AIS_Shape( aShape ); - aCurveRepresentation.push_back( myAISShape ); - return aCurveRepresentation; } -//======================================================================= -// function: getAISObject -// purpose: -//======================================================================= -Handle_AIS_InteractiveObject CurveCreator_Curve::getAISObject() const +Handle(AIS_InteractiveObject) CurveCreator_Curve::getAISObject( const bool theNeedToBuild ) const { + if ( !myAISShape && theNeedToBuild ) { + CurveCreator_Curve* aCurve = (CurveCreator_Curve*)this; + aCurve->constructAISObject(); + } return myAISShape; -} \ No newline at end of file +} + +bool CurveCreator_Curve::removeSectionPoints( const int theSectionId, + const std::list& thePointIds ) +{ + bool aRes = false; + + CurveCreator_Section *aSection = mySections.at( theSectionId ); + if ( !aSection ) + return aRes; + + std::list aSectionPoints = thePointIds; + aSectionPoints.sort(); + std::list::const_reverse_iterator aPntIt = aSectionPoints.rbegin(); + for ( ; aPntIt != aSectionPoints.rend(); aPntIt++ ) { + int aPntIndx = *aPntIt; + CurveCreator::Coordinates::iterator aFirstPosition; + if ( aPntIndx == -1 ) + aFirstPosition = aSection->myPoints.end() - getDimension(); + else + aFirstPosition = aSection->myPoints.begin() + toICoord( aPntIndx ); + aSection->myPoints.erase( aFirstPosition, aFirstPosition + getDimension() ); + aRes = true; + } + return aRes; +} + +void CurveCreator_Curve::convert( const SectionToPointList& thePoints, + std::map< int, std::list >& theConvPoints ) +{ + theConvPoints.clear(); + + SectionToPointList::const_iterator anIt = thePoints.begin(), aLast = thePoints.end(); + std::list aPoints; + int aSectionId, aPointId; + for ( ; anIt != aLast; anIt++ ) { + aSectionId = anIt->first; + aPointId = anIt->second; + aPoints.clear(); + if ( theConvPoints.find( aSectionId ) != theConvPoints.end() ) + aPoints = theConvPoints[aSectionId]; + aPoints.push_back( aPointId ); + theConvPoints[aSectionId] = aPoints; + } +}