Salome HOME
Remove obsolete files
[modules/geom.git] / src / DisplayGUI / DisplayGUI.cxx
index aed7a556f37bbc03a0d8ac7fc968b143c7c116bc..e0e94a8eefe27d894f4a6f9c0d9937fae108f218 100644 (file)
@@ -1,23 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  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
+// 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.
+// 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.
+// 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
+// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 // GEOM GEOMGUI : GUI for Geometry component
@@ -27,6 +27,7 @@
 #include "DisplayGUI.h"
 #include <GeometryGUI.h>
 #include "GeometryGUI_Operations.h"
+#include <GEOM_Constants.h>
 #include <GEOM_Displayer.h>
 #include <GEOM_AISShape.hxx>
 #include <GEOM_Actor.h>
@@ -92,11 +93,14 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
   Sel->selectedObjects( selected );
 
   switch ( theCommandID ) {
-  case GEOMOp::OpDisplayMode:    // MENU VIEW - DISPLAY MODE - WIREFRAME/SHADING
-    InvertDisplayMode();
-    getGeometryGUI()->action( GEOMOp::OpDisplayMode )->setText
-      ( GetDisplayMode() == 1 ? tr( "GEOM_MEN_WIREFRAME" ) : tr("GEOM_MEN_SHADING") );
-    getGeometryGUI()->menuMgr()->update();
+  case GEOMOp::OpDMWireframe:         // MENU VIEW - DISPLAY MODE - WIREFRAME
+    SetDisplayMode( 0 );
+    break;
+  case GEOMOp::OpDMShading:           // MENU VIEW - DISPLAY MODE - SHADING
+    SetDisplayMode( 1 );
+    break;
+  case GEOMOp::OpDMShadingWithEdges:  // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES
+    SetDisplayMode( 2 );
     break;
   case GEOMOp::OpShowAll:        // MENU VIEW - SHOW ALL
     getGeometryGUI()->EmitSignalDeactivateDialog();
@@ -128,9 +132,15 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
   case GEOMOp::OpShading:        // POPUP MENU - DISPLAY MODE - SHADING
     ChangeDisplayMode( 1 );
     break;
-  case GEOMOp::OpVectors:        // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION
+  case GEOMOp::OpShadingWithEdges: // POPUP MENU - DISPLAY MODE - SHADING WITH EDGES
     ChangeDisplayMode( 2 );
     break;
+  case GEOMOp::OpTexture:        // POPUP MENU - DISPLAY MODE - TEXTURE
+    ChangeDisplayMode( 3 );
+    break;
+    case GEOMOp::OpVectors:        // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION
+    ChangeDisplayMode( 4 );
+    break;
   default:
     app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
     break;
@@ -347,47 +357,44 @@ void DisplayGUI::SetDisplayMode( const int mode, SUIT_ViewWindow* viewWindow )
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
     Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-    AIS_DisplayMode newmode = (mode == 1 ? AIS_Shaded : AIS_WireFrame);
+
+    AIS_DisplayMode newmode;
+    switch (mode) {
+    case 0:
+      newmode = AIS_WireFrame;
+      break;
+    case 1:
+      newmode = AIS_Shaded;
+      break;
+    case 2:
+      newmode = AIS_DisplayMode( GEOM_AISShape::ShadingWithEdges );
+      break;
+    case 3:
+      newmode = AIS_DisplayMode( GEOM_AISShape::TexturedShape );
+      break;
+    default:
+      break;
+    }
+
     AIS_ListOfInteractive List;
     ic->DisplayedObjects( List );
     AIS_ListOfInteractive List1;
     ic->ObjectsInCollector( List1 );
     List.Append( List1 );
-
+    
     AIS_ListIteratorOfListOfInteractive ite( List );
     while( ite.More() ) {
       if( ite.Value()->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) {
-        Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( ite.Value() );
-        ic->SetDisplayMode( aSh, Standard_Integer( newmode ),true );
+       Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( ite.Value() );
+       ic->SetDisplayMode( aSh, Standard_Integer( newmode ),true );
       }
       ite.Next();
     }
-
+      
     ic->SetDisplayMode( newmode, Standard_False );
-    GeometryGUI::Modified();
-  }
-}
 
-//=====================================================================================
-// function : DisplayGUI::GetDisplayMode()
-// purpose  : Get display mode of the viewer (current viewer if <viewWindow> - 0 )
-//=====================================================================================
-int DisplayGUI::GetDisplayMode( SUIT_ViewWindow* viewWindow )
-{
-  int dispMode = 0;
-  if ( !viewWindow ) 
-    viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow();
-  if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
-    SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView();
-    dispMode = aView->GetDisplayMode();
-  } 
-  else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
-    OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
-    Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-    AIS_DisplayMode mode = (AIS_DisplayMode)ic->DisplayMode();
-    dispMode = (mode == AIS_WireFrame ? 0 : 1 );
+    GeometryGUI::Modified();
   }
