Salome HOME
6514bfd8002788c23112550cd07c8ee9191e8348
[modules/smesh.git] / src / SMESHFiltersSelection / SMESH_TypeFilter.cxx
1 using namespace std;
2 //  File      : SMESH_TypeFilter.cxx
3 //  Created   : Fri Dec 07 09:57:24 2001
4 //  Author    : Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : SMESH
7 //  Copyright : Open CASCADE
8 //  $Header$
9
10 #include "SMESH_TypeFilter.ixx"
11
12 #include "SALOME_InteractiveObject.hxx"
13 #include "SALOME_TypeFilter.hxx"
14
15 #include "utilities.h"
16 #include "QAD_Application.h"
17 #include "QAD_Desktop.h"
18 #include "QAD_Study.h"
19
20
21 SMESH_TypeFilter::SMESH_TypeFilter(MeshObjectType aType) 
22 {
23   myKind = aType;
24 }
25
26 Standard_Boolean SMESH_TypeFilter::IsOk(const Handle(SALOME_InteractiveObject)& anObj) const 
27 {
28   Handle(SALOME_TypeFilter) meshFilter = new SALOME_TypeFilter( "MESH" );
29   if ( !meshFilter->IsOk(anObj) ) 
30     return false;
31
32   bool Ok = false;
33
34   if ( anObj->hasEntry() ) {
35     QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
36     SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument();
37     SALOMEDS::SObject_var obj = aStudy->FindObjectID( anObj->getEntry() );
38
39     SALOMEDS::SObject_var objFather = obj->GetFather();
40     SALOMEDS::SComponent_var objComponent = obj->GetFatherComponent();
41     
42     if ( strlen( obj->GetID() ) <= strlen( objComponent->GetID() ) )
43       return false;
44
45     switch ( myKind )
46       {
47       case HYPOTHESIS:
48         {
49           if (( objFather->Tag() == 1 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) )
50             Ok = true;
51           break;
52         }
53       case ALGORITHM:
54         {
55           if (( objFather->Tag() == 2 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) )
56             Ok = true;
57           break;
58         }
59       case MESH:
60         {
61           if (( obj->Tag() >= 3 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) == 0 ) )
62             Ok = true;
63           break;
64         }
65       case SUBMESH:
66         {
67           if (( objFather->Tag() >= 4 && objFather->Tag() < 9 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) )
68             Ok = true;
69           break;
70         }
71       case MESHorSUBMESH:
72         {
73           if (( obj->Tag() >= 3 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) == 0 ) )
74             Ok = true;
75
76           if (( objFather->Tag() >= 4 && objFather->Tag() < 9 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) )
77             Ok = true;
78
79           break;
80         }
81       case SUBMESH_VERTEX:  // Label "SubMeshes on vertexes"
82         {
83           if (( obj->Tag() == 4 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) && ( objFather->Tag() >= 3 ))
84             Ok = true;
85           break;
86         }
87       case SUBMESH_EDGE:
88         {
89           if (( obj->Tag() == 5 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) && ( objFather->Tag() >= 3 ))
90             Ok = true;
91           break;
92         }
93       case SUBMESH_FACE:
94         {
95           if (( obj->Tag() == 6 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) && ( objFather->Tag() >= 3 ))
96             Ok = true;
97           break;
98         }
99       case SUBMESH_SOLID:
100         {
101           if (( obj->Tag() == 7 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) && ( objFather->Tag() >= 3 ))
102             Ok = true;
103           break;
104         }
105       case SUBMESH_COMPOUND:
106         {
107           if (( obj->Tag() == 8 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) && ( objFather->Tag() >= 3 ))
108             Ok = true;
109           break;
110         }
111       case GROUP:
112         {
113           if (( objFather->Tag() >= 9 ) && (strcmp( objFather->GetID(), objComponent->GetID() ) != 0 ) )
114             Ok = true;
115           break;
116         }
117       }
118   }
119   return Ok;
120 }