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 );
myOCCViewer = theViewer;
if ( myOCCViewer ) {
- //OCCViewer_ViewWindow* aWnd = dynamic_cast<OCCViewer_ViewWindow*>(myOCCViewer->getViewManager()->getActiveView());
- //if ( aWnd )
- // aWnd->installEventFilter( this );
OCCViewer_ViewManager* aViewManager = dynamic_cast<OCCViewer_ViewManager*>
( myOCCViewer->getViewManager() );
connect( aViewManager, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
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
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() );
aChangedPos[1] = aChangedPos[1] - anYDelta;
myCurve->setPoint( aSectionId, aPointId, aChangedPos );
}
+ myDragged = true;
finishCurveModification( myDragPoints );
}
*/
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<int>& thePoints )
aListToSelect.Append( anAIS );
}
+ ic->ClearSelected( Standard_False );
aViewer->setObjectsSelected( aListToSelect );
updateLocalPointView();
}
return aPntIndex;
}
+void CurveCreator_Widget::findSections( int thePointId, QList<int>& theSections )
+{
+
+}
+
/**
* Checks whether the point belongs to the OCC object
* \param theObject a line or shape with a bspline inside
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 {