]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Implement custom fit all command which is used in sketcher of SHAPER module vsv/occ_custom_fit_all
authorvsv <vsv@opencascade.com>
Thu, 12 Sep 2019 08:18:43 +0000 (11:18 +0300)
committervsv <vsv@opencascade.com>
Thu, 12 Sep 2019 08:18:43 +0000 (11:18 +0300)
src/OCCViewer/OCCViewer_ViewModel.cxx
src/OCCViewer/OCCViewer_ViewModel.h
src/OCCViewer/OCCViewer_ViewWindow.cxx

index 87370f17d8c1f6f6a2d2beb36fbf331adbd1e216..0acca6fc514813cef08c138401a88ce96d6ab95c 100644 (file)
@@ -115,7 +115,8 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron)
 #if OCC_VERSION_LARGE <= 0x07030000
   myIsUseLocalSelection(false),
 #endif
-  myClippingDlg (NULL)
+  myClippingDlg (NULL),
+  myFitter(0)
 {
   // init CasCade viewers
   myV3dViewer = OCCViewer_VService::CreateViewer( TCollection_ExtendedString("Viewer3d").ToExtString() );
index 8d91518e92fcfd2c525fa8e34751978b02fdfe81..dddf9d11a5827136d76986e47232042ec0afd52c 100644 (file)
@@ -58,6 +58,19 @@ class QtxAction;
 #pragma warning( disable:4251 )
 #endif
 
+/**
+An object wich provides alternative way to fit scene in a view
+*/
+class OCCViewer_Fitter
+{
+public:
+  /// A method which has top be reimplemented to provide alterantive implementation FitAll command
+  /// \param theView - a view which has to be fit
+  virtual void fitAll(Handle(V3d_View) theView) = 0;
+};
+
+
+
 class OCCVIEWER_EXPORT OCCViewer_Viewer: public SUIT_ViewModel
 {
   Q_OBJECT
@@ -143,6 +156,18 @@ public:
   bool                            useLocalSelection() const;
 #endif
 
+  // Methods to access fitter
+
+  /// Returns currently installed fitter
+  OCCViewer_Fitter* fitter() const { return myFitter; }
+
+  /// Installs new fitter
+  /// \param theFitter a new fitter
+  void setFitter(OCCViewer_Fitter* theFitter) {
+    myFitter = theFitter;
+  }
+
+
 public:
   Handle(V3d_Viewer)              getViewer3d()    const { return myV3dViewer;}
   Handle(AIS_InteractiveContext)  getAISContext()  const { return myAISContext; }
@@ -298,6 +323,8 @@ protected:
 #if OCC_VERSION_LARGE <= 0x07030000
   bool                            myIsUseLocalSelection;
 #endif
+
+  OCCViewer_Fitter* myFitter;
 };
 
 #ifdef WIN32
index f866ca29c2ed381227eb1ef87c3123c598783449..dd348ed311d47a8c8303c7b07b183a03037a9436 100644 (file)
@@ -1936,7 +1936,10 @@ void OCCViewer_ViewWindow::setProjectionType( int mode )
 void OCCViewer_ViewWindow::onFitAll()
 {
   emit vpTransformationStarted( FITALLVIEW );
-  myViewPort->fitAll();
+  if (myModel->fitter())
+    myModel->fitter()->fitAll(myViewPort->getView());
+  else
+    myViewPort->fitAll();
   emit vpTransformationFinished( FITALLVIEW );
 }