PAL9524 - unassign a hypothesis when Edit/Delete called for it

This commit is contained in:
eap 2005-07-21 05:54:47 +00:00
parent c92f2b483c
commit 8616118fe1
2 changed files with 38 additions and 15 deletions

View File

@ -793,7 +793,7 @@ namespace{
if(obj){ if(obj){
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( obj ) ); SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( obj ) );
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( obj ) ); SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( obj ) );
QString objType = CheckTypeObject(IObject);
if ( !aGroup->_is_nil() ) { // DELETE GROUP if ( !aGroup->_is_nil() ) { // DELETE GROUP
SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh(); SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh();
aMesh->RemoveGroup( aGroup ); aMesh->RemoveGroup( aGroup );
@ -802,6 +802,10 @@ namespace{
SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather(); SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
aMesh->RemoveSubMesh( aSubMesh ); aMesh->RemoveSubMesh( aSubMesh );
} }
else if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS
SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject);
aStudyBuilder->RemoveObjectWithChildren( obj );
}
else {// default action: remove SObject from the study else {// default action: remove SObject from the study
// san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
//SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy); //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);

View File

@ -422,10 +422,12 @@ namespace SMESH{
int res = SMESH::HYP_UNKNOWN_FATAL; int res = SMESH::HYP_UNKNOWN_FATAL;
SUIT_OverrideCursor wc; SUIT_OverrideCursor wc;
if (IObject->hasReference()) { try {
try { _PTR(Study) aStudy = GetActiveStudyDocument();
_PTR(Study) aStudy = GetActiveStudyDocument(); SMESH_Hypothesis_var anHyp = IObjectToInterface<SMESH_Hypothesis>(IObject);
SMESH_Hypothesis_var anHyp = IObjectToInterface<SMESH_Hypothesis>(IObject); if (IObject->hasReference())
{
if(MYDEBUG) MESSAGE("HAS REFERENCE " << IObject->getEntry());
_PTR(SObject) aHypSObj = aStudy->FindObjectID(IObject->getReference()); _PTR(SObject) aHypSObj = aStudy->FindObjectID(IObject->getReference());
if (aHypSObj) { if (aHypSObj) {
_PTR(SObject) MorSM = SMESH::GetMeshOrSubmesh(aHypSObj); _PTR(SObject) MorSM = SMESH::GetMeshOrSubmesh(aHypSObj);
@ -457,20 +459,37 @@ namespace SMESH{
} }
} }
} }
catch(const SALOME::SALOME_Exception& S_ex) { else if (IObject->hasEntry())
wc.suspend(); {
SalomeApp_Tools::QtCatchCorbaException(S_ex); if(MYDEBUG) MESSAGE("IObject entry HAS ENTRY " << IObject->getEntry());
res = SMESH::HYP_UNKNOWN_FATAL; SObjectList meshList = GetMeshesUsingAlgoOrHypothesis(anHyp);
for ( int i = 0; i < meshList.size(); ++i ) {
SMESH::SMESH_Mesh_var aMesh =
SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( meshList[ i ]);
GEOM::GEOM_Object_var aShape = SMESH::GetShapeOnMeshOrSubMesh( meshList[ i ]);
if ( ! aMesh->_is_nil() && !aShape->_is_nil() ) {
res = aMesh->RemoveHypothesis(aShape, anHyp);
if ( res < SMESH::HYP_UNKNOWN_FATAL )
SMESH::ModifiedMesh( meshList[ i ], false);
if ( res > SMESH::HYP_OK ) {
wc.suspend();
processHypothesisStatus( res, anHyp, false );
wc.resume();
}
}
}
} }
} }
else if (IObject->hasEntry()) { catch(const SALOME::SALOME_Exception& S_ex) {
if(MYDEBUG) MESSAGE("IObject entry " << IObject->getEntry()); wc.suspend();
SalomeApp_Tools::QtCatchCorbaException(S_ex);
res = SMESH::HYP_UNKNOWN_FATAL;
} }
return res < SMESH::HYP_UNKNOWN_FATAL; return res < SMESH::HYP_UNKNOWN_FATAL;
} }
bool RemoveHypothesisOrAlgorithmOnMesh (_PTR(SObject) MorSM, bool RemoveHypothesisOrAlgorithmOnMesh (_PTR(SObject) MorSM,
SMESH::SMESH_Hypothesis_ptr anHyp) SMESH::SMESH_Hypothesis_ptr anHyp)
{ {
SALOMEDS::GenericAttribute_var anAttr; SALOMEDS::GenericAttribute_var anAttr;
SALOMEDS::AttributeIOR_var anIOR; SALOMEDS::AttributeIOR_var anIOR;
@ -479,9 +498,9 @@ namespace SMESH{
if (MorSM) { if (MorSM) {
try { try {
GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM); GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM);
if (!aShapeObject->_is_nil()) { if (!aShapeObject->_is_nil()) {
SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM); SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM);
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(MorSM); SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(MorSM);
if (!aSubMesh->_is_nil()) if (!aSubMesh->_is_nil())