Salome HOME
Revert "Synchronize adm files"
[modules/gui.git] / src / SVTK / SVTK_Renderer.cxx
index 6584727de0fc0b63c587616a942a126021fd79ac..d5ccedbefe59f7690d755967d4b7c4002986c054 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // 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.
+// 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
@@ -28,7 +28,7 @@
 
 #include "SVTK_Trihedron.h"
 #include "SVTK_CubeAxesActor2D.h"
-#include "SVTK_RectPicker.h"
+#include "SVTK_AreaPicker.h"
 
 #include "SALOME_Actor.h"
 #include "VTKViewer_Actor.h"
@@ -47,6 +47,7 @@
 #include <vtkCellPicker.h>
 
 #include <vtkProperty.h>
+#include <vtkProp3DCollection.h>
 
 // undefining min and max because CASCADE's defines them and
 // it clashes with std::min(), std::max() included in utilities.h
@@ -67,8 +68,8 @@ SVTK_Renderer
   myEventCallbackCommand(vtkCallbackCommand::New()),
   myPointPicker(vtkPointPicker::New()),
   myCellPicker(vtkCellPicker::New()),
-  myPointRectPicker(SVTK_RectPicker::New()),
-  myCellRectPicker(SVTK_RectPicker::New()),
+  myPointAreaPicker(SVTK_AreaPicker::New()),
+  myCellAreaPicker(SVTK_AreaPicker::New()),
   myPreHighlightProperty(vtkProperty::New()),
   myHighlightProperty(vtkProperty::New()),
   myTransform(VTKViewer_Transform::New()),
@@ -83,12 +84,12 @@ SVTK_Renderer
   myPointPicker->Delete();
   myCellPicker->Delete();
 
-  myPointRectPicker->Delete();
-  myPointRectPicker->PickFromListOn();
+  myPointAreaPicker->Delete();
+  myPointAreaPicker->PickFromListOn();
 
-  myCellRectPicker->Delete();
-  myCellRectPicker->PickFromListOn();
-  myCellRectPicker->PickPointsOff();
+  myCellAreaPicker->Delete();
+  myCellAreaPicker->PickFromListOn();
+  myCellAreaPicker->PickPointsOff();
 
   //SetPreselectionProp();
   myPreHighlightProperty->Delete();
@@ -244,8 +245,8 @@ SVTK_Renderer
     anActor->SetPointPicker(myPointPicker.GetPointer());
     anActor->SetCellPicker(myCellPicker.GetPointer());
 
-    anActor->SetPointRectPicker(myPointRectPicker.GetPointer());
-    anActor->SetCellRectPicker(myCellRectPicker.GetPointer());
+    anActor->SetPointAreaPicker(myPointAreaPicker.GetPointer());
+    anActor->SetCellAreaPicker(myCellAreaPicker.GetPointer());
 
     anActor->SetPreHighlightProperty(myPreHighlightProperty.GetPointer());
     anActor->SetHighlightProperty(myHighlightProperty.GetPointer());
@@ -275,14 +276,24 @@ SVTK_Renderer
     anActor->SetPointPicker(NULL);
     anActor->SetCellPicker(NULL);
 
-    anActor->SetPointRectPicker(NULL);
-    anActor->SetCellRectPicker(NULL);
+    anActor->SetPointAreaPicker(NULL);
+    anActor->SetCellAreaPicker(NULL);
 
     anActor->SetPreHighlightProperty(NULL);
     anActor->SetHighlightProperty(NULL);
 
     anActor->RemoveFromRender(GetDevice());
 
+    while ( int i = myPointPicker->GetProp3Ds()->IsItemPresent( theActor ))
+      myPointPicker->GetProp3Ds()->RemoveItem( i-1 );
+    while ( int i = myCellPicker->GetProp3Ds()->IsItemPresent( theActor ))
+      myCellPicker->GetProp3Ds()->RemoveItem( i-1 );
+
+    while ( int i = myPointPicker->GetActors()->IsItemPresent( theActor ))
+      myPointPicker->GetActors()->RemoveItem( i-1 );
+    while ( int i = myCellPicker->GetActors()->IsItemPresent( theActor ))
+      myCellPicker->GetActors()->RemoveItem( i-1 );
+
     if(theIsAdjustActors)
       AdjustActors();
   }
