From 2eac35a1cf3dc827f3ab5baa19770bd279a17bde Mon Sep 17 00:00:00 2001 From: apo Date: Mon, 20 Mar 2006 09:12:43 +0000 Subject: [PATCH] Fix for Bug IPAL11293 SMESH: application crashes with wrong parameters of extrusion --- src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx | 44 ++++++++++++++---------- src/SMESHGUI/SMESHGUI_ExtrusionDlg.h | 1 + src/SMESH_I/SMESH_MeshEditor_i.cxx | 46 +++++++++++++++----------- 3 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx index 7860471d7..4dd94bcf2 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx @@ -253,8 +253,13 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule, connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); + // to update state of the Ok & Apply buttons + connect(SpinBox_Dx, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable())); + connect(SpinBox_Dy, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable())); + connect(SpinBox_Dz, SIGNAL(valueChanged(double)), SLOT(CheckIsEnable())); + + connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); @@ -292,9 +297,6 @@ void SMESHGUI_ExtrusionDlg::Init (bool ResetControls) myElementsId = ""; myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - myActor = 0; myMesh = SMESH::SMESH_Mesh::_nil(); @@ -307,6 +309,25 @@ void SMESHGUI_ExtrusionDlg::Init (bool ResetControls) CheckBoxMesh->setChecked(false); onSelectMesh(false); } + + CheckIsEnable(); +} + +//================================================================================= +// function : CheckIsEnable() +// purpose : Check whether the Ok and Apply buttons should be enabled or not +//================================================================================= +void SMESHGUI_ExtrusionDlg::CheckIsEnable() +{ + double aX = SpinBox_Dx->GetValue(); + double aY = SpinBox_Dy->GetValue(); + double aZ = SpinBox_Dz->GetValue(); + double aModule = sqrt(aX*aX + aY*aY + aZ*aZ); + + bool anIsEnable = myNbOkElements > 0 && aModule > 1.0E-38; + + buttonOk->setEnabled(anIsEnable); + buttonApply->setEnabled(anIsEnable); } //================================================================================= @@ -434,9 +455,6 @@ void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText) if (send == LineEditElements) myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - // hilight entered elements/nodes SMDS_Mesh* aMesh = 0; if (myActor) @@ -461,10 +479,7 @@ void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText) } } - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } + CheckIsEnable(); myBusy = false; } @@ -490,8 +505,6 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() myEditCurrentArgument->setText(aString); myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); myBusy = false; // get selected mesh @@ -593,10 +606,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() myBusy = false; // OK - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } + CheckIsEnable(); } //================================================================================= diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h index 935a2716c..0c0d6778a 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h @@ -114,6 +114,7 @@ private: private slots: void ConstructorsClicked (int); + void CheckIsEnable(); void ClickOnOk(); bool ClickOnApply(); void ClickOnCancel(); diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index d85258440..b6371d716 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -37,6 +37,7 @@ #include "SMESH_Gen_i.hxx" #include "SMESH_Filter_i.hxx" #include "SMESH_PythonDump.hxx" +#include "CASCatch.hxx" #include "utilities.h" @@ -920,28 +921,33 @@ void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElemen const SMESH::DirStruct & theStepVector, CORBA::Long theNbOfSteps) { - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); + CASCatch_TRY { + SMESHDS_Mesh* aMesh = GetMeshDS(); + + set elements; + for (int i = 0; i < theIDsOfElements.length(); i++) + { + CORBA::Long index = theIDsOfElements[i]; + const SMDS_MeshElement * elem = aMesh->FindElement(index); + if ( elem ) + elements.insert( elem ); + } + const SMESH::PointStruct * P = &theStepVector.PS; + gp_Vec stepVec( P->x, P->y, P->z ); + + TElemOfElemListMap aHystory; + ::SMESH_MeshEditor anEditor( _myMesh ); + anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory); - ::SMESH_MeshEditor anEditor( _myMesh ); - //anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); - TElemOfElemListMap aHystory; - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory); + // Update Python script + TPythonDump() << "stepVector = " << theStepVector; + TPythonDump() << this << ".ExtrusionSweep( " + << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )"; - // Update Python script - TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweep( " - << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )"; + }CASCatch_CATCH(Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + INFOS( "SMESH_MeshEditor_i::ExtrusionSweep fails - "<< aFail->GetMessageString() ); + } } -- 2.30.2