Salome HOME
PAL19321 Problem of Create Group for volumes
authoreap <eap@opencascade.com>
Fri, 21 Mar 2008 11:10:21 +0000 (11:10 +0000)
committereap <eap@opencascade.com>
Fri, 21 Mar 2008 11:10:21 +0000 (11:10 +0000)
    SetEntityMode() according to group type

src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.h

index 64607bcefaedb92f5b49bf0ce3ed462e766bad29..4967b1b8b5fa8a8f075cd563d0b1fa9f771b4aff 100644 (file)
@@ -479,7 +479,9 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
   mySelectionMgr->installFilter(myMeshFilter);
 
   /* init data from current selection */
   mySelectionMgr->installFilter(myMeshFilter);
 
   /* init data from current selection */
+  restoreShowEntityMode();
   myMesh = SMESH::SMESH_Mesh::_duplicate(theMesh);
   myMesh = SMESH::SMESH_Mesh::_duplicate(theMesh);
+  setShowEntityMode();
   myGroup = SMESH::SMESH_Group::_nil();
   myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
 
   myGroup = SMESH::SMESH_Group::_nil();
   myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
 
@@ -509,7 +511,9 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
 //=================================================================================
 void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
 {
 //=================================================================================
 void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
 {
+  restoreShowEntityMode();
   myMesh = theGroup->GetMesh();
   myMesh = theGroup->GetMesh();
+  setShowEntityMode();
   
   myName->setText(theGroup->GetName());
   myName->home(false);
   
   myName->setText(theGroup->GetName());
   myName->home(false);
@@ -629,8 +633,9 @@ void SMESHGUI_GroupDlg::onTypeChanged (int id)
     myElements->clear();
     if (myCurrentLineEdit == 0)
       setSelectionMode(id);
     myElements->clear();
     if (myCurrentLineEdit == 0)
       setSelectionMode(id);
+    myTypeId = id;
+    setShowEntityMode();
   }
   }
-  myTypeId = id;
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -994,7 +999,8 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 
       if (aNbSel != 1 ) {
         myGroup = SMESH::SMESH_Group::_nil();
 
       if (aNbSel != 1 ) {
         myGroup = SMESH::SMESH_Group::_nil();
-       myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil(); 
+        myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
+        restoreShowEntityMode();
         myMesh = SMESH::SMESH_Mesh::_nil();
        updateGeomPopup();
         updateButtons();
         myMesh = SMESH::SMESH_Mesh::_nil();
        updateGeomPopup();
         updateButtons();
@@ -1004,7 +1010,9 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
       Handle(SALOME_InteractiveObject) IO = aList.First();
 
       if (myCreate) {
       Handle(SALOME_InteractiveObject) IO = aList.First();
 
       if (myCreate) {
+        restoreShowEntityMode();
         myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
         myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
+        setShowEntityMode();
        updateGeomPopup();
         if (myMesh->_is_nil())
        {
        updateGeomPopup();
         if (myMesh->_is_nil())
        {
@@ -1682,6 +1690,7 @@ void SMESHGUI_GroupDlg::onClose()
     SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters
     SMESH::SetPointRepresentation(false);
     SMESH::SetPickable();
     SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters
     SMESH::SetPointRepresentation(false);
     SMESH::SetPickable();
+    restoreShowEntityMode();
   }
 
   mySelectionMgr->clearSelected();
   }
 
   mySelectionMgr->clearSelected();
@@ -1986,3 +1995,39 @@ void SMESHGUI_GroupDlg::setDefaultGroupColor()
 
   setGroupQColor( aQColor );
 }
 
   setGroupQColor( aQColor );
 }
+
+//=======================================================================
+//function : setShowEntityMode
+//purpose  : make shown only entity corresponding to my type
+//=======================================================================
+
+void SMESHGUI_GroupDlg::setShowEntityMode()
+{
+  if ( !myMesh->_is_nil() ) {
+    if ( SMESH_Actor* actor = SMESH::FindActorByObject(myMesh) ) {
+      if (!myStoredShownEntity)
+        myStoredShownEntity = actor->GetEntityMode();
+      switch ( myTypeId ) {
+      case 0: restoreShowEntityMode(); break;
+      case 1: actor->SetEntityMode( SMESH_Actor::eEdges ); break;
+      case 2: actor->SetEntityMode( SMESH_Actor::eFaces ); break;
+      case 3: actor->SetEntityMode( SMESH_Actor::eVolumes ); break;
+      }
+    }
+  }
+}
+
+//=======================================================================
+//function : restoreShowEntityMode
+//purpose  : restore ShowEntity mode of myActor
+//=======================================================================
+
+void SMESHGUI_GroupDlg::restoreShowEntityMode()
+{
+  if ( myStoredShownEntity && !myMesh->_is_nil() ) {
+    if ( SMESH_Actor* actor = SMESH::FindActorByObject(myMesh) ) {
+      actor->SetEntityMode(myStoredShownEntity);
+    }
+  }
+  myStoredShownEntity = 0;
+}
index f5d9430b507717f229d4ec8b8ad972fe1be881ee..69c69485ce434676f7599c913771e1669640e478 100644 (file)
@@ -132,6 +132,8 @@ private:
     void setSelectionMode(int theMode);
     void updateButtons();
     void updateGeomPopup();
     void setSelectionMode(int theMode);
     void updateButtons();
     void updateGeomPopup();
+    void setShowEntityMode();
+    void restoreShowEntityMode();
 
     void                          setGroupColor( const SALOMEDS::Color& );
     SALOMEDS::Color               getGroupColor() const;
 
     void                          setGroupColor( const SALOMEDS::Color& );
     SALOMEDS::Color               getGroupColor() const;
@@ -146,6 +148,7 @@ private:
     SMESH_Actor*                  myActor;                 /* Current mesh actor */
     int                           myGrpTypeId; /* Current group type id : standalone or group on geometry */
     int                           myTypeId;                /* Current type id = radio button id */
     SMESH_Actor*                  myActor;                 /* Current mesh actor */
     int                           myGrpTypeId; /* Current group type id : standalone or group on geometry */
     int                           myTypeId;                /* Current type id = radio button id */
+    int                           myStoredShownEntity;     /* Store ShowEntity mode of myMesh */
     QLineEdit*                    myCurrentLineEdit;       /* Current  LineEdit */
     SVTK_Selector*                mySelector;
 
     QLineEdit*                    myCurrentLineEdit;       /* Current  LineEdit */
     SVTK_Selector*                mySelector;