X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Widget.cxx;h=f59fb1e8139aea601e7984590e3bbf1772024cc4;hb=bc9854f27f880752e0e10ff3e8ac23f391b011eb;hp=fa6217e9d89496c13ace7edaf80c27459c07e65e;hpb=57c75fe61de1cf26cd56083955714b1b57b1d30e;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.cxx b/src/HYDROCurveCreator/CurveCreator_Widget.cxx index fa6217e9..f59fb1e8 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Widget.cxx @@ -77,7 +77,8 @@ const int SCENE_PIXEL_TOLERANCE = 10; CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, CurveCreator_ICurve *theCurve, Qt::WindowFlags fl) -: QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0), myDragStarted( false ), +: QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0), + myDragStarted( false ), myDragInteractionStyle( SUIT_ViewModel::STANDARD ), myOCCViewer( 0 ) { myNewSectionEditor = new CurveCreator_NewSectionDlg( this ); @@ -236,9 +237,6 @@ void CurveCreator_Widget::setOCCViewer( OCCViewer_Viewer* theViewer ) myOCCViewer = theViewer; if ( myOCCViewer ) { - //OCCViewer_ViewWindow* aWnd = dynamic_cast(myOCCViewer->getViewManager()->getActiveView()); - //if ( aWnd ) - // aWnd->installEventFilter( this ); OCCViewer_ViewManager* aViewManager = dynamic_cast ( myOCCViewer->getViewManager() ); connect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ), @@ -258,27 +256,6 @@ OCCViewer_Viewer* CurveCreator_Widget::getOCCViewer() return myOCCViewer; } -/*! - \brief Customize event handling - \param watched event receiver object - \param e event - \return \c true if the event processing should be stopped -*/ -/*bool CurveCreator_Widget::eventFilter( QObject* theWatched, QEvent* theEvent ) -{ - OCCViewer_Viewer* aViewer = getOCCViewer(); - if ( !aViewer ) - return; - Handle(AIS_InteractiveContext) aContext = aViewer->getAISContext(); - bool isLocalContext = aContext->HasOpenedContext(); - if ( !isLocalContext ) - return QWidget::eventFilter( theWatched, theEvent ); - - bool isProcessed = true; - - return isProcessed; -}*/ - //======================================================================= // function: getUniqSectionName // purpose: return unique section name @@ -920,8 +897,11 @@ void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEven if ( getActionMode() != ModificationMode ) return; - if ( myDragStarted ) + if ( myDragStarted ) { + if ( myDragged ) // if the drag of some points has happened, restore the drag selection + setSelectedPonts( 0, myDragPoints ); setDragStarted( false ); + } else // check whether the segment is clicked an a new point should be added to the segment insertPointToSelectedSegment( theEvent->pos().x(), theEvent->pos().y() ); @@ -1017,15 +997,15 @@ void CurveCreator_Widget::removePoint() { int aSectionId = 0; QList aPoints; - qSort( aPoints ); getSelectedPonts( aSectionId, aPoints ); - if ( aPoints.size() == 0 ) return; QList aSelPoints; startCurveModification( aSelPoints, false ); + // the points should be removed in a decreased order + qSort( aPoints ); for( int i = aPoints.size()-1; i >= 0; i-- ){ int aPntIndx = aPoints[i]; myCurve->removePoint( aSectionId, aPntIndx ); @@ -1121,6 +1101,7 @@ void CurveCreator_Widget::moveSelectedPoints( const int theXPosition, aChangedPos[1] = aChangedPos[1] - anYDelta; myCurve->setPoint( aSectionId, aPointId, aChangedPos ); } + myDragged = true; finishCurveModification( myDragPoints ); } @@ -1258,15 +1239,24 @@ void CurveCreator_Widget::addLocalPointToTable( const double theX, const double */ void CurveCreator_Widget::setDragStarted( const bool theState, const QPoint& thePoint ) { - if ( !theState ) { - myDragStarted = false; - myDragPoints.clear(); - } - else { + OCCViewer_Viewer* aViewer = getOCCViewer(); + if ( theState ) { getSelectedPonts( 0, myDragPoints ); myDragStarted = myDragPoints.size(); myDragStartPosition = thePoint; + if ( aViewer && myDragStarted ) { + // change a viewer interaction style in order to avoid a select rectangle build + myDragInteractionStyle = aViewer->interactionStyle(); + aViewer->setInteractionStyle(SUIT_ViewModel::KEY_FREE); + } + } + else { + if ( aViewer && myDragStarted ) + aViewer->setInteractionStyle( myDragInteractionStyle ); + myDragStarted = false; + myDragPoints.clear(); } + myDragged = false; } void CurveCreator_Widget::getSelectedPonts( int theSectionId, QList& thePoints ) @@ -1319,6 +1309,7 @@ void CurveCreator_Widget::setSelectedPonts( const int theSectionId, const QList< aListToSelect.Append( anAIS ); } + ic->ClearSelected( Standard_False ); aViewer->setObjectsSelected( aListToSelect ); updateLocalPointView(); } @@ -1376,6 +1367,11 @@ int CurveCreator_Widget::findLocalPointIndex( int theSectionId, float theX, floa return aPntIndex; } +void CurveCreator_Widget::findSections( int thePointId, QList& theSections ) +{ + +} + /** * Checks whether the point belongs to the OCC object * \param theObject a line or shape with a bspline inside @@ -1405,12 +1401,18 @@ bool CurveCreator_Widget::pointOnObject( Handle(AIS_InteractiveObject) theObject isFound = hasProjectPointOnCurve( theX, theY, aGLine, aParameter ); if ( isFound ) { aPoint = aGLine->Value( aParameter ); - - Handle(Geom_Point) aPStart; - Handle(Geom_Point) aPEnd; - aLine->Points( aPStart, aPEnd ); - aPnt1 = aPStart->Pnt(); - aPnt2 = aPEnd->Pnt(); + + Handle(Geom_Point) aPStart; + Handle(Geom_Point) aPEnd; + aLine->Points( aPStart, aPEnd ); + aPnt1 = aPStart->Pnt(); + aPnt2 = aPEnd->Pnt(); + + // in case of Geom line a projection is performed to the infinite line, + // so it is necessary to bound it by the line size + Bnd_Box aLineBox; + aLineBox.Set( aPnt1, gp_Vec( aPnt1, aPnt2 ) ); + isFound = !aLineBox.IsOut( aPoint ); } } else {