]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Apply object transparency to the preview of the free faces.
authorrnv <rnv@opencascade.com>
Wed, 29 Jan 2014 14:00:16 +0000 (14:00 +0000)
committerrnv <rnv@opencascade.com>
Wed, 29 Jan 2014 14:00:16 +0000 (14:00 +0000)
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_Displayer.h
src/RepairGUI/RepairGUI_FreeFacesDlg.cxx

index 252880f563a82a3cb09092eaae8149dd284f3e96..c205a850532920d96fa162f92388a9cab6f4568e 100644 (file)
@@ -355,7 +355,7 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st )
 
   myWidth = -1;
   myType = -1;
-
+  myTransparency = -1.0;
   myToActivate = true;
   // This parameter is used for activisation/deactivisation of objects to be displayed
 
@@ -702,7 +702,11 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
   AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() );
 
   // set transparency
-  AISShape->SetTransparency( propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
+  if( HasTransparency() ) {
+    AISShape->SetTransparency( GetTransparency() );
+  } else {
+    AISShape->SetTransparency( propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
+  }
 
   // set iso properties
   int uIsos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() )[0].toInt();
@@ -941,7 +945,11 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create )
   actor->SetEdgesInShadingColor( c.redF(), c.greenF(), c.blueF() );
 
   // set opacity
-  actor->SetOpacity( 1.0 - propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
+  if( HasTransparency() ) {
+    actor->SetOpacity( 1.0 - GetTransparency() );
+  } else {
+    actor->SetOpacity( 1.0 - propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
+  }
 
   // set line width
   actor->SetWidth( HasWidth() ?
@@ -1858,6 +1866,33 @@ void GEOM_Displayer::UnsetColor()
   myShadingColor = SalomeApp_Tools::color( col );
 }
 
+//=================================================================
+/*!
+ *  GEOM_Displayer::SetTransparency
+ *  Set transparency for shape displaying.
+ */
+//=================================================================
+void GEOM_Displayer::SetTransparency( const double transparency )
+{
+  myTransparency = transparency;
+}
+
+double GEOM_Displayer::GetTransparency() const
+{
+  return myTransparency;
+}
+
+bool GEOM_Displayer::HasTransparency() const
+{
+  return myTransparency != -1.0;
+}
+
+void GEOM_Displayer::UnsetTransparency()
+{
+  myTransparency = -1.0;
+}
+
+
 //=================================================================
 /*!
  *  GEOM_Displayer::SetTexture
index c26eca72a1937576cc1c6a89b568569916095588..db91131fb0cf2e5c3b2354dee368f157e05870c3 100644 (file)
@@ -138,6 +138,11 @@ public:
   void          UnsetColor();
   int           GetColor  () const;
   bool          HasColor  () const;
+
+  void          SetTransparency  ( const double );
+  void          UnsetTransparency();
+  double        GetTransparency  () const;
+  bool          HasTransparency  () const;
   
   /* Set texture for shape displaying. */
   void          SetTexture  ( const std::string& );
@@ -285,6 +290,7 @@ protected:
   bool                             myHasDisplayMode;
   Aspect_TypeOfMarker              myTypeOfMarker;
   double                           myScaleOfMarker;
+  double                           myTransparency;
 
 private:
   SalomeApp_Application* myApp;
index 75501bb939e98223612056ab76a66448398271b3..05ff25b101ef4f3b028cc9f5fc41f8e6c22c69fc 100644 (file)
 #include <LightApp_SelectionMgr.h>
 #include <SalomeApp_Application.h>
 #include <SalomeApp_Tools.h>
+#include <SalomeApp_Study.h>
 
 #include <SUIT_MessageBox.h>
 #include <SUIT_Session.h>
 #include <SUIT_OverrideCursor.h>
 #include <SUIT_Desktop.h>
 #include <SUIT_ResourceMgr.h>
+#include <SUIT_ViewWindow.h>
+#include <SUIT_ViewManager.h>
 
 #include <GEOMImpl_Types.hxx>
+#include <GEOM_Constants.h>
 
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TColStd_MapOfInteger.hxx>
@@ -325,11 +329,33 @@ bool RepairGUI_FreeFacesDlg::execute( ObjectList& objects )
     TopExp::MapShapes( aSelShape, anIndices);
     SALOME_Prs* aPrs = 0;
     
+    //Get object trancparency and set it to preview
+    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+    double transparency = 1.0;
+    if( app ) {
+      SUIT_ViewWindow* window = app->desktop( )->activeWindow( );
+      if( window && window->getViewManager() ) {
+       if ( app ) {
+         SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
+         if( aStudy ) {
+           int aMgrId = window->getViewManager()->getGlobalId();
+           CORBA::String_var aMainEntry = myObj->GetStudyEntry();
+           QString anEntry = aMainEntry.in();
+           QVariant v = aStudy->getObjectProperty( aMgrId , anEntry , GEOM::propertyName( GEOM::Transparency ) , transparency );
+           if( v.canConvert( QVariant::Double ) ) {
+             transparency = v.toDouble();
+           }
+         }
+       }
+      }
+    }
+    
     for ( int i = 0, n = aFaceLst->length(); i < n; i++ ) {
       aFace = anIndices.FindKey( aFaceLst[i] );
       try {
         getDisplayer()->SetColor( Quantity_NOC_RED );
         getDisplayer()->SetToActivate( false );
+       getDisplayer()->SetTransparency( transparency );
         aPrs = !aFace.IsNull() ? getDisplayer()->BuildPrs( aFace ) : 0;
         if ( aPrs )
           displayPreview( aPrs, true );