Apply object transparency to the preview of the free faces.

This commit is contained in:
rnv 2014-01-29 14:00:16 +00:00
parent 76089a8b0e
commit 52e50564f3
3 changed files with 70 additions and 3 deletions

View 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

View 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;

View File

@ -30,14 +30,18 @@
#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 );