diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index a3feab7a4..470e4a325 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -72,6 +72,7 @@ + diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 4d5dcfd11..28cd31fc0 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -125,6 +125,7 @@ SMESH_ActorDef::SMESH_ActorDef() myTimeStamp = vtkTimeStamp::New(); myIsPointsVisible = false; + myIsEntityModeCache = false; myIsShrinkable = false; myIsShrunk = false; @@ -431,6 +432,7 @@ SMESH_ActorDef::SMESH_ActorDef() return; myEntityMode = eAllEntity; + myEntityModeCache = eAllEntity; // Clipping planes myImplicitBoolean = vtkImplicitBoolean::New(); @@ -827,29 +829,48 @@ SetControlMode(eControl theMode, } } - if(theCheckEntityMode){ - if(myControlActor == my1DActor) + if(theCheckEntityMode) { + if(myControlActor == my1DActor) { + if (!myIsEntityModeCache){ + myEntityModeCache = GetEntityMode(); + myIsEntityModeCache=true; + } SetEntityMode(eEdges); - else if(myControlActor == my2DActor){ - switch(myControlMode){ + } + else if(myControlActor == my2DActor) { + switch(myControlMode) { case eLength2D: case eFreeEdges: case eFreeFaces: case eMultiConnection2D: - //SetEntityMode(eEdges); + if (!myIsEntityModeCache){ + myEntityModeCache = GetEntityMode(); + myIsEntityModeCache=true; + } SetEntityMode(eFaces); break; default: + if (!myIsEntityModeCache){ + myEntityModeCache = GetEntityMode(); + myIsEntityModeCache=true; + } SetEntityMode(eFaces); } - }else if(myControlActor == my3DActor) + }else if(myControlActor == my3DActor) { + if (!myIsEntityModeCache){ + myEntityModeCache = GetEntityMode(); + myIsEntityModeCache=true; + } SetEntityMode(eVolumes); } + } } else { - if(theCheckEntityMode) - myEntityMode = eAllEntity; + if(theCheckEntityMode){ + myEntityMode = myEntityModeCache; + myIsEntityModeCache = false; + } myFunctor.reset(); } @@ -857,6 +878,7 @@ SetControlMode(eControl theMode, myTimeStamp->Modified(); Modified(); + Update(); } @@ -1611,6 +1633,11 @@ void SMESH_ActorDef::Update(){ if(myIsFacesOriented){ SetFacesOriented(myIsFacesOriented); } + + if(myVisualObj->GetEntitiesFlag()) { + myEntityMode |= myVisualObj->GetEntitiesState(); + } + SetEntityMode(GetEntityMode()); SetVisibility(GetVisibility()); diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h index 6eec6aa2a..001806113 100644 --- a/src/OBJECT/SMESH_ActorDef.h +++ b/src/OBJECT/SMESH_ActorDef.h @@ -262,6 +262,8 @@ class SMESH_ActorDef : public SMESH_Actor unsigned int myEntityMode; unsigned int myEntityState; + unsigned int myEntityModeCache; + bool myIsEntityModeCache; bool myIsPointsVisible; bool myIsShrinkable;