@@ -369,8 +380,8 @@ SVTK_Renderer
   myPointPicker->SetTolerance( theTolNodes );
   myCellPicker->SetTolerance( theTolCell );
 
-  myPointRectPicker->SetTolerance( theTolNodes );
-  myCellRectPicker->SetTolerance( theTolCell );
+  myPointAreaPicker->SetTolerance( theTolNodes );
+  myCellAreaPicker->SetTolerance( theTolCell );
 
   mySelector->SetTolerance( theTolObjects );
 }
@@ -382,7 +393,7 @@ SVTK_Renderer
 
 inline
 bool
-CheckBndBox(const vtkFloatingPointType theBounds[6])
+CheckBndBox(const double theBounds[6])
 {
   if(theBounds[0] > -VTK_LARGE_FLOAT && theBounds[1] < VTK_LARGE_FLOAT &&
      theBounds[2] > -VTK_LARGE_FLOAT && theBounds[3] < VTK_LARGE_FLOAT &&
@@ -401,7 +412,7 @@ SVTK_Renderer
   bool aTDisplayed = IsTrihedronDisplayed();
   bool aCDisplayed = IsCubeAxesDisplayed();
 
-  vtkFloatingPointType aNewBndBox[6];
+  double aNewBndBox[6];
   aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT;
   aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT;
 
@@ -414,7 +425,7 @@ SVTK_Renderer
       myCubeAxes->VisibilityOff();
 
     // if the new trihedron size have sufficient difference, then apply the value
-    vtkFloatingPointType aSize = myTrihedron->GetSize();
+    double aSize = myTrihedron->GetSize();
     if ( IsTrihedronRelative() )
       {
         ComputeTrihedronSize(GetDevice(),aSize,aSize,myTrihedronSize);
@@ -432,7 +443,7 @@ SVTK_Renderer
         if(anActor->IsResizable())
           anActor->SetSize(0.5*aSize);
         if(anActor->GetVisibility() && !anActor->IsInfinitive()){
-          vtkFloatingPointType *aBounds = anActor->GetBounds();
+          double *aBounds = anActor->GetBounds();
           if(CheckBndBox(aBounds))
             for(int i = 0; i < 5; i = i + 2){
               if(aBounds[i] < aNewBndBox[i]) 
@@ -485,7 +496,7 @@ SVTK_Renderer
 */
 void
 SVTK_Renderer
-::SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative)
+::SetTrihedronSize(double theSize, const bool theRelative)
 {
   if(myTrihedronSize != theSize || myIsTrihedronRelative != theRelative){
     myTrihedronSize = theSize;
@@ -497,7 +508,7 @@ SVTK_Renderer
 /*!
   \return size of the trihedron in percents from bounding box of the scene
 */
-vtkFloatingPointType
+double
 SVTK_Renderer
 ::GetTrihedronSize() const
 {
@@ -547,6 +558,18 @@ SVTK_Renderer
     myTrihedron->VisibilityOn();
 }
 
+/*!
+  Set trihedron visibility
+*/
+void 
+SVTK_Renderer
+::SetTrihedronVisibility( const bool show ) {
+  if(show)
+    myTrihedron->VisibilityOn();
+  else
+    myTrihedron->VisibilityOff();  
+}
+
 /*!
   Adjust size of the trihedron to the bounding box of the scene
 */
@@ -629,7 +652,7 @@ SVTK_Renderer
   else
     myCubeAxes->VisibilityOff();
 
-  static vtkFloatingPointType aCoeff = 3.0;
+  static double aCoeff = 3.0;
   aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale());
 }