From a61f4bd518534b8c2347e8dd305638791ea061b8 Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 7 Nov 2014 18:36:38 +0300 Subject: [PATCH] 0052555: TC7.5.0: regression of free faces visualization --- src/GEOMGUI/GEOM_Displayer.cxx | 142 ++++++++++++++++------- src/GEOMGUI/GEOM_Displayer.h | 16 ++- src/RepairGUI/RepairGUI_FreeFacesDlg.cxx | 7 +- 3 files changed, 120 insertions(+), 45 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index f0cf6aa4f..b13c93211 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -473,25 +473,24 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) myHasDisplayMode = false; int aType = resMgr->integerValue("Geometry", "type_of_marker", (int)Aspect_TOM_PLUS); - myWidth = resMgr->integerValue("Geometry", "edge_width", -1); - myIsosWidth = resMgr->integerValue("Geometry", "isolines_width", -1); - myTransparency = resMgr->integerValue("Geometry", "transparency", 0) / 100.; - myHasTransparency = false; - myTypeOfMarker = (Aspect_TypeOfMarker)(std::min((int)Aspect_TOM_RING3, std::max((int)Aspect_TOM_POINT, aType))); myScaleOfMarker = (resMgr->integerValue("Geometry", "marker_scale", 1)-(int)GEOM::MS_10)*0.5 + 1.0; myScaleOfMarker = std::min(7.0, std::max(1., myScaleOfMarker)); + // Next properties provide a way to customize displaying of presentations; + // for instance, this is useful for preview myColor = -1; - // This color is used for shape displaying. If it is equal -1 then - // default color is used. myTexture = ""; - + myNbIsos = -1; myWidth = -1; + myTransparency = -1; myType = -1; + myIsosColor = -1; + myIsosWidth = -1; + + // This parameter is used for activisation/deactivisation (selection) of objects to be displayed myToActivate = true; - // This parameter is used for activisation/deactivisation of objects to be displayed // Activate parallel vizualisation only for testing purpose // and if the corresponding env variable is set to 1 @@ -864,12 +863,34 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap int isosWidth = propMap.value( GEOM::propertyName( GEOM::IsosWidth ) ).toInt(); Handle(Prs3d_IsoAspect) uIsoAspect = AISShape->Attributes()->UIsoAspect(); Handle(Prs3d_IsoAspect) vIsoAspect = AISShape->Attributes()->VIsoAspect(); - uIsoAspect->SetColor( isosColor ); - uIsoAspect->SetWidth( isosWidth ); - uIsoAspect->SetNumber( uIsos ); - vIsoAspect->SetColor( isosColor ); - vIsoAspect->SetWidth( isosWidth ); - vIsoAspect->SetNumber( vIsos ); + + if ( HasIsosColor() ) { + uIsoAspect->SetColor( (Quantity_NameOfColor)GetIsosColor() ); + vIsoAspect->SetColor( (Quantity_NameOfColor)GetIsosColor() ); + } + else { + uIsoAspect->SetColor( isosColor ); + vIsoAspect->SetColor( isosColor ); + } + + if ( HasIsosWidth() ) { + uIsoAspect->SetWidth( GetIsosWidth() ); + vIsoAspect->SetWidth( GetIsosWidth() ); + } + else { + uIsoAspect->SetWidth( isosWidth ); + vIsoAspect->SetWidth( isosWidth ); + } + + if ( HasNbIsos() ) { + uIsoAspect->SetNumber( GetNbIsos() ); + vIsoAspect->SetNumber( GetNbIsos() ); + } + else { + uIsoAspect->SetNumber( uIsos ); + vIsoAspect->SetNumber( vIsos ); + } + AISShape->Attributes()->SetUIsoAspect( uIsoAspect ); AISShape->Attributes()->SetVIsoAspect( vIsoAspect ); @@ -1035,16 +1056,25 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create ) // - set number of iso-lines int nbIsos[2]= { 1, 1 }; - QStringList isos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() ); - nbIsos[0] = isos[0].toInt(); - nbIsos[1] = isos[1].toInt(); + if ( HasNbIsos() ) { + nbIsos[0] = GetNbIsos(); + nbIsos[1] = GetNbIsos(); + } + else { + QStringList isos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() ); + nbIsos[0] = isos[0].toInt(); + nbIsos[1] = isos[1].toInt(); + } actor->SetNbIsos( nbIsos ); // - set iso-lines width - actor->SetIsosWidth( propMap.value( GEOM::propertyName( GEOM::IsosWidth ) ).toInt() ); + actor->SetIsosWidth( HasIsosWidth() ? GetIsosWidth() : propMap.value( GEOM::propertyName( GEOM::IsosWidth ) ).toInt() ); // - set iso-lines color - c = propMap.value( GEOM::propertyName( GEOM::IsosColor ) ).value(); + if ( HasIsosColor() ) + c = SalomeApp_Tools::color( Quantity_Color((Quantity_NameOfColor)GetIsosColor()) ); + else + c = propMap.value( GEOM::propertyName( GEOM::IsosColor ) ).value(); actor->SetIsosColor( c.redF(), c.greenF(), c.blueF() ); // set colors @@ -2022,15 +2052,9 @@ void GEOM_Displayer::UnsetColor() //================================================================= double GEOM_Displayer::SetTransparency( const double transparency ) { - double aPrevTransparency = myTransparency; - if ( transparency < 0 ) { - UnsetTransparency(); - } - else { - myTransparency = transparency; - myHasTransparency = true; - } - return aPrevTransparency; + double prevTransparency = myTransparency; + myTransparency = transparency; + return prevTransparency; } //================================================================= @@ -2052,7 +2076,7 @@ double GEOM_Displayer::GetTransparency() const //================================================================= bool GEOM_Displayer::HasTransparency() const { - return myHasTransparency; + return myTransparency >= 0; } //================================================================= @@ -2063,27 +2087,17 @@ bool GEOM_Displayer::HasTransparency() const //================================================================= double GEOM_Displayer::UnsetTransparency() { - double aPrevTransparency = myTransparency; - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myTransparency = resMgr->integerValue("Geometry", "transparency", 0) / 100.; - myHasTransparency = false; - return aPrevTransparency; + return SetTransparency( -1 ); } - //================================================================= /*! * GEOM_Displayer::SetTexture - * Set color for shape displaying. If it is equal -1 then default color is used. - * Available values are from Quantity_NameOfColor enumeration */ //================================================================= void GEOM_Displayer::SetTexture( const std::string& texureFileName ) { - if(texureFileName!="") - { - myTexture = texureFileName; - } + myTexture = texureFileName; } bool GEOM_Displayer::HasTexture() const @@ -2122,7 +2136,6 @@ void GEOM_Displayer::UnsetWidth() myWidth = -1; } - int GEOM_Displayer::GetIsosWidth() const { return myIsosWidth; @@ -2138,6 +2151,49 @@ bool GEOM_Displayer::HasIsosWidth() const return myIsosWidth != -1; } +int GEOM_Displayer::SetNbIsos( const int nbIsos ) +{ + int prevNbIsos = myNbIsos; + myNbIsos = nbIsos; + return prevNbIsos; +} + +int GEOM_Displayer::UnsetNbIsos() +{ + return SetNbIsos( -1 ); +} + +int GEOM_Displayer::GetNbIsos() const +{ + return myNbIsos; +} + +bool GEOM_Displayer::HasNbIsos() const +{ + return myNbIsos >= 0; +} + +int GEOM_Displayer::SetIsosColor( const int color ) +{ + int prevColor = myIsosColor; + myIsosColor = color; + return prevColor; +} + +int GEOM_Displayer::GetIsosColor() const +{ + return myIsosColor; +} + +bool GEOM_Displayer::HasIsosColor() const +{ + return myIsosColor != -1; +} + +int GEOM_Displayer::UnsetIsosColor() +{ + return SetIsosColor( -1 ); +} //================================================================= /*! diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 0096c51b2..cd8f465e6 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -162,7 +162,20 @@ public: void SetIsosWidth ( const int ); int GetIsosWidth () const; bool HasIsosWidth () const; + + /* Set nb iso-libes for displaying. Use -1 to set default values. */ + int SetNbIsos( const int ); + int UnsetNbIsos(); + int GetNbIsos() const; + bool HasNbIsos() const; + /* Set color for iso-lines displaying. If it is equal -1 then default color is used. + Available values are from Quantity_NameOfColor enumeration */ + int SetIsosColor ( const int ); + int UnsetIsosColor(); + int GetIsosColor () const; + bool HasIsosColor () const; + /* Set display mode shape displaying. If it is equal -1 then display mode is used. */ int SetDisplayMode( const int ); int GetDisplayMode() const; @@ -289,13 +302,14 @@ protected: int myColor; double myWidth; int myIsosWidth; + int myNbIsos; + int myIsosColor; bool myToActivate; int myDisplayMode; bool myHasDisplayMode; Aspect_TypeOfMarker myTypeOfMarker; double myScaleOfMarker; double myTransparency; - bool myHasTransparency; private: SalomeApp_Application* myApp; diff --git a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx index 8fe66a4bd..87d58b77c 100644 --- a/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx +++ b/src/RepairGUI/RepairGUI_FreeFacesDlg.cxx @@ -354,8 +354,13 @@ bool RepairGUI_FreeFacesDlg::execute( ObjectList& objects ) aFace = anIndices.FindKey( aFaceLst[i] ); try { getDisplayer()->SetColor( Quantity_NOC_RED ); - getDisplayer()->SetToActivate( false ); getDisplayer()->SetTransparency( transparency ); + getDisplayer()->SetWidth( 2 ); + getDisplayer()->SetNbIsos( 1 ); + getDisplayer()->SetIsosWidth( 1 ); + getDisplayer()->SetIsosColor( Quantity_NOC_RED ); + getDisplayer()->SetDisplayMode( 0 ); + getDisplayer()->SetToActivate( false ); aPrs = !aFace.IsNull() ? getDisplayer()->BuildPrs( aFace ) : 0; if ( aPrs ) displayPreview( aPrs, true );