From: vsr Date: Sat, 30 Oct 2010 09:12:30 +0000 (+0000) Subject: PAL20885 EDF 607 SMESH: Measure tools X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=7ca35196f4aa4541f5a81e6a8df449386e7467e3;p=modules%2Fsmesh.git PAL20885 EDF 607 SMESH: Measure tools Improve mesh element information dialog box --- diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 53f493edd..4d3383376 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -4092,9 +4092,9 @@ void SMESHGUI::createPreferences() setPreferenceProperty( computeGroup, "columns", 2 ); int notifyMode = addPreference( tr( "PREF_NOTIFY_MODE" ), computeGroup, LightApp_Preferences::Selector, "SMESH", "show_result_notification" ); modes.clear(); - modes.append( "Never" ); - modes.append( "Errors only" ); - modes.append( "Always" ); + modes.append( tr( "PREF_NOTIFY_NEVER" ) ); + modes.append( tr( "PREF_NOTIFY_ERROR" ) ); + modes.append( tr( "PREF_NOTIFY_ALWAYS" ) ); indices.clear(); indices.append( 0 ); indices.append( 1 ); @@ -4102,6 +4102,18 @@ void SMESHGUI::createPreferences() setPreferenceProperty( notifyMode, "strings", modes ); setPreferenceProperty( notifyMode, "indexes", indices ); + int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab ); + setPreferenceProperty( computeGroup, "columns", 2 ); + int elemInfo = addPreference( tr( "PREF_ELEM_INFO" ), infoGroup, LightApp_Preferences::Selector, "SMESH", "mesh_elem_info" ); + modes.clear(); + modes.append( tr( "PREF_ELEM_INFO_SIMPLE" ) ); + modes.append( tr( "PREF_ELEM_INFO_TREE" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( elemInfo, "strings", modes ); + setPreferenceProperty( elemInfo, "indexes", indices ); + int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab ); setPreferenceProperty( segGroup, "columns", 2 ); int segLen = addPreference( tr( "PREF_SEGMENT_LENGTH" ), segGroup, LightApp_Preferences::IntSpin, diff --git a/src/SMESHGUI/SMESHGUI_MeshInfo.cxx b/src/SMESHGUI/SMESHGUI_MeshInfo.cxx index f4549ea29..3cb15f1de 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfo.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshInfo.cxx @@ -44,6 +44,8 @@ #include #include #include +#include +#include #include #include #include @@ -51,6 +53,7 @@ #include #include #include +#include #include #include @@ -461,7 +464,7 @@ void SMESHGUI_MeshInfo::setFieldsVisible( int start, int end, bool on ) \param parent parent widget */ SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent ) -: QWidget( parent ), myActor( 0 ) +: QWidget( parent ), myActor( 0 ), myID( 0 ), myIsElement( -1 ) { } @@ -478,10 +481,30 @@ SMESHGUI_ElemInfo::~SMESHGUI_ElemInfo() */ void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor ) { - myActor = actor; - clear(); + if ( myActor != actor ) { + myActor = actor; + myID = 0; + myIsElement = -1; + clear(); + } +} + +/*! + \brief Show mesh element information + \param long id mesh node / element ID + \param isElem show mesh element information if \c true or mesh node information if \c false +*/ +void SMESHGUI_ElemInfo::showInfo( long id, bool isElem ) +{ + myID = id; + myIsElement = isElem; } +/*! + \fn void SMESHGUI_ElemInfo::clear() + \brief Clear mesh element information widget +*/ + /*! \brief Get node connectivity \param node mesh node @@ -500,6 +523,24 @@ SMESHGUI_ElemInfo::Connectivity SMESHGUI_ElemInfo::nodeConnectivity( const SMDS_ return elmap; } +/*! + \brief Format connectivity data to string representation + \param connectivity connetivity map + \param type element type + \return string representation of the connectivity +*/ +QString SMESHGUI_ElemInfo::formatConnectivity( Connectivity connectivity, int type ) +{ + QStringList str; + if ( connectivity.contains( type ) ) { + QList elements = connectivity[ type ]; + qSort( elements ); + foreach( int id, elements ) + str << QString::number( id ); + } + return str.join( " " ); +} + /*! \brief Calculate gravity center of the mesh element \param element mesh element @@ -518,18 +559,6 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement* return xyz; } -/*! - \fn void SMESHGUI_ElemInfo::showInfo( long id, bool isElem ) - \brief Show mesh element information - \param long id mesh node / element ID - \param isElem show mesh element information if \c true or mesh node information if \c false -*/ - -/*! - \fn void SMESHGUI_ElemInfo::clear() - \brief Clear mesh element information widget -*/ - /*! \class SMESHGUI_SimpleElemInfo \brief Represents mesh element information in the simple text area. @@ -555,6 +584,10 @@ SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent ) */ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem ) { + if ( myID == id && myIsElement == isElem ) return; + + SMESHGUI_ElemInfo::showInfo( id, isElem ); + clear(); if ( myActor ) { @@ -567,7 +600,7 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem ) if ( !e ) return; const SMDS_MeshNode* node = static_cast( e ); - // node number + // node ID myInfo->append( QString( "%1 #%2" ).arg( tr( "NODE" ) ).arg( id ) ); // separator myInfo->append( "" ); @@ -606,7 +639,7 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem ) const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindElement( id ); if ( !e ) return; - // element type + // element ID && type QString stype; switch( e->GetType() ) { case SMDSAbs_0DElement: @@ -672,14 +705,14 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem ) SMDS_ElemIteratorPtr nodeIt = e->nodesIterator(); for ( int idx = 1; nodeIt->more(); idx++ ) { const SMDS_MeshNode* node = static_cast( nodeIt->next() ); - // node number and id + // node number and ID myInfo->append( QString( "%1 %2/%3 - #%4" ).arg( tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ).arg( node->GetID() ) ); - // coordinates + // node coordinates myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( tr( "COORDINATES" ) ). arg( node->X(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). arg( node->Y(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). arg( node->Z(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); - // connectivity + // node connectivity Connectivity connectivity = nodeConnectivity( node ); if ( !connectivity.isEmpty() ) { myInfo->append( QString( "%1:" ).arg( tr( "CONNECTIVITY" ) ) ); @@ -715,26 +748,39 @@ void SMESHGUI_SimpleElemInfo::clear() } /*! - \brief Format connectivity data to string representation - \param connectivity connetivity map - \param type element type - \return string representation of the connectivity + \class SMESHGUI_TreeElemInfo::ItemDelegate + \brief Item delegate for tree mesh info widget + \internal */ -QString SMESHGUI_SimpleElemInfo::formatConnectivity( Connectivity connectivity, int type ) +class SMESHGUI_TreeElemInfo::ItemDelegate : public QItemDelegate +{ +public: + ItemDelegate( QObject* ); + QWidget* createEditor( QWidget*, const QStyleOptionViewItem&, const QModelIndex& ) const; +}; + +/*! + \brief Constructor + \internal +*/ +SMESHGUI_TreeElemInfo::ItemDelegate::ItemDelegate( QObject* parent ) : QItemDelegate( parent ) { - QStringList str; - if ( connectivity.contains( type ) ) { - QList elements = connectivity[ type ]; - qSort( elements ); - foreach( int id, elements ) - str << QString::number( id ); - } - return str.join( " " ); +} + +/*! + \brief Create item editor widget + \internal +*/ +QWidget* SMESHGUI_TreeElemInfo::ItemDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const +{ + QWidget* w = index.column() == 0 ? 0: QItemDelegate::createEditor( parent, option, index ); + if ( qobject_cast( w ) ) qobject_cast( w )->setReadOnly( true ); + return w; } /*! \class SMESHGUI_TreeElemInfo - \brief Simple mesh element information representation widget + \brief Represents mesh element information in the tree-like form. */ /*! @@ -744,6 +790,15 @@ QString SMESHGUI_SimpleElemInfo::formatConnectivity( Connectivity connectivity, SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent ) : SMESHGUI_ElemInfo( parent ) { + myInfo = new QTreeWidget( this ); + myInfo->setColumnCount( 2 ); + myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" ) ); + myInfo->header()->setStretchLastSection( true ); + myInfo->header()->setResizeMode( 0, QHeaderView::ResizeToContents ); + myInfo->setItemDelegate( new ItemDelegate( myInfo ) ); + QVBoxLayout* l = new QVBoxLayout( this ); + l->setMargin( 0 ); + l->addWidget( myInfo ); } /*! @@ -753,6 +808,216 @@ SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent ) */ void SMESHGUI_TreeElemInfo::showInfo( long id, bool isElem ) { + if ( myID == id && myIsElement == isElem ) return; + + SMESHGUI_ElemInfo::showInfo( id, isElem ); + + clear(); + + if ( myActor ) { + int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 ); + if ( !isElem ) { + // + // show node info + // + const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindNode( id ); + if ( !e ) return; + const SMDS_MeshNode* node = static_cast( e ); + + // node ID + QTreeWidgetItem* nodeItem = createItem( 0, -1 ); + nodeItem->setText( 0, tr( "NODE" ) ); + nodeItem->setText( 1, QString( "#%1" ).arg( id ) ); + nodeItem->setExpanded( true ); + // coordinates + QTreeWidgetItem* coordItem = createItem( nodeItem, 0 ); + coordItem->setText( 0, tr( "COORDINATES" ) ); + coordItem->setExpanded( true ); + QTreeWidgetItem* xItem = createItem( coordItem ); + xItem->setText( 0, "X" ); + xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* yItem = createItem( coordItem ); + yItem->setText( 0, "Y" ); + yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* zItem = createItem( coordItem ); + zItem->setText( 0, "Z" ); + zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + // connectivity + QTreeWidgetItem* conItem = createItem( nodeItem, 0 ); + conItem->setText( 0, tr( "CONNECTIVITY" ) ); + conItem->setExpanded( true ); + Connectivity connectivity = nodeConnectivity( node ); + if ( !connectivity.isEmpty() ) { + QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( conItem ); + i->setText( 0, tr( "0D_ELEMENTS" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Edge ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( conItem ); + i->setText( 0, tr( "EDGES" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Face ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( conItem ); + i->setText( 0, tr( "FACES" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Volume ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( conItem ); + i->setText( 0, tr( "VOLUMES" ) ); + i->setText( 1, con ); + } + } + else { + conItem->setText( 1, tr( "FREE_NODE" ) ); + } + } + else { + // + // show element info + // + const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindElement( id ); + if ( !e ) return; + + // element ID && type + QString stype; + switch( e->GetType() ) { + case SMDSAbs_0DElement: + stype = tr( "0D ELEMENT" ); break; + case SMDSAbs_Edge: + stype = tr( "EDGE" ); break; + case SMDSAbs_Face: + stype = tr( "FACE" ); break; + case SMDSAbs_Volume: + stype = tr( "VOLUME" ); break; + default: + break; + } + if ( stype.isEmpty() ) return; + QTreeWidgetItem* elemItem = createItem( 0, -1 ); + elemItem->setText( 0, stype ); + elemItem->setText( 1, QString( "#%1" ).arg( id ) ); + elemItem->setExpanded( true ); + // geometry type + QString gtype; + switch( e->GetEntityType() ) { + case SMDSEntity_Triangle: + case SMDSEntity_Quad_Triangle: + gtype = tr( "TRIANGLE" ); break; + case SMDSEntity_Quadrangle: + case SMDSEntity_Quad_Quadrangle: + gtype = tr( "QUADRANGLE" ); break; + case SMDSEntity_Polygon: + case SMDSEntity_Quad_Polygon: + gtype = tr( "QUADRANGLE" ); break; + case SMDSEntity_Tetra: + case SMDSEntity_Quad_Tetra: + gtype = tr( "TETRAHEDRON" ); break; + case SMDSEntity_Pyramid: + case SMDSEntity_Quad_Pyramid: + gtype = tr( "PYRAMID" ); break; + case SMDSEntity_Hexa: + case SMDSEntity_Quad_Hexa: + gtype = tr( "HEXAHEDRON" ); break; + case SMDSEntity_Penta: + case SMDSEntity_Quad_Penta: + gtype = tr( "PRISM" ); break; + case SMDSEntity_Polyhedra: + case SMDSEntity_Quad_Polyhedra: + gtype = tr( "POLYHEDRON" ); break; + default: + break; + } + if ( !gtype.isEmpty() ) { + QTreeWidgetItem* typeItem = createItem( elemItem, 0 ); + typeItem->setText( 0, tr( "TYPE" ) ); + typeItem->setText( 1, gtype ); + } + // quadratic flag and gravity center (any element except 0D) + if ( e->GetEntityType() > SMDSEntity_0D && e->GetEntityType() < SMDSEntity_Last ) { + // quadratic flag + QTreeWidgetItem* quadItem = createItem( elemItem, 0 ); + quadItem->setText( 0, tr( "QUADRATIC" ) ); + quadItem->setText( 1, e->IsQuadratic() ? tr( "YES" ) : tr( "NO" ) ); + // gravity center + XYZ gc = gravityCenter( e ); + QTreeWidgetItem* gcItem = createItem( elemItem, 0 ); + gcItem->setText( 0, tr( "GRAVITY_CENTER" ) ); + gcItem->setExpanded( true ); + QTreeWidgetItem* xItem = createItem( gcItem ); + xItem->setText( 0, "X" ); + xItem->setText( 1, QString::number( gc.x(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* yItem = createItem( gcItem ); + yItem->setText( 0, "Y" ); + yItem->setText( 1, QString::number( gc.y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* zItem = createItem( gcItem ); + zItem->setText( 0, "Z" ); + zItem->setText( 1, QString::number( gc.z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + } + // connectivity + QTreeWidgetItem* conItem = createItem( elemItem, 0 ); + conItem->setText( 0, tr( "CONNECTIVITY" ) ); + conItem->setExpanded( true ); + SMDS_ElemIteratorPtr nodeIt = e->nodesIterator(); + for ( int idx = 1; nodeIt->more(); idx++ ) { + const SMDS_MeshNode* node = static_cast( nodeIt->next() ); + // node number and ID + QTreeWidgetItem* nodeItem = createItem( conItem, 0 ); + nodeItem->setText( 0, QString( "%1 %2/%3" ).arg( tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ) ); + nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() ) ); + //nodeItem->setExpanded( true ); + // node coordinates + QTreeWidgetItem* coordItem = createItem( nodeItem ); + coordItem->setText( 0, tr( "COORDINATES" ) ); + coordItem->setExpanded( true ); + QTreeWidgetItem* xItem = createItem( coordItem ); + xItem->setText( 0, "X" ); + xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* yItem = createItem( coordItem ); + yItem->setText( 0, "Y" ); + yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + QTreeWidgetItem* zItem = createItem( coordItem ); + zItem->setText( 0, "Z" ); + zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + // node connectivity + QTreeWidgetItem* nconItem = createItem( nodeItem ); + nconItem->setText( 0, tr( "CONNECTIVITY" ) ); + nconItem->setExpanded( true ); + Connectivity connectivity = nodeConnectivity( node ); + if ( !connectivity.isEmpty() ) { + QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, tr( "0D_ELEMENTS" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Edge ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, tr( "EDGES" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Face ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, tr( "FACES" ) ); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Volume ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, tr( "VOLUMES" ) ); + i->setText( 1, con ); + } + } + } + } + } } /*! @@ -760,6 +1025,36 @@ void SMESHGUI_TreeElemInfo::showInfo( long id, bool isElem ) */ void SMESHGUI_TreeElemInfo::clear() { + myInfo->clear(); + myInfo->repaint(); +} + +/*! + \brief Create new tree item. + \param parnt parent tree widget item + \param column item column to be set bold, if it is -1, bold font will be set for all columns + \return new tree widget item +*/ +QTreeWidgetItem* SMESHGUI_TreeElemInfo::createItem( QTreeWidgetItem* parent, int column ) +{ + QTreeWidgetItem* item; + if ( parent ) + item = new QTreeWidgetItem( parent ); + else + item = new QTreeWidgetItem( myInfo ); + + item->setFlags( item->flags() | Qt::ItemIsEditable ); + + QFont f = item->font( 0 ); + f.setBold( true ); + if ( column >= 0 && column < myInfo->columnCount() ) { + item->setFont( column, f ); + } + else if ( column == -1 ) { + for ( int i = 0; i < myInfo->columnCount(); i++ ) + item->setFont( i, f ); + } + return item; } /*! @@ -798,7 +1093,7 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) myID = new QLineEdit( w ); myID->setValidator( new SMESHGUI_IdValidator( this, 1 ) ); - int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 0 ); + int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 1 ); mode = qMin( 1, qMax( 0, mode ) ); if ( mode == 0 ) diff --git a/src/SMESHGUI/SMESHGUI_MeshInfo.h b/src/SMESHGUI/SMESHGUI_MeshInfo.h index a6b6d7dc3..ae22e5ac0 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfo.h +++ b/src/SMESHGUI/SMESHGUI_MeshInfo.h @@ -42,6 +42,8 @@ class QLabel; class QLineEdit; class QTabWidget; class QTextBrowser; +class QTreeWidget; +class QTreeWidgetItem; class SMESH_Actor; class SMDS_MeshNode; class SMDS_MeshElement; @@ -119,8 +121,7 @@ public: ~SMESHGUI_ElemInfo(); void setSource( SMESH_Actor* ); - - virtual void showInfo( long, bool ) = 0; + virtual void showInfo( long, bool ); virtual void clear() = 0; protected: @@ -137,10 +138,13 @@ protected: typedef QMap< int, QList > Connectivity; Connectivity nodeConnectivity( const SMDS_MeshNode* ); + QString formatConnectivity( Connectivity, int ); XYZ gravityCenter( const SMDS_MeshElement* ); protected: SMESH_Actor* myActor; + long myID; + int myIsElement; }; class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo @@ -151,20 +155,25 @@ public: void showInfo( long, bool ); void clear(); -protected: - QString formatConnectivity( Connectivity, int ); - private: QTextBrowser* myInfo; }; class SMESHGUI_EXPORT SMESHGUI_TreeElemInfo : public SMESHGUI_ElemInfo { + class ItemDelegate; + public: SMESHGUI_TreeElemInfo( QWidget* = 0 ); - void showInfo( long, bool ); - void clear(); + void showInfo( long, bool ); + void clear(); + +private: + QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 100 ); + +private: + QTreeWidget* myInfo; }; class SMESHGUI_EXPORT SMESHGUI_MeshInfoDlg : public QDialog diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index bf71dcded..6f5139439 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -3402,6 +3402,30 @@ Please, create VTK viewer and try again PREF_NOTIFY_MODE Show a computation result notification + + PREF_NOTIFY_NEVER + Never + + + PREF_NOTIFY_ERROR + Errors only + + + PREF_NOTIFY_ALWAYS + Always + + + PREF_ELEM_INFO + Mesh element information + + + PREF_ELEM_INFO_SIMPLE + Simple + + + PREF_ELEM_INFO_TREE + Tree + SMESH_PREF_GROUP_PRECISION Input fields precision @@ -3454,6 +3478,10 @@ Please, create VTK viewer and try again PREF_GROUP_UPDATE Update + + PREF_GROUP_INFO + Mesh information + PREF_HIGHLIGHT_COLOR Highlight color @@ -5608,5 +5636,13 @@ It is impossible to read point coordinates from file GRAVITY_CENTER GRAVITY CENTER + + PROPERTY + Property + + + VALUE + Value +