Version: 9.12.0
MeasureGUI_CreateDimensionDlg.h
Go to the documentation of this file.
1 // Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 
23 // GEOM GEOMGUI : GUI for Geometry component
24 // File : MeasureGUI_CreateDimensionDlg.h
25 // Author : Anton POLETAEV, Open CASCADE S.A.S.
26 //
27 #ifndef MEASUREGUI_CREATEDIMENSIONDLG_H
28 #define MEASUREGUI_CREATEDIMENSIONDLG_H
29 
30 #include "MeasureGUI_Widgets.h"
32 
33 // GEOM includes
34 #include <GEOMBase_Skeleton.h>
35 #include <GEOM_GenericObjPtr.h>
36 
37 // SUIT includes
38 #include <SOCC_ViewModel.h>
39 
40 // OCCT includes
41 #include <AIS_Dimension.hxx>
42 #include <gp_Pnt.hxx>
43 
47 class QAbstractButton;
48 class QTabWidget;
49 class Bnd_Box;
50 class SOCC_Prs;
51 
52 //=================================================================================
53 // class : MeasureGUI_CreateDimensionDlg
54 // purpose : Dialog invoked from MeasureGUI_ManageDimensionDlg for
55 // creating dimension presentations for the passed onwer object.
56 // Does not use operation logics.
57 //=================================================================================
59 {
60  Q_OBJECT
61 
62  class BaseSelectorPane;
63  class LengthPane;
64  class DiameterPane;
65  class AnglePane;
66 
67 public:
68  // Enumerate dimension type radio buttons
70  {
74  };
75 
76 public:
79 
80 public:
81  Handle(AIS_Dimension) GetCreatedDimension() { return myDimension; }
82 
83 public:
84  void Init();
85 
86 
87 signals:
88  void applyClicked();
89 
90 /* User event logics */
91 protected slots:
92  void ConstructTypeChanged( int theType );
93  void OnArgumentTabChanged();
94  void OnStartSelection( const QList<TopAbs_ShapeEnum>& theModes );
95  void OnStopSelection();
96  void SelectionIntoArgument();
97  void OnSelectionDone();
98  void ClickOnOk();
99  bool ClickOnApply();
100 
101 /* Commands */
102 protected:
103  void StartLocalEditing();
104  void StopLocalEditing();
105 
106 /* Construction of preview and interaction */
107 protected:
108  Handle(AIS_Dimension) CreateDimension();
110  bool AddDimensionToOwner();
111 
112 private:
114 
115 private:
116  QString GenerateName( const QString& thePrefix );
117 
118 private:
123  QList<TopAbs_ShapeEnum> mySelectionModes;
125  Handle(AIS_Dimension) myDimension;
126  SOCC_Viewer* myEditingViewer;
128 };
129 
130 //=================================================================================
131 // class : MeasureGUI_CreateDimensionDlg::BaseSelectorPane
132 // purpose : Base selector pane handles events of switching the selector controls
133 // and changing argument tabs
134 //=================================================================================
136 {
137  Q_OBJECT
138 
139 public:
140  typedef QList<TopAbs_ShapeEnum> SelectionModes;
141 
142 public:
143  BaseSelectorPane( QWidget* theParent );
144 
145 signals:
146  void StartSelection( const QList<TopAbs_ShapeEnum>& theModes );
149  void TabChanged();
150 
151 public:
152  void Reset( bool theOpenDefaultTab = false );
153  int ActiveTab() const;
154  void SelectionIntoArguments( const GEOM::GeomObjPtr& theSelected );
155  GEOM::GeomObjPtr GetSelection( QLineEdit* theSelector ) const;
156 
157 public slots:
158  void OnSelectorClicked();
159  void OnTabChanged();
160 
161 protected:
162  void SetTabWidget( QTabWidget* theTabs );
163 
164  /* Register geometry selector controls at base level to provide
165  automatic handling of button clicks, selector switching and
166  sending start selection events to dialog.
167  - theSelectorEdit : line edit control with selected geometry name.
168  - theSelectorButton: selector activation button.
169  - theSelectorModes : shape selection modes allowed for the selection.
170  - theTab : the tab index on which the controls are located. */
171  void RegisterSelector( QLineEdit* theSelectorEdit,
172  QPushButton* theSelectorButton,
173  const SelectionModes& theSelectorModes,
174  const int theTab = 0 );
175 
176 protected:
177  QTabWidget* myTabs;
178  QMap< int, QList<QLineEdit*> > mySelectors;
179  QMap<QLineEdit*, QPushButton*> mySelectionButtons;
180  QMap<QLineEdit*, SelectionModes> mySelectionModes;
181  QMap<QLineEdit*, GEOM::GeomObjPtr> mySelectedShapes;
182  QPixmap mySelectorIcon;
183  QLineEdit* myCurrentSelector;
184 };
185 
186 //=================================================================================
187 // class : MeasureGUI_CreateDimensionDlg::LengthPane
188 // purpose : Layout for length arguments pane
189 //=================================================================================
191 {
192  Q_OBJECT
193 
194 public:
195  enum TabID
196  {
200  };
201 
202 public:
203  LengthPane( QWidget* theParent );
209 
210 private:
211  QTabWidget* myTabs;
215 };
216 
217 //=================================================================================
218 // class : MeasureGUI_CreateDimensionDlg::DiameterPane
219 // purpose : Layout for diameter arguments pane
220 //=================================================================================
222 {
223  Q_OBJECT
224 
225 public:
226  DiameterPane( QWidget* theParent );
227  GEOM::GeomObjPtr GetShape() const { return GetSelection( myShapeSelector->LineEdit1 ); }
228 
229 private:
231 };
232 
233 //=================================================================================
234 // class : MeasureGUI_CreateDimensionDlg::AnglePane
235 // purpose : Layout for angle arguments pane
236 //=================================================================================
238 {
239  Q_OBJECT
240 
241 public:
242  enum TabID
243  {
246  };
247 
248 public:
249  AnglePane( QWidget* theParent );
250  GEOM::GeomObjPtr GetEdge1() const { return GetSelection( myTwoEdgesSelectors->LineEdit1 ); }
251  GEOM::GeomObjPtr GetEdge2() const { return GetSelection( myTwoEdgesSelectors->LineEdit2 ); }
255 
256 private:
257  QTabWidget* myTabs;
260 };
261 
262 #endif
Definition: GEOMBase_Skeleton.h:53
Definition: GeometryGUI.h:74
Definition: MeasureGUI_Widgets.h:146
Definition: MeasureGUI_Widgets.h:194
Definition: MeasureGUI_Widgets.h:210
Definition: MeasureGUI_CreateDimensionDlg.h:238
QTabWidget * myTabs
Definition: MeasureGUI_CreateDimensionDlg.h:257
GEOM::GeomObjPtr GetPoint3() const
Definition: MeasureGUI_CreateDimensionDlg.h:254
GEOM::GeomObjPtr GetEdge1() const
Definition: MeasureGUI_CreateDimensionDlg.h:250
MeasureGUI_2Sel_Frame * myTwoEdgesSelectors
Definition: MeasureGUI_CreateDimensionDlg.h:258
TabID
Definition: MeasureGUI_CreateDimensionDlg.h:243
@ TabID_ThreePoints
Definition: MeasureGUI_CreateDimensionDlg.h:245
@ TabID_TwoEdges
Definition: MeasureGUI_CreateDimensionDlg.h:244
GEOM::GeomObjPtr GetEdge2() const
Definition: MeasureGUI_CreateDimensionDlg.h:251
GEOM::GeomObjPtr GetPoint1() const
Definition: MeasureGUI_CreateDimensionDlg.h:252
AnglePane(QWidget *theParent)
Definition: MeasureGUI_CreateDimensionDlg.cxx:802
GEOM::GeomObjPtr GetPoint2() const
Definition: MeasureGUI_CreateDimensionDlg.h:253
MeasureGUI_3Sel_Frame * myThreePointsSelectors
Definition: MeasureGUI_CreateDimensionDlg.h:259
Definition: MeasureGUI_CreateDimensionDlg.h:136
GEOM::GeomObjPtr GetSelection(QLineEdit *theSelector) const
Definition: MeasureGUI_CreateDimensionDlg.cxx:956
void SelectionIntoArguments(const GEOM::GeomObjPtr &theSelected)
Definition: MeasureGUI_CreateDimensionDlg.cxx:902
void StartSelection(const QList< TopAbs_ShapeEnum > &theModes)
void Reset(bool theOpenDefaultTab=false)
Definition: MeasureGUI_CreateDimensionDlg.cxx:864
void SetTabWidget(QTabWidget *theTabs)
Definition: MeasureGUI_CreateDimensionDlg.cxx:1027
QLineEdit * myCurrentSelector
Definition: MeasureGUI_CreateDimensionDlg.h:183
QMap< int, QList< QLineEdit * > > mySelectors
Definition: MeasureGUI_CreateDimensionDlg.h:178
QList< TopAbs_ShapeEnum > SelectionModes
Definition: MeasureGUI_CreateDimensionDlg.h:140
QPixmap mySelectorIcon
Definition: MeasureGUI_CreateDimensionDlg.h:182
QMap< QLineEdit *, GEOM::GeomObjPtr > mySelectedShapes
Definition: MeasureGUI_CreateDimensionDlg.h:181
QMap< QLineEdit *, QPushButton * > mySelectionButtons
Definition: MeasureGUI_CreateDimensionDlg.h:179
void OnTabChanged()
Definition: MeasureGUI_CreateDimensionDlg.cxx:1003
void OnSelectorClicked()
Definition: MeasureGUI_CreateDimensionDlg.cxx:965
BaseSelectorPane(QWidget *theParent)
Definition: MeasureGUI_CreateDimensionDlg.cxx:852
QMap< QLineEdit *, SelectionModes > mySelectionModes
Definition: MeasureGUI_CreateDimensionDlg.h:180
int ActiveTab() const
Definition: MeasureGUI_CreateDimensionDlg.cxx:893
void RegisterSelector(QLineEdit *theSelectorEdit, QPushButton *theSelectorButton, const SelectionModes &theSelectorModes, const int theTab=0)
Definition: MeasureGUI_CreateDimensionDlg.cxx:1037
QTabWidget * myTabs
Definition: MeasureGUI_CreateDimensionDlg.h:177
Definition: MeasureGUI_CreateDimensionDlg.h:222
DiameterPane(QWidget *theParent)
Definition: MeasureGUI_CreateDimensionDlg.cxx:778
MeasureGUI_1Sel_Frame * myShapeSelector
Definition: MeasureGUI_CreateDimensionDlg.h:230
GEOM::GeomObjPtr GetShape() const
Definition: MeasureGUI_CreateDimensionDlg.h:227
Definition: MeasureGUI_CreateDimensionDlg.h:191
TabID
Definition: MeasureGUI_CreateDimensionDlg.h:196
@ TabID_SingleEdge
Definition: MeasureGUI_CreateDimensionDlg.h:197
@ TabID_ParallelEdges
Definition: MeasureGUI_CreateDimensionDlg.h:199
@ TabID_TwoPoints
Definition: MeasureGUI_CreateDimensionDlg.h:198
QTabWidget * myTabs
Definition: MeasureGUI_CreateDimensionDlg.h:211
GEOM::GeomObjPtr GetSingleEdge() const
Definition: MeasureGUI_CreateDimensionDlg.h:204
MeasureGUI_2Sel_Frame * myTwoPointsSelectors
Definition: MeasureGUI_CreateDimensionDlg.h:213
GEOM::GeomObjPtr GetPoint1() const
Definition: MeasureGUI_CreateDimensionDlg.h:205
MeasureGUI_1Sel_Frame * mySingleEdgeSelectors
Definition: MeasureGUI_CreateDimensionDlg.h:212
GEOM::GeomObjPtr GetEdge1() const
Definition: MeasureGUI_CreateDimensionDlg.h:207
GEOM::GeomObjPtr GetPoint2() const
Definition: MeasureGUI_CreateDimensionDlg.h:206
LengthPane(QWidget *theParent)
Definition: MeasureGUI_CreateDimensionDlg.cxx:726
MeasureGUI_2Sel_Frame * myParallelEdgesSelectors
Definition: MeasureGUI_CreateDimensionDlg.h:214
GEOM::GeomObjPtr GetEdge2() const
Definition: MeasureGUI_CreateDimensionDlg.h:208
Definition: MeasureGUI_CreateDimensionDlg.h:59
bool AddDimensionToOwner()
Definition: MeasureGUI_CreateDimensionDlg.cxx:677
GEOM::GeomObjPtr GetTopLevel(const GEOM::GeomObjPtr &theObject)
bool ClickOnApply()
Definition: MeasureGUI_CreateDimensionDlg.cxx:381
MeasureGUI_CreateDimensionDlg(const GEOM::GeomObjPtr &, GeometryGUI *, QWidget *)
Definition: MeasureGUI_CreateDimensionDlg.cxx:65
void Init()
Definition: MeasureGUI_CreateDimensionDlg.cxx:485
void StopLocalEditing()
Definition: MeasureGUI_CreateDimensionDlg.cxx:462
MeasureGUI_DimensionInteractor * myDimensionInteractor
Definition: MeasureGUI_CreateDimensionDlg.h:124
AnglePane * myAngleArgs
Definition: MeasureGUI_CreateDimensionDlg.h:122
void OnStartSelection(const QList< TopAbs_ShapeEnum > &theModes)
Definition: MeasureGUI_CreateDimensionDlg.cxx:257
void OnStopSelection()
Definition: MeasureGUI_CreateDimensionDlg.cxx:280
QString GenerateName(const QString &thePrefix)
Definition: MeasureGUI_CreateDimensionDlg.cxx:178
void ConstructTypeChanged(int theType)
Definition: MeasureGUI_CreateDimensionDlg.cxx:220
BaseSelectorPane * ActiveArgs()
Definition: MeasureGUI_CreateDimensionDlg.cxx:162
void OnSelectionDone()
Definition: MeasureGUI_CreateDimensionDlg.cxx:335
DiameterPane * myDiameterArgs
Definition: MeasureGUI_CreateDimensionDlg.h:121
int myEditingLayer
Definition: MeasureGUI_CreateDimensionDlg.h:127
void ClickOnOk()
Definition: MeasureGUI_CreateDimensionDlg.cxx:368
GEOM::GeomObjPtr myParentObj
Definition: MeasureGUI_CreateDimensionDlg.h:119
TypeButtonID
Definition: MeasureGUI_CreateDimensionDlg.h:70
@ TypeButtonID_Angle
Definition: MeasureGUI_CreateDimensionDlg.h:73
@ TypeButtonID_Diameter
Definition: MeasureGUI_CreateDimensionDlg.h:72
@ TypeButtonID_Length
Definition: MeasureGUI_CreateDimensionDlg.h:71
~MeasureGUI_CreateDimensionDlg()
Definition: MeasureGUI_CreateDimensionDlg.cxx:154
void OnArgumentTabChanged()
Definition: MeasureGUI_CreateDimensionDlg.cxx:247
SOCC_Viewer * myEditingViewer
Definition: MeasureGUI_CreateDimensionDlg.h:126
QList< TopAbs_ShapeEnum > mySelectionModes
Definition: MeasureGUI_CreateDimensionDlg.h:123
Handle(AIS_Dimension) CreateDimension()
void StartLocalEditing()
Definition: MeasureGUI_CreateDimensionDlg.cxx:411
void SelectionIntoArgument()
Definition: MeasureGUI_CreateDimensionDlg.cxx:294
Handle(AIS_Dimension) GetCreatedDimension()
Definition: MeasureGUI_CreateDimensionDlg.h:81
Handle(AIS_Dimension) myDimension
LengthPane * myLengthArgs
Definition: MeasureGUI_CreateDimensionDlg.h:120
Definition: MeasureGUI_DimensionInteractor.h:51
GenericObjPtr< GEOM::GEOM_Object > GeomObjPtr
Definition: GEOM_GenericObjPtr.h:218