- if ( !SMESH_Hypothesis::IsStatusFatal(status) ) {
- SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
-
- if ( !aStudy->_is_nil() ) {
- // Detect whether <aSubShape> refers to this mesh or its sub-mesh
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- SALOMEDS::SObject_var aMeshSO = SALOMEDS::SObject::_narrow( aStudy->FindObjectIOR( ( SMESH_Gen_i::GetORB()->object_to_string( _this() ) ) ) );
- if ( aMeshSO->_is_nil() ) {
- SCRUTE( SMESH_Gen_i::GetORB()->object_to_string( _this() ));
- removeHypothesis( aSubShapeObject, anHyp );
- return SMESH::HYP_UNKNOWN_FATAL;
- }
- SALOMEDS::SObject_var aMorSM, aRef;
- CORBA::String_var aShapeIOR = CORBA::string_dup( SMESH_Gen_i::GetORB()->object_to_string( aSubShapeObject ) );
- SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator( aMeshSO );
-
- for ( it->InitEx( true ); it->More(); it->Next() ) {
- SALOMEDS::SObject_var anObj = it->Value();
- if ( anObj->ReferencedObject( aRef ) ) {
- if ( aRef->FindAttribute( anAttr, "AttributeIOR" ) ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
- if ( strcmp( anIOR->Value(), aShapeIOR ) == 0 ) {
- aMorSM = anObj->GetFather();
- break;
- }
- }
- }
- }
-
- bool aIsAlgo = !SMESH::SMESH_Algo::_narrow( anHyp )->_is_nil();
- SALOMEDS::SObject_var aHypSO = SALOMEDS::SObject::_narrow( aStudy->FindObjectIOR( ( SMESH_Gen_i::GetORB()->object_to_string( anHyp ) ) ) );
- if ( !aMorSM->_is_nil() && !aHypSO->_is_nil() ) {
- //Find or Create Applied Hypothesis root
- SALOMEDS::SObject_var AHR;
- SALOMEDS::AttributeName_var aName;
- SALOMEDS::AttributeSelectable_var aSelAttr;
- SALOMEDS::AttributePixMap_var aPixmap;
- SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
- long aTag = aIsAlgo ? SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag() : SMESH_Gen_i::GetRefOnAppliedHypothesisTag();
-
- if ( !aMorSM->FindSubObject( aTag, AHR ) ) {
- AHR = aBuilder->NewObjectToTag( aMorSM, aTag );
- anAttr = aBuilder->FindOrCreateAttribute( AHR, "AttributeName" );
- aName = SALOMEDS::AttributeName::_narrow( anAttr );
- aName ->SetValue( aIsAlgo ? "Applied algorithms" : "Applied hypotheses" );
- anAttr = aBuilder->FindOrCreateAttribute( AHR, "AttributeSelectable" );
- aSelAttr = SALOMEDS::AttributeSelectable::_narrow( anAttr );
- aSelAttr ->SetSelectable( false );
- anAttr = aBuilder->FindOrCreateAttribute( AHR, "AttributePixMap" );
- aPixmap = SALOMEDS::AttributePixMap::_narrow( anAttr );
- aPixmap ->SetPixMap( aIsAlgo ? "ICON_SMESH_TREE_ALGO" : "ICON_SMESH_TREE_HYPO" );
- }