X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_ClippingDlg.h;h=8f9ee27616a2e2185823e0809de166aa71d92f95;hp=bc4bab595580c113f268a30aa5964826cef552c2;hb=d9f4b53e489dd5857db264ede6acded7b076c9f1;hpb=81a502af8470190be359d6491a20796dbad5bb97 diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.h b/src/SMESHGUI/SMESHGUI_ClippingDlg.h index bc4bab595..8f9ee2761 100644 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.h +++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.h @@ -1,131 +1,274 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : SMESHGUI_TransparencyDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ -#ifndef DIALOGBOX_CLIPPING_H -#define DIALOGBOX_CLIPPING_H +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_ClippingDlg.h +// Author : Nicolas REJNERI, Open CASCADE S.A.S. +// +#ifndef SMESHGUI_CLIPPINGDLG_H +#define SMESHGUI_CLIPPINGDLG_H -#include +// SMESH includes +#include "SMESH_SMESHGUI.hxx" -#include +// SALOME includes +#include + +// Qt includes +#include +#include + +// VTK includes #include +#include +// STL includes +#include +#include #include -// QT Includes -#include -#include - +class QGroupBox; class QLabel; class QPushButton; -class QTable; class QCheckBox; class QComboBox; - -class LightApp_SelectionMgr; -class SVTK_Selector; - +class QListWidget; +class QListWidgetItem; +class QStackedLayout; +class QSlider; +class QMenu; +class SALOME_Actor; class SMESHGUI; class SMESH_Actor; +class QtxDoubleSpinBox; +class QtxDoubleSpinSlider; +class QtxIntSpinSlider; +class vtkActor; +class vtkDataSetMapper; +class vtkPlaneSource; +class vtkCallbackCommand; +class vtkObject; +class vtkImplicitPlaneWidget; + +namespace SMESH +{ + enum Mode { Absolute, Relative }; + enum Orientation { XY, YZ, ZX }; -class OrientedPlane; + class OrientedPlane: public vtkPlane + { + vtkDataSetMapper* myMapper; + public: + static OrientedPlane *New(); + static OrientedPlane *New(SVTK_ViewWindow* theViewWindow); + vtkTypeMacro (OrientedPlane, vtkPlane) -namespace SMESH { + QPointer myViewWindow; + SMESH::Orientation myRelativeOrientation; + float myDistance; + double myAngle[2]; + double X, Y, Z, Dx, Dy, Dz; + int myAbsoluteOrientation; + bool IsInvert; + bool IsOpenGLClipping; + Mode PlaneMode; - typedef vtkSmartPointer TVTKPlane; - typedef std::vector TPlanes; - enum Orientation {XY, YZ, ZX}; + vtkPlaneSource* myPlaneSource; + SALOME_Actor *myActor; -}; + void SetOrientation (SMESH::Orientation theOrientation) { myRelativeOrientation = theOrientation; } + SMESH::Orientation GetOrientation() { return myRelativeOrientation; } + + void SetDistance (float theDistance) { myDistance = theDistance; } + float GetDistance() { return myDistance; } + + void ShallowCopy (OrientedPlane* theOrientedPlane); + OrientedPlane* InvertPlane (); + + protected: + OrientedPlane(SVTK_ViewWindow* theViewWindow); + OrientedPlane(); + + void Init(); + ~OrientedPlane(); + private: + // Not implemented. + OrientedPlane (const OrientedPlane&); + void operator= (const OrientedPlane&); + }; + + typedef vtkSmartPointer TPlane; + typedef std::list TActorList; + + struct TPlaneData + { + TPlaneData( TPlane thePlane, + TActorList theActorList ) + { + Plane = thePlane; + ActorList = theActorList; + } + TPlane Plane; + TActorList ActorList; + }; + + typedef std::vector TPlaneVector; + typedef std::vector TPlaneDataVector; +} //================================================================================= // class : SMESHGUI_ClippingDlg // purpose : //================================================================================= -class SMESHGUI_ClippingDlg : public QDialog +class SMESHGUI_EXPORT SMESHGUI_ClippingDlg : public QDialog { - Q_OBJECT + Q_OBJECT public: - SMESHGUI_ClippingDlg (SMESHGUI* theModule, - const char* name = 0, - bool modal = false, - WFlags fl = 0); + SMESHGUI_ClippingDlg( SMESHGUI*, SVTK_ViewWindow* ); + ~SMESHGUI_ClippingDlg(); + + static bool AddPlane ( SMESH::TActorList theActorList, + SMESH::OrientedPlane* thePlane ); +protected: + void keyPressEvent( QKeyEvent* ); + static void ProcessEvents( vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); +private: + double getDistance() const; + void setDistance( const double ); + double getRotation1() const; + double getRotation2() const; + void setRotation( const double, const double ); - float getDistance() { return (float)SpinBoxDistance->GetValue(); } - void setDistance (const float theDistance) { SpinBoxDistance->SetValue(theDistance); } - double getRotation1() { return SpinBoxRot1->GetValue(); } - double getRotation2() { return SpinBoxRot2->GetValue(); } - void setRotation (const double theRot1, const double theRot2); - void Sinchronize(); + void setOrigin(double theVal[3]); + void setDirection(double theVal[3]); + + void initializePlaneData(); + void initParam(); + void synchronize(); + void updateActorList(); + void updateActorItem( QListWidgetItem* theItem, + bool theUpdateSelectAll, + bool theUpdateClippingPlaneMap ); + SMESH::TActorList getCurrentActors(); + + void dumpPlaneData() const; + void absolutePlaneToRelative ( double theOrigin[3], double theDir[3] ); + void setBoundsForPreviewWidget(); + vtkImplicitPlaneWidget* createPreviewWidget(); - ~SMESHGUI_ClippingDlg(); private: + SMESHGUI* mySMESHGUI; + SVTK_ViewWindow* myViewWindow; + SMESH::TPlaneDataVector myPlanes; + + vtkCallbackCommand* myCallback; + vtkImplicitPlaneWidget* myPreviewWidget; + double myBounds[6]; + + QComboBox* ComboBoxPlanes; + QCheckBox* isOpenGLClipping; + QPushButton* buttonNew; + QMenu* MenuMode; + QPushButton* buttonDelete; + + QListWidget* ActorList; + QCheckBox* SelectAllCheckBox; - LightApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - SMESH_Actor* myActor; - SMESH::TPlanes myPlanes; - - QComboBox* ComboBoxPlanes; - QPushButton* buttonNew; - QPushButton* buttonDelete; - QLabel* TextLabelOrientation; - QComboBox* ComboBoxOrientation; - QLabel* TextLabelDistance; - SMESHGUI_SpinBox* SpinBoxDistance; - QLabel* TextLabelRot1; - SMESHGUI_SpinBox* SpinBoxRot1; - QLabel* TextLabelRot2; - SMESHGUI_SpinBox* SpinBoxRot2; - QCheckBox* PreviewCheckBox; - QCheckBox* AutoApplyCheckBox; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - - bool myIsSelectPlane; + QStackedLayout* ModeStackedLayout; + + QGroupBox* GroupAbsolutePoint; + QLabel* TextLabelX; + QLabel* TextLabelY; + QLabel* TextLabelZ; + QtxDoubleSpinBox* SpinBox_X; + QtxDoubleSpinBox* SpinBox_Y; + QtxDoubleSpinBox* SpinBox_Z; + QPushButton* resetButton; + + QGroupBox* GroupAbsoluteDirection; + QLabel* TextLabelDx; + QLabel* TextLabelDy; + QLabel* TextLabelDz; + QtxDoubleSpinBox* SpinBox_Dx; + QtxDoubleSpinBox* SpinBox_Dy; + QtxDoubleSpinBox* SpinBox_Dz; + QPushButton* invertButton; + QComboBox* CBAbsoluteOrientation; + + QGroupBox* GroupRelative; + QLabel* TextLabelOrientation; + QLabel* TextLabelDistance; + QLabel* TextLabelRotation1; + QLabel* TextLabelRotation2; + QtxDoubleSpinSlider* SpinSliderDistance; + QtxIntSpinSlider* SpinSliderRotation1; + QtxIntSpinSlider* SpinSliderRotation2; + QComboBox* CBRelativeOrientation; + + QCheckBox* PreviewCheckBox; + QCheckBox* AutoApplyCheckBox; + + QPushButton* buttonOk; + QPushButton* buttonCancel; + QPushButton* buttonApply; + QPushButton* buttonHelp; + + bool myIsSelectPlane; + bool myIsPreviewMoved; + QString myHelpFileName; + + SMESH::Mode CurrentMode; + +protected slots: + virtual void reject(); public slots: + void onModeAbsolute(); + void onModeRelative(); + void ClickOnNew(); + void ClickOnDelete(); + void onSelectPlane( int ); + void onSelectAll( int ); + void onActorItemChanged( QListWidgetItem* ); + void SetCurrentPlaneParam(); + + void onIsOpenGLClipping(bool); + void OnPreviewToggle( bool ); + void onAutoApply(bool); + void ClickOnOk(); + void ClickOnApply(); + void ClickOnHelp(); - void onSelectPlane (int theIndex); - void ClickOnNew(); - void ClickOnDelete(); - void onSelectOrientation (int theItem); - void SetCurrentPlaneParam(); - void onSelectionChanged(); - void OnPreviewToggle (bool theIsToggled); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); + void onSelectAbsoluteOrientation( int ); + void onSelectRelativeOrientation( int ); + void onReset(); + void onInvert(); }; -#endif // DIALOGBOX_TRANSPARENCYDLG_H +#endif // SMESHGUI_CLIPPINGDLG_H