X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IViewer.h;h=f079bd4d93bf33ec1d50f7d58033ea69a0b67acc;hb=a5a596631807c90ad33d0237e12fdb1ee77193ae;hp=3cf3bc5ab332613847b717ad872f65de38ee6f00;hpb=9e10a25021a539ae9bb44e85e244a8e3fa8119ed;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IViewer.h b/src/ModuleBase/ModuleBase_IViewer.h index 3cf3bc5ab..f079bd4d9 100644 --- a/src/ModuleBase/ModuleBase_IViewer.h +++ b/src/ModuleBase/ModuleBase_IViewer.h @@ -1,12 +1,31 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// 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 +// #ifndef ModuleBase_IViewer_H #define ModuleBase_IViewer_H #include "ModuleBase.h" #include +#include #include #include +#include class QMouseEvent; class QKeyEvent; @@ -16,7 +35,7 @@ class ModuleBase_IViewWindow; /** * \ingroup GUI * A Base object for definition of connector object to - * Salome Viewer. Reimplemented in NewGeom_SalomeViewer class + * Salome Viewer. Reimplemented in SHAPERGUI_SalomeViewer class */ class MODULEBASE_EXPORT ModuleBase_IViewer : public QObject { @@ -24,20 +43,23 @@ Q_OBJECT public: /// Constructor /// \param theParent a parent object - ModuleBase_IViewer(QObject* theParent) - : QObject(theParent) - { - } + ModuleBase_IViewer(QObject* theParent); //! Returns AIS_InteractiveContext from current OCCViewer virtual Handle(AIS_InteractiveContext) AISContext() const = 0; + //! Trihedron 3d object shown in the viewer + virtual Handle(AIS_Trihedron) trihedron() const = 0; + //! Retrurns V3d_Vioewer from current viewer virtual Handle(V3d_Viewer) v3dViewer() const = 0; //! Returns Vsd_View object from currently active view window virtual Handle(V3d_View) activeView() const = 0; + //! Returns currently active view port widget + virtual QWidget* activeViewPort() const = 0; + //! Enable or disable selection in the viewer //! \param isEnabled is enable or disable flag virtual void enableSelection(bool isEnabled) = 0; @@ -52,14 +74,22 @@ Q_OBJECT //! Returns true if multiselection is enabled virtual bool isMultiSelectionEnabled() const = 0; + //! Enable or disable draw mode in the viewer + virtual bool enableDrawMode(bool isEnabled) = 0; + //! Perfroms the fit all for the active view virtual void fitAll() = 0; + //! Erases all presentations from the viewer + virtual void eraseAll() = 0; + //! Sets the view projection /// \param theX the X projection value /// \param theY the Y projection value /// \param theZ the Z projection value - virtual void setViewProjection(double theX, double theY, double theZ) = 0; + /// \param theTwist the twist angle in radians + virtual void setViewProjection( double theX, double theY, double theZ, + double theTwist ) = 0; /// Add selection filter to the viewer /// \param theFilter a selection filter @@ -69,16 +99,51 @@ Q_OBJECT /// \param theFilter a selection filter virtual void removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) = 0; - /// Remove all selection filters from the viewer - virtual void clearSelectionFilters() = 0; + /// Returns true if the selection filter is set to the viewer + /// \param theFilter a selection filter + virtual bool hasSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) = 0; /// Update current viewer virtual void update() = 0; - /// Method returns True if the viewer can process editing objects + /// Returns a scale factor of the given view + /// \param theView a view object + const double Scale(const Handle(V3d_View)& theView) + { + if (!myWindowScale.contains(theView)) + myWindowScale.insert(theView, theView->Camera()->Scale()); + return myWindowScale[theView]; + } + + /// Remember a scale factor for the view object + /// \param theView a view object + /// \param theVal a scale factor + void SetScale(const Handle(V3d_View)& theView, const double theVal) + { myWindowScale[theView] = theVal; } + + /// Method returns True if the viewer can process editing objects /// by mouse drugging. If this is impossible thet it has to return False. virtual bool canDragByMouse() const { return true; } + /// Fit all along Z (perpendicular to display) + //virtual void Zfitall() = 0; + + /// Show highlight for pre-highlighted sub-shape + virtual void updateHighlight() {} + + /// Set flag which indicates that viewer is used for 2d operations + /// \param is2d a new 2d mode state + void set2dMode(bool is2d) { + myIs2dMode = is2d; + } + + /// Returns current state of 2d mode flag + bool is2dMode() const { + return myIs2dMode; + } + + static Handle(Prs3d_Drawer) DefaultHighlightDrawer; + signals: /// Signal emited when last view window is closed void lastViewClosed(); @@ -118,6 +183,19 @@ signals: /// Signal emited on selection changed void contextMenuRequested(QContextMenuEvent*); + + /// Signal emitted on transformation of view point in view window + /// \param theTransformation type of transformation (see AppElements_ViewWindow::OperationType) + void viewTransformed(int theTransformation); + + /// Signal emited on selection changed + void trihedronVisibilityChanged(bool theState); + + protected: + /// A map for storing a scale factors dependent on view object + QMap myWindowScale; + + bool myIs2dMode; }; #endif