Version: 6.3.1
Public Member Functions | Protected Attributes

SMESH_TypeFilter Class Reference

#include <SMESH_TypeFilter.hxx>

Inheritance diagram for SMESH_TypeFilter:
Inheritance graph
[legend]

Public Member Functions

 SMESH_TypeFilter (MeshObjectType theType)
 ~SMESH_TypeFilter ()
virtual bool isOk (const SUIT_DataOwner *) const
MeshObjectType type () const

Protected Attributes

MeshObjectType myType

Detailed Description

Definition at line 34 of file SMESH_TypeFilter.hxx.


Constructor & Destructor Documentation

SMESH_TypeFilter::SMESH_TypeFilter ( MeshObjectType  theType)

Definition at line 33 of file SMESH_TypeFilter.cxx.

References myType.

Referenced by isOk().

{
  myType = theType;
}
SMESH_TypeFilter::~SMESH_TypeFilter ( )

Definition at line 38 of file SMESH_TypeFilter.cxx.

{
}

Member Function Documentation

bool SMESH_TypeFilter::isOk ( const SUIT_DataOwner *  theDataOwner) const [virtual]

Definition at line 42 of file SMESH_TypeFilter.cxx.

References _PTR(), ALGORITHM, GROUP, GROUP_0D, GROUP_EDGE, GROUP_FACE, GROUP_NODE, GROUP_VOLUME, HYPOTHESIS, IDSOURCE, MESHorSUBMESH, myType, SMESH_TypeFilter(), SUBMESH, SUBMESH_COMPOUND, SUBMESH_EDGE, SUBMESH_FACE, SUBMESH_SOLID, SUBMESH_VERTEX, batchmode_smesh.Tag_AlgorithmsRoot, SMESH.Tag_EdgeGroups, SMESH.Tag_FaceGroups, SMESH.Tag_FirstGroup, SMESH.Tag_FirstMeshRoot, SMESH.Tag_FirstSubMesh, batchmode_smesh.Tag_HypothesisRoot, SMESH.Tag_LastSubMesh, SMESH.Tag_NodeGroups, batchmode_smesh.Tag_RefOnAppliedAlgorithms, batchmode_smesh.Tag_RefOnAppliedHypothesis, batchmode_smesh.Tag_SubMeshOnCompound, batchmode_smesh.Tag_SubMeshOnEdge, batchmode_smesh.Tag_SubMeshOnFace, batchmode_smesh.Tag_SubMeshOnSolid, batchmode_smesh.Tag_SubMeshOnVertex, and SMESH.Tag_VolumeGroups.

Referenced by CheckOIType().

{
  bool Ok = false, extractReference = true;

  const LightApp_DataOwner* owner =
    dynamic_cast<const LightApp_DataOwner*>(theDataOwner);
  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
    (SUIT_Session::session()->activeApplication()->activeStudy());

  if (owner && appStudy) {
    _PTR(Study) study = appStudy->studyDS();
    QString entry = owner->entry();

    _PTR(SObject) obj (study->FindObjectID(entry.toLatin1().data())), 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 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
    //            |- Group 1

    if (aLevel <= 0)
      return false;

    switch (myType)
    {
      case HYPOTHESIS:
        {
          if      (aLevel == 2 && (objFather->Tag() == SMESH::Tag_HypothesisRoot))
            // hypo definition
            Ok = true;
          else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis))
            // applied global hypo
            Ok = true;
          else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis))
            // applied local hypo
            Ok = true;
          break;
        }
      case ALGORITHM:
        {
          if      (aLevel == 2 && (objFather->Tag() == SMESH::Tag_AlgorithmsRoot))
            // algo definition
            Ok = true;
          else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms))
            // applied global algo
            Ok = true;
          else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms))
            // applied local algo
            Ok = true;
          break;
        }
      case MESH:
        {
          if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot))
            Ok = true;
          break;
        }
      case SUBMESH:
        {
          // see SMESH_Gen_i.cxx for tag numbers
          if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh &&
                              objFather->Tag() <= SMESH::Tag_LastSubMesh))
            Ok = true;
          break;
        }
      case MESHorSUBMESH:
        {
          if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot))
            Ok = true; // mesh
          else if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh &&
                                   objFather->Tag() <= SMESH::Tag_LastSubMesh))
            Ok = true;
          break;
        }
      case SUBMESH_VERTEX: // Label "SubMeshes on vertexes"
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnVertex))
            Ok = true;
          break;
        }
      case SUBMESH_EDGE:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnEdge))
            Ok = true;
          break;
        }
      case SUBMESH_FACE:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnFace))
            Ok = true;
          break;
        }
      case SUBMESH_SOLID:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnSolid))
            Ok = true;
          break;
        }
      case SUBMESH_COMPOUND:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnCompound))
            Ok = true;
          break;
        }
      case GROUP:
        {
          if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstGroup))
            Ok = true;
          break;
        }
      case GROUP_NODE:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_NodeGroups))
            Ok = true;
          break;
        }
      case GROUP_EDGE:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_EdgeGroups))
            Ok = true;
          break;
        }
      case GROUP_FACE:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_FaceGroups))
            Ok = true;
          break;
        }
      case GROUP_VOLUME:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_VolumeGroups))
            Ok = true;
          break;
        }
      case GROUP_0D:
        {
          if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_VolumeGroups+1))
            Ok = true;
          break;
        }
      case IDSOURCE:
        {
          Ok = ( SMESH_TypeFilter(MESHorSUBMESH).isOk( theDataOwner ) ||
                 SMESH_TypeFilter(GROUP)        .isOk( theDataOwner ));
          break;
        }
    }
  }
  return Ok;
}
MeshObjectType SMESH_TypeFilter::type ( ) const

Definition at line 217 of file SMESH_TypeFilter.cxx.

References myType.

{
  return myType;
}

Field Documentation

Definition at line 44 of file SMESH_TypeFilter.hxx.

Referenced by isOk(), SMESH_TypeFilter(), and type().

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS