#include "SMESHDS_Mesh.hxx"
#include "SMESHGUI.h"
#include "SMESHGUI_FilterUtils.h"
+#include "SMESHGUI_IdPreview.h"
#include "SMESHGUI_IdValidator.h"
#include "SMESHGUI_SpinBox.h"
#include "SMESHGUI_Utils.h"
QTreeWidgetItem* cntrItem = createItem( elemItem, Bold );
cntrItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONTROLS" ) );
//Length
- if( e->GetType()==SMDSAbs_Edge){
+ if( e->GetType()==SMDSAbs_Edge){
afunctor.reset( new SMESH::Controls::Length() );
afunctor->SetMesh( actor()->GetObject()->GetMesh() );
afunctor->SetPrecision( cprecision );
QTreeWidgetItem* lenItem = createItem( cntrItem, Bold );
lenItem->setText( 0, tr( "LENGTH_EDGES" ) );
- lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
}
if( e->GetType() == SMDSAbs_Face ) {
- //Area
- afunctor.reset( new SMESH::Controls::Area() );
+ //Area
+ afunctor.reset( new SMESH::Controls::Area() );
afunctor->SetMesh( actor()->GetObject()->GetMesh() );
afunctor->SetPrecision( cprecision );
QTreeWidgetItem* areaItem = createItem( cntrItem, Bold );
areaItem->setText( 0, tr( "AREA_ELEMENTS" ) );
- areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) ) );
+ areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) ) );
//Taper
- afunctor.reset( new SMESH::Controls::Taper() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- afunctor->SetPrecision( cprecision );
- QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold );
- taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ) );
- taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ if ( e->NbNodes() == 4 ) // see SMESH_Controls.cxx
+ {
+ afunctor.reset( new SMESH::Controls::Taper() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ afunctor->SetPrecision( cprecision );
+ QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold );
+ taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ) );
+ taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ //Wraping angle
+ afunctor.reset( new SMESH::Controls::Warping() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ afunctor->SetPrecision( cprecision );
+ QTreeWidgetItem* warpItem = createItem( cntrItem, Bold );
+ warpItem->setText( 0, tr( "WARP_ELEMENTS" ));
+ warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ }
//AspectRatio2D
- afunctor.reset( new SMESH::Controls::AspectRatio() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold );
- ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" ));
- ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ if ( !e->IsPoly() )
+ {
+ afunctor.reset( new SMESH::Controls::AspectRatio() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold );
+ ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" ));
+ ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ }
//Minimum angle
afunctor.reset( new SMESH::Controls::MinimumAngle() );
afunctor->SetMesh( actor()->GetObject()->GetMesh() );
afunctor->SetPrecision( cprecision );
QTreeWidgetItem* minanglItem = createItem( cntrItem, Bold );
minanglItem->setText( 0, tr( "MINIMUMANGLE_ELEMENTS" ) );
- minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
- //Wraping angle
- afunctor.reset( new SMESH::Controls::Warping() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- afunctor->SetPrecision( cprecision );
- QTreeWidgetItem* warpItem = createItem( cntrItem, Bold );
- warpItem->setText( 0, tr( "WARP_ELEMENTS" ));
- warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
- //Skew
- afunctor.reset( new SMESH::Controls::Skew() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- afunctor->SetPrecision( cprecision );
- QTreeWidgetItem* skewItem = createItem( cntrItem, Bold );
- skewItem->setText( 0, tr( "SKEW_ELEMENTS" ) );
- skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
- //ElemDiam2D
- afunctor.reset( new SMESH::Controls::MaxElementLength2D() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- QTreeWidgetItem* diamItem = createItem( cntrItem, Bold );
- diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" ));
- diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ //Skew
+ if ( e->NbNodes() == 3 || e->NbNodes() == 4 )
+ {
+ afunctor.reset( new SMESH::Controls::Skew() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ afunctor->SetPrecision( cprecision );
+ QTreeWidgetItem* skewItem = createItem( cntrItem, Bold );
+ skewItem->setText( 0, tr( "SKEW_ELEMENTS" ) );
+ skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ }
+ //ElemDiam2D
+ if ( !e->IsPoly() )
+ {
+ afunctor.reset( new SMESH::Controls::MaxElementLength2D() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ QTreeWidgetItem* diamItem = createItem( cntrItem, Bold );
+ diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" ));
+ diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ }
}
if( e->GetType() == SMDSAbs_Volume ) {
- //AspectRatio3D
- afunctor.reset( new SMESH::Controls::AspectRatio3D() );
- afunctor->SetMesh( actor()->GetObject()->GetMesh() );
- QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold );
- ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" ) );
- ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ if ( !e->IsPoly() )
+ {
+ //AspectRatio3D
+ afunctor.reset( new SMESH::Controls::AspectRatio3D() );
+ afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+ QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold );
+ ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" ) );
+ ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ }
//Volume
afunctor.reset( new SMESH::Controls::Volume() );
afunctor->SetMesh( actor()->GetObject()->GetMesh() );
afunctor->SetMesh( actor()->GetObject()->GetMesh() );
QTreeWidgetItem* diam3Item = createItem( cntrItem, Bold );
diam3Item->setText( 0, tr( "MAX_ELEMENT_LENGTH_3D" ) );
- diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
+ diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) );
}
// gravity center
\param page specifies the dialog page to be shown at the start-up
*/
SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page )
-: QDialog( parent ), myActor( 0 )
+ : QDialog( parent ), myActor( 0 )
{
setModal( false );
setAttribute( Qt::WA_DeleteOnClose, true );
myTabWidget = new QTabWidget( this );
- // base info
+ // base info
myBaseInfo = new SMESHGUI_MeshInfo( myTabWidget );
myTabWidget->addTab( myBaseInfo, tr( "BASE_INFO" ) );
// elem info
-
+
QWidget* w = new QWidget( myTabWidget );
myMode = new QButtonGroup( this );
myMode->button( NodeMode )->setChecked( true );
myID = new QLineEdit( w );
myID->setValidator( new SMESHGUI_IdValidator( this ) );
+ myIDPreviewCheck = new QCheckBox( tr( "SHOW_IDS" ), w );
+ myIDPreview = new SMESHGUI_IdPreview( SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() ));
int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 1 );
mode = qMin( 1, qMax( 0, mode ) );
-
- if ( mode == 0 )
+
+ if ( mode == 0 )
myElemInfo = new SMESHGUI_SimpleElemInfo( w );
else
myElemInfo = new SMESHGUI_TreeElemInfo( w );
elemLayout->setSpacing( SPACING );
elemLayout->addWidget( myMode->button( NodeMode ), 0, 0 );
elemLayout->addWidget( myMode->button( ElemMode ), 0, 1 );
- elemLayout->addWidget( myID, 0, 2 );
- elemLayout->addWidget( myElemInfo, 1, 0, 1, 3 );
-
+ elemLayout->addWidget( myID, 0, 2 );
+ elemLayout->addWidget( myIDPreviewCheck, 1, 0, 1, 2 );
+ elemLayout->addWidget( myElemInfo, 2, 0, 1, 3 );
+
myTabWidget->addTab( w, tr( "ELEM_INFO" ) );
// additional info
l->addWidget( myTabWidget );
l->addLayout( btnLayout );
- myTabWidget->setCurrentIndex( qMax( (int)BaseInfo, qMin( (int)ElemInfo, page ) ) );
+ myTabWidget->setCurrentIndex( qMax( (int)BaseInfo, qMin( (int)ElemInfo, page )));
- connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
- connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() ) );
- connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ) );
- connect( myTabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( updateSelection() ) );
- connect( myMode, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged() ) );
- connect( myID, SIGNAL( textChanged( QString ) ), this, SLOT( idChanged() ) );
- connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ) );
- connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) );
- connect( myElemInfo, SIGNAL( itemInfo( int ) ), this, SLOT( showItemInfo( int ) ) );
- connect( myElemInfo, SIGNAL( itemInfo( QString ) ), this, SLOT( showItemInfo( QString ) ) );
+ connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ));
+ connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() ));
+ connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ));
+ connect( myTabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( updateSelection() ));
+ connect( myMode, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged() ));
+ connect( myID, SIGNAL( textChanged( QString ) ), this, SLOT( idChanged() ));
+ connect( myIDPreviewCheck, SIGNAL( toggled(bool) ), this, SLOT( idPreviewChange(bool) ));
+ connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ));
+ connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ));
+ connect( myElemInfo, SIGNAL( itemInfo( int ) ), this, SLOT( showItemInfo( int )));
+ connect( myElemInfo, SIGNAL( itemInfo( QString ) ), this, SLOT( showItemInfo( QString )));
updateSelection();
}
*/
SMESHGUI_MeshInfoDlg::~SMESHGUI_MeshInfoDlg()
{
+ delete myIDPreview;
}
/*!
*/
void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO )
{
+ if ( !IO.IsNull() )
+ myIO = IO;
+
SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
- if ( !CORBA::is_nil( obj ) ) {
+ if ( !CORBA::is_nil( obj ) )
+ {
myAddInfo->showInfo( obj ); // nb of nodes in a group can be computed by myAddInfo,
myBaseInfo->showInfo( obj ); // and it will be used by myBaseInfo (IPAL52871)
- myCtrlInfo->showInfo( obj );
+ if ( myTabWidget->currentIndex() == CtrlInfo )
+ myCtrlInfo->showInfo( obj );
- myActor = SMESH::FindActorByEntry( IO->getEntry() );
- SVTK_Selector* selector = SMESH::GetSelector();
- QString ID;
- int nb = 0;
- if ( myActor && selector ) {
- nb = myMode->checkedId() == NodeMode ?
- SMESH::GetNameOfSelectedElements( selector, IO, ID ) :
- SMESH::GetNameOfSelectedNodes( selector, IO, ID );
- }
- myElemInfo->setSource( myActor ) ;
- if ( nb > 0 ) {
- myID->setText( ID.trimmed() );
- QSet<long> ids;
- QStringList idTxt = ID.split( " ", QString::SkipEmptyParts );
- foreach ( ID, idTxt )
- ids << ID.trimmed().toLong();
- myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode );
- }
- else {
- myID->clear();
- myElemInfo->clear();
+ {
+ myActor = SMESH::FindActorByEntry( IO->getEntry() );
+ SVTK_Selector* selector = SMESH::GetSelector();
+ QString ID;
+ int nb = 0;
+ if ( myActor && selector ) {
+ nb = myMode->checkedId() == NodeMode ?
+ SMESH::GetNameOfSelectedElements( selector, IO, ID ) :
+ SMESH::GetNameOfSelectedNodes( selector, IO, ID );
+ }
+ myElemInfo->setSource( myActor ) ;
+ if ( nb > 0 ) {
+ myID->setText( ID.trimmed() );
+ QSet<long> ids;
+ QStringList idTxt = ID.split( " ", QString::SkipEmptyParts );
+ foreach ( ID, idTxt )
+ ids << ID.trimmed().toLong();
+ myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode );
+ }
+ else {
+ myID->clear();
+ myElemInfo->clear();
+ }
}
}
}
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
aViewWindow->SetSelectionMode( ActorSelection );
QDialog::reject();
+ myIDPreview->SetPointsLabeled(false);
}
/*!
disconnect( selMgr, 0, this, 0 );
selMgr->clearFilters();
- if ( myTabWidget->currentIndex() == BaseInfo || myTabWidget->currentIndex() == AddInfo || myTabWidget->currentIndex() == CtrlInfo ) {
+ if ( myTabWidget->currentIndex() == BaseInfo ||
+ myTabWidget->currentIndex() == AddInfo ||
+ myTabWidget->currentIndex() == CtrlInfo ) {
SMESH::SetPointRepresentation( false );
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
aViewWindow->SetSelectionMode( ActorSelection );
Handle(SALOME_InteractiveObject) IO = selected.First();
showInfo( IO );
}
-// else {
-// myBaseInfo->clear();
-// myElemInfo->clear();
-// myAddInfo->clear();
-// }
+ else {
+ showInfo( myIO );
+ }
}
/*!
}
/*!
- \brief Caled when users prints mesh element ID in the corresponding field.
+ \brief Called when users prints mesh element ID in the corresponding field.
*/
void SMESHGUI_MeshInfoDlg::idChanged()
{
+ myIDPreview->SetPointsLabeled( false );
+
SVTK_Selector* selector = SMESH::GetSelector();
if ( myActor && selector ) {
Handle(SALOME_InteractiveObject) IO = myActor->getIO();
TColStd_MapOfInteger ID;
- QSet<long> ids;
+ QSet<long> ids;
+ std::vector<int> idVec;
+ std::list< gp_XYZ > aGrCentersXYZ;
QStringList idTxt = myID->text().split( " ", QString::SkipEmptyParts );
foreach ( QString tid, idTxt ) {
long id = tid.trimmed().toLong();
- const SMDS_MeshElement* e = myMode->checkedId() == ElemMode ?
+ const SMDS_MeshElement* e = myMode->checkedId() == ElemMode ?
myActor->GetObject()->GetMesh()->FindElement( id ) :
myActor->GetObject()->GetMesh()->FindNode( id );
if ( e ) {
ID.Add( id );
ids << id;
+ if ( myMode->checkedId() == ElemMode )
+ {
+ idVec.push_back( id );
+ aGrCentersXYZ.push_back( myElemInfo->getGravityCenter( e ));
+ }
}
}
selector->AddOrRemoveIndex( IO, ID, false );
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) {
+
+ if ( myMode->checkedId() == NodeMode )
+ myIDPreview->SetPointsData( myActor->GetObject()->GetMesh(), ID );
+ else
+ myIDPreview->SetElemsData( idVec, aGrCentersXYZ );
+
+ bool showIDs = ( !ID.IsEmpty() &&
+ myIDPreviewCheck->isChecked() &&
+ myTabWidget->currentIndex() == ElemInfo );
+ myIDPreview->SetPointsLabeled( showIDs, myActor->GetVisibility() );
+
aViewWindow->highlight( IO, true, true );
aViewWindow->Repaint();
}
}
}
+/*!
+ * \brief Show IDs clicked
+ */
+void SMESHGUI_MeshInfoDlg::idPreviewChange( bool isOn )
+{
+ myIDPreview->SetPointsLabeled( isOn && !myID->text().simplified().isEmpty() );
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
+ aViewWindow->Repaint();
+}
+
void SMESHGUI_MeshInfoDlg::showItemInfo( int id )
{
if ( id > 0 && myActor->GetObject()->GetMesh()->FindNode( id ) ) {