#include <SUIT_Session.h>
#include <SalomeApp_Study.h>
-#include <SalomeApp_DataOwner.h>
+#include <LightApp_DataOwner.h>
SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType)
{
bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const
{
- bool Ok = false;
+ bool Ok = false, extractReference = true;
- const SalomeApp_DataOwner* owner =
- dynamic_cast<const SalomeApp_DataOwner*>(theDataOwner);
+ const LightApp_DataOwner* owner =
+ dynamic_cast<const LightApp_DataOwner*>(theDataOwner);
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
(SUIT_Session::session()->activeApplication()->activeStudy());
_PTR(Study) study = appStudy->studyDS();
QString entry = owner->entry();
- _PTR(SObject) obj (study->FindObjectID(entry.latin1()));
+ _PTR(SObject) obj (study->FindObjectID(entry.latin1())), aRefSO;
+ if( extractReference && obj && obj->ReferencedObject( aRefSO ) )
+ obj = aRefSO;
if (!obj) return false;
_PTR(SObject) objFather = obj->GetFather();
_PTR(SComponent) objComponent = obj->GetFatherComponent();
+ if( objComponent->ComponentDataType()!="SMESH" )
+ return false;
+
int aLevel = obj->Depth() - objComponent->Depth();
- // Max level under the component is 4:
+ // Max level under the component is 5:
//
// 0 Mesh Component
// 1 |- Hypotheses
// 2 | |- Regular 1D
// |- Algorithms
// |- Mesh 1
+ // |- * Main Shape
// |- Applied Hypotheses
// |- Applied Algorithms
// |- Submeshes on Face
// 3 | |- SubmeshFace
+ // 4 | |- * Face 1
// 4 | |- Applied algorithms ( selectable in Use Case Browser )
+ // 5 | |- Regular 1D
// |- Group Of Nodes
if (aLevel <= 0)
{
case HYPOTHESIS:
{
- if ( aLevel == 2 && ( objFather->Tag() == 1 ))
+ if ( aLevel == 2 && ( objFather->Tag() == 1 )) // hypo definition
+ Ok = true;
+ else if ( aLevel == 3 && ( objFather->Tag() == 2 )) // applied global hypo
+ Ok = true;
+ else if ( aLevel == 5 && ( objFather->Tag() == 2 )) // applied local hypo
Ok = true;
break;
}
case ALGORITHM:
{
- if ( aLevel == 2 && ( objFather->Tag() == 2 ))
+ if ( aLevel == 2 && ( objFather->Tag() == 2 )) // algo definition
+ Ok = true;
+ else if ( aLevel == 3 && ( objFather->Tag() == 3 )) // applied global algo
+ Ok = true;
+ else if ( aLevel == 5 && ( objFather->Tag() == 3 )) // applied local algo
Ok = true;
break;
}