-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <SUIT_ResourceMgr.h>
#include <SUIT_Session.h>
#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
#include <QtxColorButton.h>
#include <LightApp_Application.h>
#include <SalomeApp_DoubleSpinBox.h>
#include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
-#include <SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx>
#include <SVTK_ViewWindow.h>
if (aTable->text(i, 2).isEmpty())
errMsg = tr( "ERROR" );
}
- else
+ else // check correctness of a numeric value
{
bool aRes = false;
bool isSignalsBlocked = aTable->signalsBlocked();
if (!aRes && aTable->isEditable(i, 2))
errMsg = tr( "ERROR" );
- else if (aType == SMESH::EDGE &&
- GetCriterionType(i, aType) == SMESH::FT_MultiConnection &&
- aThreshold == 1)
- errMsg = tr( "MULTIEDGES_ERROR" );
}
if (!errMsg.isEmpty()) {
aCriterion != SMESH::FT_OverConstrainedFace &&
aCriterion != SMESH::FT_OverConstrainedVolume)
||
- aCriterion == SMESH::FT_CoplanarFaces);
+ aCriterion == SMESH::FT_CoplanarFaces ||
+ aCriterion == SMESH::FT_EqualNodes);
if (!myAddWidgets.contains(anItem))
{
case SMESH::FT_Length2D:
case SMESH::FT_MaxElementLength2D:
case SMESH::FT_MaxElementLength3D:
+ case SMESH::FT_BallDiameter:
retval = "length_precision"; break;
case SMESH::FT_Volume3D:
retval = "vol_precision"; break;
case SMESH::FT_Volume3D:
case SMESH::FT_MaxElementLength2D:
case SMESH::FT_MaxElementLength3D:
- anIsDoubleCriterion = true; nbCompareSigns = 3; break;
+ anIsDoubleCriterion = true; break;
case SMESH::FT_FreeBorders:
case SMESH::FT_FreeEdges:
case SMESH::FT_EqualVolumes: break;
case SMESH::FT_MultiConnection:
- case SMESH::FT_MultiConnection2D: anIsIntCriterion = true; break;
+ case SMESH::FT_MultiConnection2D: anIsIntCriterion = true; nbCompareSigns = 3; break;
case SMESH::FT_Length:
case SMESH::FT_Length2D: anIsDoubleCriterion = true; break;
}
// set Compare
+ if ( anIsDoubleCriterion )
+ nbCompareSigns = 3;
if ( aCompareItem->count() != nbCompareSigns )
{
switch ( nbCompareSigns ) {
break;
}
case 3: {
+ int oldValue = aCompareItem->value();
aCompareItem->setItems(getCompare());
+ if ( oldValue >= 0 )
+ aCompareItem->setValue( oldValue );
break;
}
}
{
isThresholdEditable = true;
}
+ if ( !isThresholdEditable )
+ {
+ aTable->setItem( row, 2, new QTableWidgetItem() );
+ }
aTable->setEditable( isThresholdEditable, row, 2);
: QDialog( SMESH::GetDesktop( theModule ) ),
mySMESHGUI( theModule ),
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
- myInitSourceWgOnApply( true )
+ myInitSourceWgOnApply( true ),
+ myInsertEnabled( true ),
+ myDiffSourcesEnabled( true )
{
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
mySelector = aViewWindow->GetSelector();
: QDialog( SMESH::GetDesktop( theModule ) ),
mySMESHGUI( theModule ),
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
- myInitSourceWgOnApply( true )
+ myInitSourceWgOnApply( true ),
+ myInsertEnabled( true ),
+ myDiffSourcesEnabled( true )
{
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
mySelector = aViewWindow->GetSelector();
int rows = aLay->rowCount();
int cols = aLay->columnCount();
+ // This line looks strange when all additional parameters and mySetInViewer are hidden
QFrame* aLine = new QFrame(aGrp);
aLine->setFrameStyle(QFrame::HLine | QFrame::Sunken);
aLay->addWidget(aLine, rows++, 0, 1, cols);
myInitSourceWgOnApply = initOnApply;
}
+//=======================================================================
+//function : EnableFiltering
+//purpose : Enables "Insert filter in the viewer"
+// and different "Source"s (Mesh, Initial Selection, Current Group)
+//=======================================================================
+
+void SMESHGUI_FilterDlg::SetEnabled( bool setInViewer, bool diffSources )
+{
+ myInsertEnabled = setInViewer;
+ myDiffSourcesEnabled = diffSources;
+
+ mySetInViewer->setVisible( myInsertEnabled );
+ mySourceGrp->button(0)->parentWidget()->setVisible( myDiffSourcesEnabled );
+}
+
//=======================================================================
// name : SMESHGUI_FilterDlg::SetMesh
// Purpose : Set mesh
if (!isValid())
return false;
+ SUIT_OverrideCursor wc;
try {
int aCurrType = myTable->GetType();
insertFilterInViewer();
if (!myFilter[ aCurrType ]->GetPredicate()->_is_nil()) {
- QList<int> aResultIds;
- filterSource(aCurrType, aResultIds);
- // select in viewer
- selectInViewer(aCurrType, aResultIds);
+ //
+ bool toFilter = (( SMESH::FindActorByObject( myMesh )) ||
+ ( myInitSourceWgOnApply && mySourceWg ) ||
+ ( mySourceGrp->checkedId() == Dialog && mySourceWg ));
+ if ( toFilter ) {
+ QList<int> aResultIds;
+ filterSource(aCurrType, aResultIds);
+ // select in viewer
+ selectInViewer(aCurrType, aResultIds);
+ }
}
-
myInsertState[ aCurrType ] = mySetInViewer->isChecked();
myApplyToState[ aCurrType ] = mySourceGrp->checkedId();
}
aCriteria[ i ] = aCriterion;
}
+ if ( !myFilter[ theType ]->_is_nil() )
+ myFilter[ theType ]->UnRegister();
myFilter[ theType ] = aFilterMgr->CreateFilter();
myFilter[ theType ]->SetCriteria(aCriteria.inout());
void SMESHGUI_FilterDlg::SetFilter(SMESH::Filter_var filter, int type)
{
+ if ( !filter->_is_nil() )
+ filter->Register();
+ if ( !myFilter[ type ]->_is_nil() )
+ myFilter[ type ]->UnRegister();
+
myFilter[ type ] = filter;
}
+//================================================================================
+/*!
+ * \brief call UnRegister() for myFilter's
+ */
+//================================================================================
+
+void SMESHGUI_FilterDlg::UnRegisterFilters()
+{
+ QMap< int, SMESH::Filter_var >::iterator i_f = myFilter.begin();
+ for ( ; i_f != myFilter.end(); ++i_f )
+ if ( !i_f.value()->_is_nil() )
+ i_f.value()->UnRegister();
+ myFilter.clear();
+}
+
//=======================================================================
// name : SMESHGUI_FilterDlg::insertFilterInViewer
// Purpose : Insert filter in viewer
SMESH::ElementType anEntType = (SMESH::ElementType)myTable->GetType();
if (myFilter[ myTable->GetType() ]->_is_nil() ||
- myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
- !mySetInViewer->isChecked()) {
+ myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
+ !mySetInViewer->isChecked() ||
+ !myInsertEnabled )
+ {
SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
}
else {
int aSourceId = mySourceGrp->checkedId();
- if (aSourceId == Mesh)
+ if (aSourceId == Mesh || !myDiffSourcesEnabled )
{
if (myMesh->_is_nil())
return;