-  return dispMode;
 }
 
 //=====================================================================================
@@ -401,7 +408,7 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow )
   if ( !viewWindow ) 
     viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow();
   if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
-    viewWindow->setCustomData( "VectorsMode", QVariant( mode ) );
+    viewWindow->setProperty( "VectorsMode", mode );
     SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( viewWindow );
     vtkActorCollection* allActors = vw->getRenderer()->GetActors();
     allActors->InitTraversal();
@@ -418,7 +425,7 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow )
     GeometryGUI::Modified();
   }
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
-    viewWindow->setCustomData( "VectorsMode", QVariant( mode ) );
+    viewWindow->setProperty( "VectorsMode", mode );
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
     Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
     AIS_ListOfInteractive List;
@@ -448,17 +455,7 @@ int DisplayGUI::GetVectorMode( SUIT_ViewWindow* viewWindow )
 {
   if ( !viewWindow ) 
     viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow();
-  return viewWindow->getCustomData( "VectorsMode" ).toBool();
-}
-
-//=====================================================================================
-// function : DisplayGUI::InvertDisplayMode()
-// purpose  : Invert display mode ( shadin <-> wireframe ) for the viewer 
-//            (current viewer if <viewWindow> = 0 )
-//=====================================================================================
-void DisplayGUI::InvertDisplayMode( SUIT_ViewWindow* viewWindow )
-{
-  SetDisplayMode( 1 - GetDisplayMode( viewWindow ) );
+  return viewWindow->property( "VectorsMode" ).toBool();
 }
 
 //=====================================================================================
@@ -500,23 +497,26 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
       SVTK_Prs* vtkPrs =
         stvkViewer ? dynamic_cast<SVTK_Prs*>( stvkViewer->CreatePrs( It.Value()->getEntry() ) ) : 0;
       if ( vtkPrs && !vtkPrs->IsNull() ) {
-        if ( mode == 0 )
+       if (mode == 0 )
           aView->ChangeRepresentationToWireframe( vtkPrs->GetObjects() );
-        else if ( mode == 1 )
+       else if ( mode == 1 )
           aView->ChangeRepresentationToSurface( vtkPrs->GetObjects() );
-        else if ( mode == 2 ) {
+       else if ( mode == 2 )
+         aView->ChangeRepresentationToSurfaceWithEdges( vtkPrs->GetObjects() );
+       else if ( mode == 4 ) {
           vtkActorCollection* anActors = vtkPrs->GetObjects();
           anActors->InitTraversal();
           while (vtkActor* anAct = anActors->GetNextActor()) {
             GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(anAct);
-           vectorMode = !aGeomActor->GetVectorMode();
-           aGeomActor->SetVectorMode(vectorMode);
+            vectorMode = !aGeomActor->GetVectorMode();
+            aGeomActor->SetVectorMode(vectorMode);
           }
         }
-       if(mode == 0 || mode == 1) {
+       if(mode == 0 || mode == 1 || mode == 2) {
          aStudy->setObjectProperty(mgrId,It.Value()->getEntry(),DISPLAY_MODE_PROP, mode);
-       } else if (mode == 3) {
-         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP , vectorMode);
+       }
+       else if (mode == 4) {
+         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode);        
        }
       }
     }
@@ -539,22 +539,27 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
         AIS_ListOfInteractive shapes; occPrs->GetObjects( shapes );
         AIS_ListIteratorOfListOfInteractive interIter( shapes );
         for ( ; interIter.More(); interIter.Next() ) {
-          if ( mode == 0 )
+         if ( mode == 0 )
             ic->SetDisplayMode( interIter.Value(), AIS_WireFrame, false );
-          else if ( mode == 1 )
+         else if ( mode == 1 )
             ic->SetDisplayMode( interIter.Value(), AIS_Shaded, false );
-          if (mode == 2 ) {
-            Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() );
+         else if ( mode == 2 )
+           ic->SetDisplayMode( interIter.Value(), GEOM_AISShape::ShadingWithEdges, false );
+         else if ( mode == 3 )
+            ic->SetDisplayMode( interIter.Value(), AIS_ExactHLR, false );
+         else if (mode == 4 ) {
+           Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() );
             if ( !aSh.IsNull() ) {
-             vectorMode = !aSh->isShowVectors();      
+              vectorMode = !aSh->isShowVectors();      
               aSh->SetDisplayVectors(vectorMode);
               ic->RecomputePrsOnly(interIter.Value());
             }
           }
         }
-       if(mode == 0 || mode == 1) {
+       if(mode == 0 || mode == 1 || mode == 2 || mode == 3) {
          aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),DISPLAY_MODE_PROP, mode);
-       } else if (mode == 2) {
+       }
+       else if (mode == 4) {
          aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode);
        }
       }