Version: 8.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CurveCreator_Widget.h
Go to the documentation of this file.
1 // Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 
20 #ifndef CURVECREATOR_WIDGET_H
21 #define CURVECREATOR_WIDGET_H
22 
23 #include "CurveCreator_Macro.hxx"
24 #include "CurveCreator.hxx"
25 #include "CurveCreator_ICurve.hxx"
26 
27 #include <SUIT_ViewWindow.h>
28 #include <OCCViewer_ViewWindow.h>
29 
30 #include <AIS_InteractiveObject.hxx>
31 #include <AIS_InteractiveContext.hxx>
32 #include <AIS_ListOfInteractive.hxx>
33 #include <Geom_Curve.hxx>
34 #include <V3d_View.hxx>
35 #include <gp_Pnt.hxx>
36 
37 #include <QWidget>
38 #include <QMap>
39 
43 
44 class OCCViewer_Viewer;
45 class OCCViewer_ViewPort3d;
46 
47 class QAction;
48 class QPixmap;
49 
51 {
52  Q_OBJECT
53 
54 public:
55  enum ActionFlags {
56  NoFlags = 0x00000000,
57  DisableDetectionMode = 0x00000001,
58  DisableNewSection = 0x00000002,
59  DisableClosedSection = 0x00000004
60  };
61 
62  enum ActionMode {
66  DetectionMode
67  };
68 
69 public:
70  explicit CurveCreator_Widget( QWidget* parent,
71  CurveCreator_ICurve *theCurve,
72  const int theActionFlags = NoFlags,
73  const QStringList& theCoordTitles = QStringList(),
74  Qt::WindowFlags fl=0,
75  int theLocalPointRowLimit = 20);
76 
77  // OCC viewer manipulation
78  void setOCCViewer( OCCViewer_Viewer* theViewer );
79 
80  Handle(AIS_InteractiveContext) getAISContext();
81  OCCViewer_ViewPort3d* getViewPort();
82  int changeInteractionStyle( int theStyle );
83 
84  void reset();
85  void setCurve( CurveCreator_ICurve* theCurve );
86 
87  QList<int> getSelectedSections();
88  void setSelectedSections( const QList<int>& theSections );
89 
90  void removeSelected();
91  bool removeEnabled();
92 
93  void setActionMode( const ActionMode& theMode );
94  ActionMode getActionMode() const;
95 
96  void SetViewer2DMode(const bool To2D);
97 
98 signals:
99  void selectionChanged();
100  void subOperationStarted( QWidget*, bool );
101  void subOperationFinished( QWidget* );
102 
103 public slots:
104 
105 protected slots:
106  void onAdditionMode(bool checked);
107  void onModificationMode(bool checked);
108  void onDetectionMode(bool checked);
109  void onModeChanged(bool checked);
110  void onNewSection();
111  void onSelectionChanged();
112  void onAddNewSection();
113  void onEditSection( int theSection );
114  void onModifySection();
115  void onCancelSection();
116  void onJoin();
117  void onBringTogether();
118  void onRemove();
119  void onClearAll();
120  void onJoinAll();
121  void onSetSpline();
122  void onSetPolyline();
123  void onCloseSections();
124  void onUncloseSections();
125  void onUndo();
126  void onRedo();
127  void onUndoSettings();
128  void onContextMenu(QPoint thePoint);
129 
130  void onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent );
131  void onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
132  void onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent );
133  void onLastViewClosed( SUIT_ViewManager* theManager );
134 
135  void onMousePress( QMouseEvent* theEvent );
136  void onMouseRelease( QMouseEvent* theEvent );
137  void onMouseMove( QMouseEvent* theEvent );
138 
139  void onCellChanged( int theRow, int theColumn );
140 
141 protected:
142  void addCoordsByClick( QMouseEvent* );
143 
144 protected:
162  BRING_TOGETHER_ID
163  };
164 
165 private:
166  OCCViewer_Viewer* getOCCViewer();
167 
168  QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
169  const QString& theToolTip, const QKeySequence& theShortcut );
170  QAction* getAction(ActionId theId);
171  QAction* getAction(ActionMode theMode);
172 
173  void updateActionsStates();
174  void updateUndoRedo();
175 
176  void removeSection();
177  void removePoint();
178  void addNewPoint(const CurveCreator::Coordinates& theCoords);
179  void insertPointToSelectedSegment( const int theXPosition,
180  const int theYPosition );
181  void moveSelectedPoints( const int theXPosition, const int theYPosition );
182  void updateLocalPointView();
183  void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false );
184 
185  void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() );
186 
187  void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints );
188  void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& =
190 
191  void stopActionMode();
192 
193  void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints,
194  const bool theFillPoints = true );
195  void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints =
197 
198  // curve algorithm
199  int findLocalPointIndex( int theSectionId, double theX, double theY );
200  void findSectionsToPoints( const double theX, const double theY,
202  void convert( const CurveCreator_ICurve::SectionToPointList& thePoints,
203  QMap<int, QList<int> >& theConvPoints );
204 
205  bool contains( const CurveCreator_ICurve::SectionToPointList& theList,
206  const CurveCreator_ICurve::SectionToPoint& theValue ) const;
207 
208 protected:
209  // Boundary points of mouse to select the points
210  QPoint myStartPoint;
211  QPoint myEndPoint;
212 
213 private:
214  QMap<ActionId, QAction*> myActionMap;
220  OCCViewer_Viewer* myOCCViewer;
228  QMap<CurveCreator_ICurve::SectionToPoint, CurveCreator::Coordinates> myInitialDragPointsCoords;
229  bool myDragged;
230  QByteArray myGuiState;
231  OCCViewer_ViewWindow::Mode2dType myOld2DMode;
232 };
233 
234 #endif // CURVECREATOR_WIDGET_H