Salome HOME
Bug PAL7334 DEVELOPMENT : Control Improvement
[modules/smesh.git] / src / OBJECT / SMESH_Actor.cxx
index 0c57a09da43f4fc503ac10e6bfa01bfb4a4d7824..bcd45fd945a7e169c61b3400ed282c22b109b6fb 100644 (file)
@@ -284,7 +284,7 @@ SMESH_Actor::SMESH_Actor(){
   myName = "";
   myIO = NULL;
 
-  myColorMode = eNone;
+  myControlMode = eNone;
   my1DColorMode = e1DNone;
   myControlActor = my2DActor;
 
@@ -438,7 +438,7 @@ SMESH_Actor::SMESH_Actor(){
   aPtsTextProp->SetShadow(0);
   myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
   aPtsTextProp->Delete();
-    
+  
   myEntityMode = eAllEntity;
 
   myIsPointsLabeled = false;
@@ -623,7 +623,7 @@ void SMESH_Actor::SetCellsLabeled(bool theIsCellsLabeled){
 
 
 void SMESH_Actor::SetControlMode(eControl theMode){
-  myColorMode = eNone;
+  myControlMode = eNone;
   my1DColorMode = e1DNone;
 
   my1DActor->GetMapper()->SetScalarVisibility(false);
@@ -644,6 +644,12 @@ void SMESH_Actor::SetControlMode(eControl theMode){
       myControlActor = my1DActor;
       break;
     }
+    case eLength:
+    {
+      aFunctor.reset(new SMESH::Controls::Length2D());
+      myControlActor = my2DActor;
+      break;
+    }
     case eFreeBorders:
       aFunctor.reset(new SMESH::Controls::FreeBorders());
       myControlActor = my1DActor;
@@ -719,11 +725,14 @@ void SMESH_Actor::SetControlMode(eControl theMode){
     vtkUnstructuredGrid* aGrid = myControlActor->GetUnstructuredGrid();
     vtkIdType aNbCells = aGrid->GetNumberOfCells();
     if(aNbCells){
-      myColorMode = theMode;
+      myControlMode = theMode;
       if(theMode == eFreeBorders || theMode == eFreeEdges){
        my1DColorMode = e1DHighlited;
        my1DExtActor->SetExtControlMode(aFunctor,myControlActor);
-      }else{
+      } else if (theMode == eLength){
+       my1DColorMode = e1DColored;
+       my1DExtActor->SetLength2DControlMode(aFunctor,myControlActor,myScalarBarActor,myLookupTable);
+      } else{
        if(myControlActor == my1DActor)
          my1DColorMode = e1DColored;
        myControlActor->SetControlMode(aFunctor,myScalarBarActor,myLookupTable);
@@ -988,8 +997,8 @@ void SMESH_Actor::SetVisibility(int theMode, bool theIsUpdateRepersentation){
     if(theIsUpdateRepersentation)
       SetRepresentation(GetRepresentation());
 
-    if(myColorMode != eNone){
-      if(my1DColorMode == e1DHighlited)
+    if(myControlMode != eNone){
+      if(my1DColorMode == e1DHighlited || myControlMode == eLength)
        my1DExtActor->VisibilityOn();
       else if(myControlActor->GetUnstructuredGrid()->GetNumberOfCells())
        myScalarBarActor->VisibilityOn();
@@ -1022,7 +1031,6 @@ void SMESH_Actor::SetVisibility(int theMode, bool theIsUpdateRepersentation){
   Modified();
 }
 
-
 namespace{
 
   inline bool UpdateEntityMode(unsigned int& theOutputMode, 
@@ -1071,7 +1079,6 @@ void SMESH_Actor::SetEntityMode(unsigned int theMode){
   myEntityMode = theMode;
 }
 
-
 void SMESH_Actor::SetRepresentation(int theMode){ 
   int aNbEdges = myVisualObj->GetNbEntities(SMESH::EDGE);
   int aNbFaces = myVisualObj->GetNbEntities(SMESH::FACE);
@@ -1139,15 +1146,22 @@ void SMESH_Actor::SetRepresentation(int theMode){
   my3DActor->SetRepresentation(aReperesent);
 
   my1DExtActor->SetVisibility(false);
-  switch(my1DColorMode){
-  case e1DColored: 
+//   switch(my1DColorMode){
+//   case e1DColored: 
+//     aProp = aBackProp = my1DProp;
+//     if(myRepresentation != ePoint)
+//       aReperesent = SMESH_DeviceActor::eInsideframe;
+//     break;
+//   case e1DHighlited: 
+//     my1DExtActor->SetVisibility(true);
+//     break;
+//   }
+  if (my1DColorMode == e1DColored){
     aProp = aBackProp = my1DProp;
     if(myRepresentation != ePoint)
       aReperesent = SMESH_DeviceActor::eInsideframe;
-    break;
-  case e1DHighlited: 
+  } else if (my1DColorMode == e1DHighlited || myControlMode == eLength){
     my1DExtActor->SetVisibility(true);
-    break;
   }
   
   my1DActor->SetProperty(aProp);