Salome HOME
Additional fix for the bug 0020944: EDF 1464 SMESH: detection of over-constrained...
authorana <ana@opencascade.com>
Thu, 15 Dec 2011 14:35:34 +0000 (14:35 +0000)
committerana <ana@opencascade.com>
Thu, 15 Dec 2011 14:35:34 +0000 (14:35 +0000)
resources/SalomeApp.xml.in
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_ActorDef.h

index a3feab7a49fe5a049402e138881dd521a273c4c7..470e4a3253ff5c72fea3ff06b800f983f0534662 100644 (file)
@@ -72,6 +72,7 @@
     <parameter name="DisplayMode"                  value="true" />
     <parameter name="auto_update"                  value="true" />
     <parameter name="update_limit"                 value="500000" />
+    <parameter name="display_entity"               value="true" />
     <parameter name="display_mode"                 value="1"    />
     <parameter name="auto_groups"                  value="false"/>
     <parameter name="show_result_notification"     value="2"/>
index 4d5dcfd113f48d99b652ad782de01084cf71dead..28cd31fc00e2f30fe85733dbccacce3a69241c3b 100644 (file)
@@ -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());
   
index 6eec6aa2acb52d46ea3d2ed78161b850344cb63e..00180611398eeb87c734837038f8f59a49d1b380 100644 (file)
@@ -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;