X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Widget.h;h=225e864d49a06aac4b0ff31b7f95b1492c5eb3f7;hb=a5479f49002017808116f8f6b7813d8bd89cf24a;hp=22d57e91198dcec4fb0fa43612fc274ee09fd1ba;hpb=4e7f0692821fc25214c394b5df638bba2e672d22;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.h b/src/HYDROCurveCreator/CurveCreator_Widget.h index 22d57e91..225e864d 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.h +++ b/src/HYDROCurveCreator/CurveCreator_Widget.h @@ -28,6 +28,11 @@ #include #include +#include + +#include +#include +#include class OCCViewer_Viewer; @@ -41,100 +46,158 @@ class CurveCreator_NewSectionDlg; class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget { - Q_OBJECT + Q_OBJECT public: - explicit CurveCreator_Widget( QWidget* parent, - CurveCreator_ICurve *theCurve, - Qt::WindowFlags fl=0 ); + explicit CurveCreator_Widget( QWidget* parent, + CurveCreator_ICurve *theCurve, + Qt::WindowFlags fl=0 ); + + void setOCCViewer( OCCViewer_Viewer* theViewer ); + OCCViewer_Viewer* getOCCViewer(); - OCCViewer_Viewer* getOCCViewer(); + //virtual bool eventFilter( QObject* theWatched, QEvent* theEvent ); - //virtual bool eventFilter( QObject* theWatched, QEvent* theEvent ); + //! Return unique section name + std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const; - //! Return unique section name - std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const; + void setCurve( CurveCreator_ICurve* theCurve ); - void setCurve( CurveCreator_ICurve* theCurve ); + QList getSelectedSections(); + QList< QPair< int, int > > getSelectedPoints(); - QList getSelectedSections(); - QList< QPair< int, int > > getSelectedPoints(); + void removeSelected(); + bool removeEnabled(); signals: - void selectionChanged(); - void subOperationStarted( QWidget* ); - void subOperationFinished( QWidget* ); + void selectionChanged(); + void subOperationStarted( QWidget* ); + void subOperationFinished( QWidget* ); public slots: protected slots: - void onAdditionMode(bool checked); - void onModificationMode(bool checked); - void onDetectionMode(bool checked); - void onModeChanged(bool checked); - void onNewSection(); - void onSelectionChanged(); - void onAddNewPoint(const CurveCreator::Coordinates& theCoords); - void onAddNewSection(); - void onEditSection( int theSection ); - void onModifySection(); - void onCancelSection(); - void onJoin(); - void onRemove(); - void onClearAll(); - void onJoinAll(); - void onSetSpline(); - void onSetPolyline(); - void onCloseSections(); - void onUncloseSections(); - void onUndo(); - void onRedo(); - void onUndoSettings(); - void onContextMenu(QPoint thePoint); - void onGetCoordsByClick( SUIT_ViewWindow*, QMouseEvent* ); - void onPointSelect( SUIT_ViewWindow*, QMouseEvent* ); - void onPointDrag( SUIT_ViewWindow*, QMouseEvent* ); - void onLocalPointChanged( int theRow, int theColumn ); + void onAdditionMode(bool checked); + void onModificationMode(bool checked); + void onDetectionMode(bool checked); + void onModeChanged(bool checked); + void onNewSection(); + void onSelectionChanged(); + void onAddNewPoint(const CurveCreator::Coordinates& theCoords); + void onAddNewSection(); + void onEditSection( int theSection ); + void onModifySection(); + void onCancelSection(); + void onJoin(); + void onRemove(); + void onClearAll(); + void onJoinAll(); + void onSetSpline(); + void onSetPolyline(); + void onCloseSections(); + void onUncloseSections(); + void onUndo(); + void onRedo(); + void onUndoSettings(); + void onContextMenu(QPoint thePoint); + void onGetCoordsByClick( QMouseEvent* ); + + void onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent ); + void onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent ); + void onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent ); + + void onCellChanged( int theRow, int theColumn ); + protected: - enum ActionId{ UNDO_ID, - REDO_ID, - NEW_SECTION_ID, - ADDITION_MODE_ID, - REMOVE_ID, - REMOVE_ALL_ID, - JOIN_ID, - JOIN_ALL_ID, - CLOSE_SECTIONS_ID, - UNCLOSE_SECTIONS_ID, - SET_SECTIONS_POLYLINE_ID, - SET_SECTIONS_SPLINE_ID, - CLEAR_ALL_ID, - SEPARATOR_ID, - MODIFICATION_MODE_ID, - DETECTION_MODE_ID - }; + enum ActionId{ UNDO_ID, + REDO_ID, + NEW_SECTION_ID, + ADDITION_MODE_ID, + REMOVE_ID, + REMOVE_ALL_ID, + JOIN_ID, + JOIN_ALL_ID, + CLOSE_SECTIONS_ID, + UNCLOSE_SECTIONS_ID, + SET_SECTIONS_POLYLINE_ID, + SET_SECTIONS_SPLINE_ID, + CLEAR_ALL_ID, + SEPARATOR_ID, + MODIFICATION_MODE_ID, + DETECTION_MODE_ID + }; + + enum ActionMode { + NoneMode, + AdditionMode, + ModificationMode, + DetectionMode + }; + + typedef std::pair< int, int > SectionToPoint; + typedef std::deque< SectionToPoint > SectionToPointList; + private: - QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage, - const QString& theToolTip, const QKeySequence& theShortcut ); - QAction* getAction(ActionId theId); - void updateUndoRedo(); - int findLocalPointIndex( int theSectionId, float theX, float theY ); - void updateLocalPointView(); - void setLocalPointContext( const bool theOpen ); - void addLocalPointToTable( const double theX, const double theY ); - - void getSelectedPonts( const int theSectionId, QList& thePoints ); - void setSelectedPonts( const int theSectionId, const QList& thePoints ); + QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage, + const QString& theToolTip, const QKeySequence& theShortcut ); + QAction* getAction(ActionId theId); + ActionMode getActionMode() const; + + void updateUndoRedo(); + + void removeSection(); + void removePoint(); + void insertPointToSelectedSegment( const int theXPosition, + const int theYPosition ); + void moveSelectedPoints( const int theXPosition, const int theYPosition ); + void updateLocalPointView(); + void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false ); + void addLocalPointToTable( const double theX, const double theY ); + + void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() ); + + void getSelectedPonts( SectionToPointList& thePoints ); + void setSelectedPonts( const SectionToPointList& = SectionToPointList() ); + + void startCurveModification( SectionToPointList& thePoints, + const bool theFillPoints = true ); + void finishCurveModification( const SectionToPointList& thePoints = SectionToPointList() ); + + // curve algorithm + int findLocalPointIndex( int theSectionId, float theX, float theY ); + void findSectionsToPoints( const double theX, const double theY, + SectionToPointList& thePoints ); + void convert( const SectionToPointList& thePoints, + QMap >& theConvPoints ); + + // OCC algorithm + bool pointOnObject( Handle(AIS_InteractiveObject) theObject, + const int theX, const int theY, + gp_Pnt& thePoint, gp_Pnt& thePoint1, gp_Pnt& thePoint2 ); + bool hasProjectPointOnCurve( const int theX, const int theY, + const Handle(Geom_Curve)& theCurve, + Standard_Real& theParameter ); + + // local point view table methods + int getSectionId( const int theRowId ) const; + int getPointId( const int theRowId ) const; + + bool contains( const SectionToPointList& theList, const SectionToPoint& theValue ) const; private: - QMap myActionMap; - CurveCreator_ICurve* myCurve; - CurveCreator_TreeView* mySectionView; - QTableWidget* myLocalPointView; - CurveCreator_NewSectionDlg* myNewSectionEditor; - int mySection; - int myPointNum; - QPoint myDragStartPosition; - QByteArray myGuiState; + QMap myActionMap; + CurveCreator_ICurve* myCurve; + CurveCreator_TreeView* mySectionView; + QTableWidget* myLocalPointView; + CurveCreator_NewSectionDlg* myNewSectionEditor; + OCCViewer_Viewer* myOCCViewer; + int mySection; + int myPointNum; + bool myDragStarted; + QPoint myDragStartPosition; + int myDragInteractionStyle; + SectionToPointList myDragPoints; + bool myDragged; + QByteArray myGuiState; }; #endif // CURVECREATOR_WIDGET_H