#include <SMESH_Actor.h>
#include <SMESH_ActorUtils.h>
+#include <SMESH_FaceOrientationFilter.h>
#include <SMDS_Mesh.hxx>
// SALOME GUI includes
#include <vtkIdList.h>
#include <vtkUnstructuredGrid.h>
#include <vtkDataSetMapper.h>
+#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkCellType.h>
vtkFloatingPointType myRGB[3], myBackRGB[3];
+ SALOME_Actor* myFaceOrientation;
+ vtkPolyDataMapper* myFaceOrientationDataMapper;
+ SMESH_FaceOrientationFilter* myFaceOrientationFilter;
+
public:
TElementSimulation (SalomeApp_Application* theApplication)
{
myBackProp->Delete();
myVTKViewWindow->AddActor(myPreviewActor);
+
+ // Orientation of faces
+ myFaceOrientationFilter = SMESH_FaceOrientationFilter::New();
+ myFaceOrientationFilter->SetInput(myGrid);
+
+ myFaceOrientationDataMapper = vtkPolyDataMapper::New();
+ myFaceOrientationDataMapper->SetInput(myFaceOrientationFilter->GetOutput());
+
+ myFaceOrientation = SALOME_Actor::New();
+ myFaceOrientation->PickableOff();
+ myFaceOrientation->VisibilityOff();
+ myFaceOrientation->SetMapper(myFaceOrientationDataMapper);
+
+ vtkProperty* anOrientationProp = vtkProperty::New();
+ GetColor( "SMESH", "orientation_color", myRGB[0], myRGB[1], myRGB[2], QColor( 255, 255, 255 ) );
+ anOrientationProp->SetColor( myRGB[0], myRGB[1], myRGB[2] );
+ myFaceOrientation->SetProperty( anOrientationProp );
+ anOrientationProp->Delete();
+
+ myVTKViewWindow->AddActor(myFaceOrientation);
}
typedef std::vector<vtkIdType> TVTKIds;
aType = VTK_CONVEX_POINT_SET;
break;
case QUAD_PENTAHEDRON:
- //aType = VTK_QUADRATIC_WEDGE; // NOT SUPPORTED IN VTK4.2
- aType = VTK_CONVEX_POINT_SET;
+ aType = VTK_QUADRATIC_WEDGE;
+ //aType = VTK_CONVEX_POINT_SET;
break;
case QUAD_HEXAHEDRON:
aType = VTK_QUADRATIC_HEXAHEDRON;
}
else {
// VTK cell connectivity opposites the MED one for volumic elements
- if ( theIds.size() > 8 ? !theReverse : theReverse ) {
- ReverseConnectivity( theIds, theType );
+ if( aType != VTK_QUADRATIC_WEDGE) {
+ if ( theIds.size() > 8 ? !theReverse : theReverse ) {
+ ReverseConnectivity( theIds, theType );
+ }
}
+ else if(theReverse)
+ ReverseConnectivity( theIds, theType );
}
myGrid->Reset();
myPreviewActor->GetMapper()->Update();
myPreviewActor->SetRepresentation( theMode );
- SetVisibility(true);
+ SetVisibility(true, theActor->GetFacesOriented());
// restore normal orientation
if ( aType == VTK_CONVEX_POINT_SET ) {
}
- void SetVisibility (bool theVisibility)
+ void SetVisibility (bool theVisibility, bool theShowOrientation = false)
{
myPreviewActor->SetVisibility(theVisibility);
+ myFaceOrientation->SetVisibility(theShowOrientation);
RepaintCurrentView();
}
{
if (FindVtkViewWindow(myApplication->activeViewManager(), myViewWindow)) {
myVTKViewWindow->RemoveActor(myPreviewActor);
+ myVTKViewWindow->RemoveActor(myFaceOrientation);
}
myPreviewActor->Delete();
+ myFaceOrientation->Delete();
myMapper->RemoveAllInputs();
myMapper->Delete();
+ myFaceOrientationFilter->Delete();
+
+ myFaceOrientationDataMapper->RemoveAllInputs();
+ myFaceOrientationDataMapper->Delete();
+
myGrid->Delete();
// myProp->Delete();
-class SMESHGUI_IdEditItem: public QTableWidgetItem
+/*!
+ \class BusyLocker
+ \brief Simple 'busy state' flag locker.
+ \internal
+*/
+
+class BusyLocker
+{
+public:
+ //! Constructor. Sets passed boolean flag to \c true.
+ BusyLocker( bool& busy ) : myBusy( busy ) { myBusy = true; }
+ //! Destructor. Clear external boolean flag passed as parameter to the constructor to \c false.
+ ~BusyLocker() { myBusy = false; }
+private:
+ bool& myBusy; //! External 'busy state' boolean flag
+};
+
+/*!
+ \class IdEditItem
+ \brief Simple editable table item.
+ \internal
+*/
+
+class IdEditItem: public QTableWidgetItem
{
public:
- SMESHGUI_IdEditItem(const QString& text ):
- QTableWidgetItem(text, QTableWidgetItem::UserType+100) {};
- ~SMESHGUI_IdEditItem() {};
+ IdEditItem(const QString& text );
+ ~IdEditItem();
QWidget* createEditor() const;
};
-QWidget* SMESHGUI_IdEditItem::createEditor() const
+IdEditItem::IdEditItem(const QString& text )
+ : QTableWidgetItem(text, QTableWidgetItem::UserType+100)
+{
+}
+
+IdEditItem::~IdEditItem()
+{
+}
+
+QWidget* IdEditItem::createEditor() const
{
QLineEdit *aLineEdit = new QLineEdit(text(), tableWidget());
aLineEdit->setValidator( new SMESHGUI_IdValidator(tableWidget(), 1) );
: QDialog( SMESH::GetDesktop( theModule ) ),
mySMESHGUI( theModule ),
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
- myType( theType )
+ myType( theType ),
+ myBusy( false )
{
setModal( false );
setAttribute( Qt::WA_DeleteOnClose, true );
aGroupButtonsLayout->setSpacing(SPACING);
aGroupButtonsLayout->setMargin(MARGIN);
- buttonOk = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons);
+ buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
buttonOk->setAutoDefault(true);
buttonOk->setDefault(true);
buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
void SMESHGUI_AddQuadraticElementDlg::Init()
{
myRadioButton1->setChecked(true);
- myIsEditCorners = true;
mySMESHGUI->SetActiveDialogBox((QDialog*)this);
myActor = 0;
for ( int row = 0; row < myTable->rowCount(); row++ )
{
myTable->setItem( row, 0, new QTableWidgetItem( "" ) );
+ myTable->item( row, 0 )->setFlags(0);
- SMESHGUI_IdEditItem* anEditItem = new SMESHGUI_IdEditItem( "" );
+ IdEditItem* anEditItem = new IdEditItem( "" );
anEditItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
myTable->setItem(row, 1, anEditItem);
myTable->setItem( row, 2, new QTableWidgetItem( "" ) );
+ myTable->item( row, 2 )->setFlags(0);
}
/* signals and slots connections */
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode( NodeSelection );
- myBusy = false;
-
SetEditCorners();
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
{
- if (IsValid() && !mySMESHGUI->isActiveStudyLocked()) {
- myBusy = true;
-
- std::vector<int> anIds;
+ if ( mySMESHGUI->isActiveStudyLocked() || myBusy || !IsValid() )
+ return;
- switch (myType) {
- case QUAD_EDGE:
- anIds.push_back(myTable->item(0, 0)->text().toInt());
- anIds.push_back(myTable->item(0, 2)->text().toInt());
- anIds.push_back(myTable->item(0, 1)->text().toInt());
- break;
- case QUAD_TRIANGLE:
- case QUAD_QUADRANGLE:
- case QUAD_TETRAHEDRON:
- case QUAD_PYRAMID:
- case QUAD_PENTAHEDRON:
- case QUAD_HEXAHEDRON:
- for ( int row = 0; row < myNbCorners; row++ )
- anIds.push_back(myTable->item(row, 0)->text().toInt());
- for ( int row = 0; row < myTable->rowCount(); row++ )
- anIds.push_back(myTable->item(row, 1)->text().toInt());
- break;
- }
- if ( myReverseCB->isChecked())
- SMESH::ReverseConnectivity( anIds, myType );
+ BusyLocker lock( myBusy );
+
+ std::vector<int> anIds;
+
+ switch (myType) {
+ case QUAD_EDGE:
+ anIds.push_back(myTable->item(0, 0)->text().toInt());
+ anIds.push_back(myTable->item(0, 2)->text().toInt());
+ anIds.push_back(myTable->item(0, 1)->text().toInt());
+ break;
+ case QUAD_TRIANGLE:
+ case QUAD_QUADRANGLE:
+ case QUAD_TETRAHEDRON:
+ case QUAD_PYRAMID:
+ case QUAD_PENTAHEDRON:
+ case QUAD_HEXAHEDRON:
+ for ( int row = 0; row < myNbCorners; row++ )
+ anIds.push_back(myTable->item(row, 0)->text().toInt());
+ for ( int row = 0; row < myTable->rowCount(); row++ )
+ anIds.push_back(myTable->item(row, 1)->text().toInt());
+ break;
+ }
+ if ( myReverseCB->isChecked())
+ SMESH::ReverseConnectivity( anIds, myType );
- int aNumberOfIds = anIds.size();
- SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
- anArrayOfIdeces->length( aNumberOfIds );
+ int aNumberOfIds = anIds.size();
+ SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
+ anArrayOfIdeces->length( aNumberOfIds );
- for (int i = 0; i < aNumberOfIds; i++)
- anArrayOfIdeces[i] = anIds[ i ];
+ for (int i = 0; i < aNumberOfIds; i++)
+ anArrayOfIdeces[i] = anIds[ i ];
- SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
- switch (myType) {
- case QUAD_EDGE:
- aMeshEditor->AddEdge(anArrayOfIdeces.inout()); break;
- case QUAD_TRIANGLE:
- case QUAD_QUADRANGLE:
- aMeshEditor->AddFace(anArrayOfIdeces.inout()); break;
- case QUAD_TETRAHEDRON:
- case QUAD_PYRAMID:
- case QUAD_PENTAHEDRON:
- case QUAD_HEXAHEDRON:
- aMeshEditor->AddVolume(anArrayOfIdeces.inout()); break;
- }
+ SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
+ switch (myType) {
+ case QUAD_EDGE:
+ aMeshEditor->AddEdge(anArrayOfIdeces.inout()); break;
+ case QUAD_TRIANGLE:
+ case QUAD_QUADRANGLE:
+ aMeshEditor->AddFace(anArrayOfIdeces.inout()); break;
+ case QUAD_TETRAHEDRON:
+ case QUAD_PYRAMID:
+ case QUAD_PENTAHEDRON:
+ case QUAD_HEXAHEDRON:
+ aMeshEditor->AddVolume(anArrayOfIdeces.inout()); break;
+ }
- SALOME_ListIO aList; aList.Append( myActor->getIO() );
- mySelector->ClearIndex();
- mySelectionMgr->setSelectedObjects( aList, false );
+ SALOME_ListIO aList; aList.Append( myActor->getIO() );
+ mySelector->ClearIndex();
+ mySelectionMgr->setSelectedObjects( aList, false );
- SMESH::UpdateView();
- mySimulation->SetVisibility(false);
+ mySimulation->SetVisibility(false);
+ SMESH::UpdateView();
- buttonOk->setEnabled(false);
- buttonApply->setEnabled(false);
-
- UpdateTable();
- SetEditCorners();
+ UpdateTable();
+ SetEditCorners();
- myBusy = false;
- }
+ updateButtons();
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::onTextChange (const QString& theNewText)
{
if (myBusy) return;
- myBusy = true;
+ BusyLocker lock( myBusy );
- buttonOk->setEnabled(false);
- buttonApply->setEnabled(false);
-
mySimulation->SetVisibility(false);
// hilight entered nodes
QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
bool allOk = true;
for (int i = 0; i < aListId.count(); i++) {
- if( const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ) )
+ if ( const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ) )
+ {
newIndices.Add( n->GetID() );
+ }
else
- {
- allOk = false;
- break;
- }
+ {
+ allOk = false;
+ break;
+ }
}
mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false );
UpdateTable( allOk );
}
- if( IsValid() ) {
- buttonOk->setEnabled(true);
- buttonApply->setEnabled(true);
- }
-
- if ( sender() == myTable )
- displaySimulation();
-
- myBusy = false;
+ updateButtons();
+ displaySimulation();
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::SelectionIntoArgument()
{
if (myBusy) return;
+ BusyLocker lock( myBusy );
if ( myIsEditCorners )
- {
- // clear
- myActor = 0;
-
- myBusy = true;
- myCornerNodes->setText("");
- myBusy = false;
-
- if (!GroupButtons->isEnabled()) // inactive
- return;
-
- buttonOk->setEnabled(false);
- buttonApply->setEnabled(false);
-
- mySimulation->SetVisibility(false);
-
- // get selected mesh
- SALOME_ListIO aList;
- mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
+ {
+ // clear
+ myActor = 0;
+
+ myCornerNodes->setText("");
+
+ if (!GroupButtons->isEnabled()) // inactive
+ return;
+
+ mySimulation->SetVisibility(false);
- if (aList.Extent() != 1)
- {
- UpdateTable();
- return;
- }
+ // get selected mesh
+ SALOME_ListIO aList;
+ mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
+
+ if (aList.Extent() != 1)
+ {
+ UpdateTable();
+ updateButtons();
+ return;
+ }
- Handle(SALOME_InteractiveObject) anIO = aList.First();
- myMesh = SMESH::GetMeshByIO(anIO);
- if (myMesh->_is_nil())
- return;
+ Handle(SALOME_InteractiveObject) anIO = aList.First();
+ myMesh = SMESH::GetMeshByIO(anIO);
+ if (myMesh->_is_nil()) {
+ updateButtons();
+ return;
+ }
- myActor = SMESH::FindActorByEntry(anIO->getEntry());
+ myActor = SMESH::FindActorByEntry(anIO->getEntry());
- }
+ }
- if (!myActor)
+ if (!myActor) {
+ updateButtons();
return;
+ }
// get selected nodes
QString aString = "";
int nbNodes = SMESH::GetNameOfSelectedNodes(mySelector,myActor->getIO(),aString);
if ( myIsEditCorners )
- {
- myBusy = true;
- myCornerNodes->setText(aString);
- myBusy = false;
-
- UpdateTable();
- }
+ {
+ myCornerNodes->setText(aString);
+
+ UpdateTable();
+ }
else if ( myTable->isEnabled() && nbNodes == 1 )
- {
- myBusy = true;
- int theRow = myTable->currentRow(), theCol = myTable->currentColumn();
- if ( theCol == 1 )
- myTable->item(theRow, 1)->setText(aString);
- myBusy = false;
- }
+ {
+ int theRow = myTable->currentRow(), theCol = myTable->currentColumn();
+ if ( theCol == 1 )
+ myTable->item(theRow, 1)->setText(aString);
+ }
- if ( IsValid() )
- {
- buttonOk->setEnabled( true );
- buttonApply->setEnabled( true );
- }
-
+ updateButtons();
displaySimulation();
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::displaySimulation()
{
- if (!myIsEditCorners) {
+ if ( IsValid() )
+ {
SMESH::TElementSimulation::TVTKIds anIds;
// Collect ids from the dialog
int anID;
bool ok;
int aDisplayMode = VTK_SURFACE;
-
+
if ( myType == QUAD_EDGE )
- {
- anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(0, 0)->text().toInt() ) );
- anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(0, 2)->text().toInt() ) );
- anID = myTable->item(0, 1)->text().toInt(&ok);
- if (!ok) anID = myTable->item(0, 0)->text().toInt();
- anIds.push_back( myActor->GetObject()->GetNodeVTKId(anID) );
- aDisplayMode = VTK_WIREFRAME;
- }
+ {
+ anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(0, 0)->text().toInt() ) );
+ anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(0, 2)->text().toInt() ) );
+ anID = myTable->item(0, 1)->text().toInt(&ok);
+ if (!ok) anID = myTable->item(0, 0)->text().toInt();
+ anIds.push_back( myActor->GetObject()->GetNodeVTKId(anID) );
+ aDisplayMode = VTK_WIREFRAME;
+ }
else
+ {
+ for ( int row = 0; row < myNbCorners; row++ )
+ anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(row, 0)->text().toInt() ) );
+
+ for ( int row = 0; row < myTable->rowCount(); row++ )
{
- for ( int row = 0; row < myNbCorners; row++ )
- anIds.push_back( myActor->GetObject()->GetNodeVTKId( myTable->item(row, 0)->text().toInt() ) );
-
- for ( int row = 0; row < myTable->rowCount(); row++ )
- {
- anID = myTable->item(row, 1)->text().toInt(&ok);
- if (!ok) {
- anID = myTable->item(row, 0)->text().toInt();
- aDisplayMode = VTK_WIREFRAME;
- }
- anIds.push_back( myActor->GetObject()->GetNodeVTKId(anID) );
- }
+ anID = myTable->item(row, 1)->text().toInt(&ok);
+ if (!ok) {
+ anID = myTable->item(row, 0)->text().toInt();
+ aDisplayMode = VTK_WIREFRAME;
+ }
+ anIds.push_back( myActor->GetObject()->GetNodeVTKId(anID) );
}
+ }
mySimulation->SetPosition(myActor,myType,anIds,aDisplayMode,myReverseCB->isChecked());
- SMESH::UpdateView();
}
+ else
+ {
+ mySimulation->SetVisibility(false);
+ }
+ SMESH::UpdateView();
}
//=================================================================================
{
myCornerNodes->setFocus();
myIsEditCorners = true;
-
SelectionIntoArgument();
+ updateButtons();
}
//=================================================================================
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::onReverse (int state)
{
- if (!IsValid())
- return;
-
- if (state >= 0) {
- mySimulation->SetVisibility(false);
- displaySimulation();
- }
+ mySimulation->SetVisibility(false);
+ displaySimulation();
+ updateButtons();
}
bool ok;
for ( int row = 0; row < myTable->rowCount(); row++ )
- {
- int anID = myTable->item(row, 1)->text().toInt(&ok);
- if ( !ok )
- return false;
-
- const SMDS_MeshNode * aNode = aMesh->FindNode(anID);
- if ( !aNode )
- return false;
- }
+ {
+ int anID = myTable->item(row, 1)->text().toInt(&ok);
+ if ( !ok )
+ return false;
+
+ const SMDS_MeshNode * aNode = aMesh->FindNode(anID);
+ if ( !aNode )
+ return false;
+ }
return true;
}
QStringList aListCorners = myCornerNodes->text().split(" ", QString::SkipEmptyParts);
if ( aListCorners.count() == myNbCorners && theConersValidity )
- {
- myTable->setEnabled( true );
-
- // clear the Middle column
- for ( int row = 0; row < myTable->rowCount(); row++ )
- myTable->item( row, 1 )->setText("");
-
- int* aFirstColIds;
- int* aLastColIds;
-
- switch (myType) {
- case QUAD_EDGE:
- aFirstColIds = FirstEdgeIds;
- aLastColIds = LastEdgeIds;
- break;
- case QUAD_TRIANGLE:
- aFirstColIds = FirstTriangleIds;
- aLastColIds = LastTriangleIds;
- break;
- case QUAD_QUADRANGLE:
- aFirstColIds = FirstQuadrangleIds;
- aLastColIds = LastQuadrangleIds;
- break;
- case QUAD_TETRAHEDRON:
- aFirstColIds = FirstTetrahedronIds;
- aLastColIds = LastTetrahedronIds;
- break;
- case QUAD_PYRAMID:
- aFirstColIds = FirstPyramidIds;
- aLastColIds = LastPyramidIds;
- break;
- case QUAD_PENTAHEDRON:
- aFirstColIds = FirstPentahedronIds;
- aLastColIds = LastPentahedronIds;
- break;
- case QUAD_HEXAHEDRON:
- aFirstColIds = FirstHexahedronIds;
- aLastColIds = LastHexahedronIds;
- break;
- }
-
- // fill the First and the Last columns
- for (int i = 0, iEnd = myTable->rowCount(); i < iEnd; i++)
- myTable->item( i, 0 )->setText( aListCorners[ aFirstColIds[i] ] );
-
- for (int i = 0, iEnd = myTable->rowCount(); i < iEnd; i++)
- myTable->item( i, 2 )->setText( aListCorners[ aLastColIds[i] ] );
+ {
+ myTable->setEnabled( true );
+
+ // clear the Middle column
+ for ( int row = 0; row < myTable->rowCount(); row++ )
+ myTable->item( row, 1 )->setText("");
+
+ int* aFirstColIds;
+ int* aLastColIds;
+
+ switch (myType) {
+ case QUAD_EDGE:
+ aFirstColIds = FirstEdgeIds;
+ aLastColIds = LastEdgeIds;
+ break;
+ case QUAD_TRIANGLE:
+ aFirstColIds = FirstTriangleIds;
+ aLastColIds = LastTriangleIds;
+ break;
+ case QUAD_QUADRANGLE:
+ aFirstColIds = FirstQuadrangleIds;
+ aLastColIds = LastQuadrangleIds;
+ break;
+ case QUAD_TETRAHEDRON:
+ aFirstColIds = FirstTetrahedronIds;
+ aLastColIds = LastTetrahedronIds;
+ break;
+ case QUAD_PYRAMID:
+ aFirstColIds = FirstPyramidIds;
+ aLastColIds = LastPyramidIds;
+ break;
+ case QUAD_PENTAHEDRON:
+ aFirstColIds = FirstPentahedronIds;
+ aLastColIds = LastPentahedronIds;
+ break;
+ case QUAD_HEXAHEDRON:
+ aFirstColIds = FirstHexahedronIds;
+ aLastColIds = LastHexahedronIds;
+ break;
}
+
+ // fill the First and the Last columns
+ for (int i = 0, iEnd = myTable->rowCount(); i < iEnd; i++)
+ myTable->item( i, 0 )->setText( aListCorners[ aFirstColIds[i] ] );
+
+ for (int i = 0, iEnd = myTable->rowCount(); i < iEnd; i++)
+ myTable->item( i, 2 )->setText( aListCorners[ aLastColIds[i] ] );
+ }
else
- {
- // clear table
- for ( int row = 0; row < myTable->rowCount(); row++ )
- for ( int col = 0; col < myTable->columnCount(); col++ )
- if ( QTableWidgetItem* aTWI = myTable->item(row, col) ) aTWI->setText("");
-
- myTable->setEnabled( false );
- }
+ {
+ // clear table
+ for ( int row = 0; row < myTable->rowCount(); row++ )
+ for ( int col = 0; col < myTable->columnCount(); col++ )
+ if ( QTableWidgetItem* aTWI = myTable->item(row, col) ) aTWI->setText("");
+
+ myTable->setEnabled( false );
+ }
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::onCellDoubleClicked( int theRow, int theCol )
{
- if ( theCol == 1 )
- myIsEditCorners = false;
-
+ myIsEditCorners = false;
displaySimulation();
+ updateButtons();
}
//=================================================================================
void SMESHGUI_AddQuadraticElementDlg::onCellTextChange(int theRow, int theCol)
{
- onTextChange( myTable->item(theRow, theCol)->text() );
+ myIsEditCorners = false;
+ displaySimulation();
+ updateButtons();
}
//=================================================================================
ClickOnHelp();
}
}
+
+void SMESHGUI_AddQuadraticElementDlg::updateButtons()
+{
+ bool valid = IsValid();
+ buttonOk->setEnabled( valid );
+ buttonApply->setEnabled( valid );
+}