IPAL52939: SIGSEGV when Compute a mesh with closed VTK Viewer

This commit is contained in:
eap 2015-10-29 19:27:29 +03:00
parent a5a9b778aa
commit c149fe2963
4 changed files with 20 additions and 13 deletions

View File

@ -2917,7 +2917,7 @@ void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO
myCtrlInfo->showInfo( obj ); myCtrlInfo->showInfo( obj );
myActor = SMESH::FindActorByEntry( IO->getEntry() ); myActor = SMESH::FindActorByEntry( IO->getEntry() );
SVTK_Selector* selector = SMESH::GetViewWindow()->GetSelector(); SVTK_Selector* selector = SMESH::GetSelector();
QString ID; QString ID;
int nb = 0; int nb = 0;
if ( myActor && selector ) { if ( myActor && selector ) {
@ -3081,7 +3081,7 @@ void SMESHGUI_MeshInfoDlg::modeChanged()
*/ */
void SMESHGUI_MeshInfoDlg::idChanged() void SMESHGUI_MeshInfoDlg::idChanged()
{ {
SVTK_Selector* selector = SMESH::GetViewWindow()->GetSelector(); SVTK_Selector* selector = SMESH::GetSelector();
if ( myActor && selector ) { if ( myActor && selector ) {
Handle(SALOME_InteractiveObject) IO = myActor->getIO(); Handle(SALOME_InteractiveObject) IO = myActor->getIO();
TColStd_MapOfInteger ID; TColStd_MapOfInteger ID;

View File

@ -2666,7 +2666,7 @@ void SMESHGUI_MeshOp::onAlgoSetByMeshType( const int theTabIndex, const int theI
* \param theIndex - Index of current type of mesh * \param theIndex - Index of current type of mesh
*/ */
//================================================================================ //================================================================================
void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theIndex) void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theIndex )
{ {
QStringList anAvailableAlgs; QStringList anAvailableAlgs;
QString anCompareType = currentMeshTypeName( theIndex ); QString anCompareType = currentMeshTypeName( theIndex );
@ -2684,7 +2684,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI
anCurrentAvailableAlgo = -1; anCurrentAvailableAlgo = -1;
isNone = currentHyp( dim, Algo ) < 0; isNone = currentHyp( dim, Algo ) < 0;
//return current algo in current tab and set new algorithm list //return current algo in current tab and set new algorithm list
HypothesisData* algoCur; HypothesisData* algoCur = 0;
if ( !isNone && !myAvailableHypData[dim][Algo].empty() ) { if ( !isNone && !myAvailableHypData[dim][Algo].empty() ) {
algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) ); algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) );
} }

View File

@ -298,9 +298,10 @@ namespace SMESH
aPixmap->SetPixMap( pmName ); aPixmap->SetPixMap( pmName );
_PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject); _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject);
for (int i = 1; anIter->More(); anIter->Next(), i++) { for ( ; anIter->More(); anIter->Next() ) {
_PTR(SObject) aSObj = anIter->Value(); _PTR(SObject) aSObj = anIter->Value();
/*if (i >= 1)*/ { if ( aSObj->Tag() >= SMESH::Tag_FirstSubMesh )
{
_PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj); _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj);
for ( ; anIter1->More(); anIter1->Next()) for ( ; anIter1->More(); anIter1->Next())
{ {
@ -339,7 +340,7 @@ namespace SMESH
else else
aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" ); aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" );
} }
else else // is it necessary?
{ {
if ( !theIsNotModif ) if ( !theIsNotModif )
aPixmap->SetPixMap( pmName ); aPixmap->SetPixMap( pmName );

View File

@ -773,6 +773,7 @@ namespace SMESH
anActor->SetVisibility(false); anActor->SetVisibility(false);
aStudy->setVisibilityState(theEntry, Qtx::HiddenState); aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
break; break;
default:;
} }
} else { } else {
switch (theAction) { switch (theAction) {
@ -799,6 +800,7 @@ namespace SMESH
} }
break; break;
} }
default:;
} }
} }
} }
@ -808,16 +810,20 @@ namespace SMESH
} }
bool UpdateView(EDisplaing theAction, const char* theEntry){ bool UpdateView(EDisplaing theAction, const char* theEntry) {
//MESSAGE("UpdateView"); //MESSAGE("UpdateView");
SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( GetActiveStudy() ); SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( GetActiveStudy() );
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() ); SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() );
SUIT_ViewWindow *aWnd = app->activeViewManager()->getActiveView(); if ( SUIT_ViewManager* vm = app->activeViewManager() )
return UpdateView(aWnd,theAction,theEntry); {
SUIT_ViewWindow *aWnd = vm->getActiveView();
return UpdateView(aWnd,theAction,theEntry);
}
return false;
} }
void UpdateView(){ void UpdateView(){
if(SVTK_ViewWindow* aWnd = SMESH::GetCurrentVtkView()){ if ( SVTK_ViewWindow* aWnd = SMESH::GetCurrentVtkView()) {
LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr(); LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr();
SALOME_ListIO selected; mgr->selectedObjects( selected ); SALOME_ListIO selected; mgr->selectedObjects( selected );
@ -848,7 +854,7 @@ namespace SMESH
bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay) bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
{ {
MESSAGE("Update"); MESSAGE("Update");
_PTR(Study) aStudy = GetActiveStudyDocument(); _PTR(Study) aStudy = GetActiveStudyDocument();
CORBA::Long anId = aStudy->StudyId(); CORBA::Long anId = aStudy->StudyId();
if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry())) { if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry())) {
@ -861,7 +867,7 @@ namespace SMESH
bool UpdateNulData(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay) bool UpdateNulData(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
{ {
MESSAGE("UpdateNulData"); MESSAGE("UpdateNulData");
_PTR(Study) aStudy = GetActiveStudyDocument(); _PTR(Study) aStudy = GetActiveStudyDocument();
CORBA::Long anId = aStudy->StudyId(); CORBA::Long anId = aStudy->StudyId();
if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry(), true)) { if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry(), true)) {