-// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2011 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
+// 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.
+// 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.
//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// SMESH SMESHGUI : GUI for SMESH component
// File : SMESHGUI.cxx
// Author : Nicolas REJNERI, Open CASCADE S.A.S.
#include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
+#ifdef HAVE_FINITE
+#undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
+#endif
#include "Python.h"
// SMESH includes
#include "SMESHGUI.h"
#include "SMESHGUI_Hypotheses.h"
#include "SMESHGUI_Make2DFrom3DOp.h"
#include "SMESHGUI_MakeNodeAtPointDlg.h"
-//#include "SMESHGUI_MeshInfosDlg.h"
#include "SMESHGUI_Measurements.h"
#include "SMESHGUI_MeshInfo.h"
#include "SMESHGUI_MeshOp.h"
#include "SMESHGUI_SewingDlg.h"
#include "SMESHGUI_SingleEditDlg.h"
#include "SMESHGUI_SmoothingDlg.h"
-//#include "SMESHGUI_StandardMeshInfosDlg.h"
#include "SMESHGUI_SymmetryDlg.h"
#include "SMESHGUI_TranslationDlg.h"
#include "SMESHGUI_ScaleDlg.h"
#include "SMESHGUI_TransparencyDlg.h"
-//#include "SMESHGUI_WhatIsDlg.h"
#include "SMESHGUI_DuplicateNodesDlg.h"
#include "SMESHGUI_CopyMeshDlg.h"
#include "SMESHGUI_VTKUtils.h"
#include "SMESHGUI_HypothesesUtils.h"
+#include <SMESH_version.h>
+
#include <SMESH_Client.hxx>
#include <SMESH_Actor.h>
#include <SMESH_ScalarBarActor.h>
#include <SalomeApp_Study.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_CheckFileDlg.h>
+#include <SalomeApp_DataObject.h>
#include <LightApp_DataOwner.h>
#include <LightApp_Preferences.h>
// Qt includes
// #define INCLUDE_MENUITEM_DEF // VSR commented ????????
+#include <QApplication>
#include <QMenu>
#include <QTextStream>
else if ( theCommandID == 111 ) {
filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" );
}
- else if ( theCommandID == 140 ) {
+ else if ( theCommandID == 115 ) {
filter.append( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)" );
}
+ else if ( theCommandID == 116 ) {
+ filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
+ }
+ else if ( theCommandID == 117 ) {
+ filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
+ filter.append( QObject::tr( "All files (*)" ) );
+ }
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
QStringList errors;
+ QStringList anEntryList;
bool isEmpty = false;
for ( QStringList::ConstIterator it = filenames.begin(); it != filenames.end(); ++it ) {
QString filename = *it;
}
break;
}
- case 140:
+ case 115:
{
// STL format
aMeshes->length( 1 );
}
break;
}
+ case 116:
+ {
+ // CGNS format
+ SMESH::DriverMED_ReadStatus res;
+ aMeshes = theComponentMesh->CreateMeshesFromCGNS( filename.toLatin1().constData(), res );
+ if ( res != SMESH::DRS_OK ) {
+ errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
+ arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
+ }
+ break;
+ }
+ case 117:
+ {
+ // SAUV format
+ SMESH::DriverMED_ReadStatus res;
+ aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res );
+ if ( res != SMESH::DRS_OK ) {
+ errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
+ arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
+ }
+ break;
+ }
}
}
catch ( const SALOME::SALOME_Exception& S_ex ) {
if ( theCommandID == 112 ) // mesh names aren't taken from the file for UNV import
SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() );
+ anEntryList.append( aMeshSO->GetID().c_str() );
+
#ifdef WITHGENERICOBJ
// obj has been published in study. Its refcount has been incremented.
// It is safe to decrement its refcount
// update Object browser
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+ // browse to the published meshes
+ if( LightApp_Application* anApp =
+ dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+ anApp->browseObjects( anEntryList );
+
// show Error message box if there were errors
if ( errors.count() > 0 ) {
SUIT_MessageBox::critical( SMESHGUI::desktop(),
}
}
+ //================================================================================
+ /*!
+ * \brief Export selected meshes or groups into a file
+ */
+ //================================================================================
+
void ExportMeshToFile( int theCommandID )
{
LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
if( aSel )
aSel->selectedObjects( selected );
+ const bool isMED = ( theCommandID == 122 || theCommandID == 125 );
+ const bool isDAT = ( theCommandID == 121 || theCommandID == 124 );
+ const bool isUNV = ( theCommandID == 123 || theCommandID == 126 );
+ const bool isSTL = ( theCommandID == 140 || theCommandID == 141 );
+ const bool isCGNS= ( theCommandID == 142 || theCommandID == 143 );
+ const bool isSAUV= ( theCommandID == 144 || theCommandID == 145 );
+
// actually, the following condition can't be met (added for insurance)
if( selected.Extent() == 0 ||
- ( selected.Extent() > 1 && theCommandID != 122 && theCommandID != 125 ) )
+ ( selected.Extent() > 1 && !isMED && !isSTL ))
return;
+ // get mesh object from selection and check duplication of their names
bool hasDuplicatedMeshNames = false;
- QList< QPair< SMESH::SMESH_Mesh_var, QString > > aMeshList;
- QList< QPair< SMESH::SMESH_Mesh_var, QString > >::iterator aMeshIter;
+ QList< QPair< SMESH::SMESH_IDSource_var, QString > > aMeshList;
+ QList< QPair< SMESH::SMESH_IDSource_var, QString > >::iterator aMeshIter;
SALOME_ListIteratorOfListIO It( selected );
- for( ; It.More(); It.Next() ) {
+ for( ; It.More(); It.Next() )
+ {
Handle(SALOME_InteractiveObject) anIObject = It.Value();
- SMESH::SMESH_Mesh_var aMeshItem = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>( anIObject );
+ SMESH::SMESH_IDSource_var aMeshItem = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(anIObject);
if ( aMeshItem->_is_nil() ) {
SUIT_MessageBox::warning( SMESHGUI::desktop(),
QObject::tr( "SMESH_WRN_WARNING" ),
QString aMeshName = anIObject->getName();
- // check for duplications
- for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
- if( aMeshName == (*aMeshIter).second ) {
- hasDuplicatedMeshNames = true;
- break;
+ // check for name duplications
+ if ( !hasDuplicatedMeshNames )
+ for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
+ if( aMeshName == (*aMeshIter).second ) {
+ hasDuplicatedMeshNames = true;
+ break;
+ }
}
- }
- aMeshList.append( QPair< SMESH::SMESH_Mesh_var, QString >( aMeshItem, aMeshName ) );
+ aMeshList.append( QPair< SMESH::SMESH_IDSource_var, QString >( aMeshItem, aMeshName ) );
}
- if( hasDuplicatedMeshNames ) {
+ if( hasDuplicatedMeshNames && isMED ) {
int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
QObject::tr("SMESH_WRN_WARNING"),
QObject::tr("SMESH_EXPORT_MED_DUPLICATED_MESH_NAMES"),
}
aMeshIter = aMeshList.begin();
- SMESH::SMESH_Mesh_var aMesh = (*aMeshIter).first;
+ SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first;
+ SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh();
QString aMeshName = (*aMeshIter).second;
- QList<SALOMEDS::Color> aReservedColors;
-
- QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH");
- QMap<QString, SMESH::MED_VERSION> aFilterMap;
- QMap<QString, int> aFilterMapSTL;
- switch ( theCommandID ) {
- case 125:
- case 122:
- {
- for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
- SMESH::SMESH_Mesh_var aMeshItem = (*aMeshIter).first;
- if (aMeshItem->HasDuplicatedGroupNamesMED()) {
- int aRet = SUIT_MessageBox::warning
- (SMESHGUI::desktop(),
- QObject::tr("SMESH_WRN_WARNING"),
- QObject::tr("SMESH_EXPORT_MED_DUPLICATED_GRP").arg((*aMeshIter).second),
- QObject::tr("SMESH_BUT_YES"),
- QObject::tr("SMESH_BUT_NO"), 0, 1);
- if (aRet != 0)
- return;
- }
- }
- // PAL18696
- QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
- QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
- aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
- aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
- }
- break;
- case 124:
- case 121:
- aFilter = QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)";
- break;
- case 126:
- case 123:
- {
- if (aMesh->NbPyramids()) {
+ if ( isMED || isCGNS || isSAUV )
+ {
+ // check for equal group names within each mesh
+ for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
+ SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
+ if ( !aMeshItem->_is_nil() && aMeshItem->HasDuplicatedGroupNamesMED()) {
int aRet = SUIT_MessageBox::warning
(SMESHGUI::desktop(),
QObject::tr("SMESH_WRN_WARNING"),
- QObject::tr("SMESH_EXPORT_UNV").arg(aMeshName),
+ QObject::tr("SMESH_EXPORT_MED_DUPLICATED_GRP").arg((*aMeshIter).second),
QObject::tr("SMESH_BUT_YES"),
QObject::tr("SMESH_BUT_NO"), 0, 1);
if (aRet != 0)
return;
}
- aFilter = QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)";
}
- break;
- case 141:
- {
- // export STL
- /*
- there must be check on others mesh elements not equal triangles
- */
-// if (aMesh->NbTriangles() < 1) {
-// SUIT_MessageBox::warning
-// (SMESHGUI::desktop(),
-// QObject::tr("SMESH_WRN_WARNING"),
-// QObject::tr("SMESH_EXPORT_STL1").arg(aMeshName));
-// return;
-// }
-// if (!(aMesh->NbElements() - aMesh->NbTriangles())) {
-// int aRet = SUIT_MessageBox::warning
-// (SMESHGUI::desktop(),
-// QObject::tr("SMESH_WRN_WARNING"),
-// QObject::tr("SMESH_EXPORT_STL2").arg(aMeshName),
-// QObject::tr("SMESH_BUT_YES"),
-// QObject::tr("SMESH_BUT_NO"), 0, 1);
-// if (aRet != 0)
-// return;
-// }
-
- aFilterMapSTL.insert( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)", 1 ); // 1 - ASCII mode
- aFilterMapSTL.insert( QObject::tr( "STL_BIN_FILES_FILTER" ) + " (*.stl)", 0 ); // 0 - Binary mode
+ }
+ else if ( isUNV )
+ {
+ // warn the user about presence of not supported elements
+ SMESH::long_array_var nbElems = aMeshOrGroup->GetMeshInfo();
+ int nbNotSupported = ( nbElems[ SMESH::Entity_Pyramid ] +
+ nbElems[ SMESH::Entity_Quad_Pyramid ] +
+ nbElems[ SMESH::Entity_Hexagonal_Prism ] +
+ nbElems[ SMESH::Entity_Polygon ] +
+ nbElems[ SMESH::Entity_Polyhedra ] );
+ if ( nbNotSupported > 0 ) {
+ int aRet = SUIT_MessageBox::warning
+ (SMESHGUI::desktop(),
+ QObject::tr("SMESH_WRN_WARNING"),
+ QObject::tr("SMESH_EXPORT_UNV").arg(aMeshName),
+ QObject::tr("SMESH_BUT_YES"),
+ QObject::tr("SMESH_BUT_NO"), 0, 1);
+ if (aRet != 0)
+ return;
}
- break;
- default:
- return;
}
+ // Get parameters of export operation
+
QString aFilename;
SMESH::MED_VERSION aFormat;
- // Init the parameter with the default value
+ // Init the parameters with the default values
bool aIsASCII_STL = true;
bool toCreateGroups = false;
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
bool toOverwrite = true;
+ QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH");
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
anInitialPath = QDir::currentPath();
- if ( theCommandID != 122 && theCommandID != 125 && theCommandID != 141) {
+ if ( isUNV || isDAT )
+ {
+ if ( isUNV )
+ aFilter = QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)";
+ else
+ aFilter = QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)";
if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath();
- aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(), anInitialPath + QString("/") + aMeshName,
+ aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(),
+ anInitialPath + QString("/") + aMeshName,
aFilter, aTitle, false);
}
- else if(theCommandID == 141) { // Export to STL
+ else if ( isCGNS )// Export to CGNS
+ {
+ SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true );
+ fd->setWindowTitle( aTitle );
+ fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
+ if ( !anInitialPath.isEmpty() )
+ fd->setDirectory( anInitialPath );
+ fd->selectFile(aMeshName);
+ SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd );
+ fd->setValidator( fv );
+
+ if ( fd->exec() )
+ aFilename = fd->selectedFile();
+ toOverwrite = fv->isOverwrite();
+
+ delete fd;
+ }
+ else if ( isSTL ) // Export to STL
+ {
+ QMap<QString, int> aFilterMap;
+ aFilterMap.insert( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)", 1 );
+ aFilterMap.insert( QObject::tr( "STL_BIN_FILES_FILTER" ) + " (*.stl)", 0 );
+
QStringList filters;
- QMap<QString, int>::const_iterator it = aFilterMapSTL.begin();
- for ( ; it != aFilterMapSTL.end(); ++it )
+ QMap<QString, int>::const_iterator it = aFilterMap.begin();
+ for ( ; it != aFilterMap.end(); ++it )
filters.push_back( it.key() );
SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true );
while (!is_ok) {
if ( fd->exec() )
aFilename = fd->selectedFile();
- aIsASCII_STL = (aFilterMapSTL[fd->selectedNameFilter()]) == 1 ? true: false;
+ aIsASCII_STL = (aFilterMap[fd->selectedNameFilter()]) == 1 ? true: false;
is_ok = true;
}
delete fd;
}
- else { // Export to MED
+ else if ( isMED || isSAUV ) // Export to MED or SAUV
+ {
+ QMap<QString, SMESH::MED_VERSION> aFilterMap;
+ //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
+ if ( isMED ) {
+ QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
+ //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
+ aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
+ }
+ else { // isSAUV
+ aFilterMap.insert("All files (*)", SMESH::MED_V2_1 );
+ aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 );
+ aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 );
+ }
+
QStringList filters;
QString aDefaultFilter;
QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin();
aDefaultFilter = it.key();
}
- //SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true );
SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg
( SMESHGUI::desktop(), false, QObject::tr("SMESH_AUTO_GROUPS"), true, true );
fd->setWindowTitle( aTitle );
fd->setNameFilters( filters );
- //fd->setSelectedNameFilter( QObject::tr("MED 2.2 (*.med)") );
fd->selectNameFilter(aDefaultFilter);
fd->SetChecked(toCreateGroups);
if ( !anInitialPath.isEmpty() )
toOverwrite = fv->isOverwrite();
is_ok = true;
if ( !aFilename.isEmpty() ) {
- for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
- SMESH::SMESH_Mesh_var aMeshItem = (*aMeshIter).first;
- if( (aMeshItem->NbPolygons()>0 || aMeshItem->NbPolyhedrons()>0)
- && aFormat==SMESH::MED_V2_1) {
- int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
- QObject::tr("SMESH_WRN_WARNING"),
- QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second),
- QObject::tr("SMESH_BUT_YES"),
- QObject::tr("SMESH_BUT_NO"), 0, 1);
- if (aRet != 0) {
- is_ok = false;
- break;
+ // med-2.1 does not support poly elements
+ if ( aFormat==SMESH::MED_V2_1 )
+ for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
+ SMESH::SMESH_IDSource_var aMeshItem = (*aMeshIter).first;
+ SMESH::long_array_var nbElems = aMeshItem->GetMeshInfo();
+ if ( nbElems[ SMESH::Entity_Polygon ] + nbElems[ SMESH::Entity_Quad_Polygon ] +
+ nbElems[ SMESH::Entity_Polyhedra ] + nbElems[ SMESH::Entity_Quad_Polyhedra ])
+ {
+ int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
+ QObject::tr("SMESH_WRN_WARNING"),
+ QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second),
+ QObject::tr("SMESH_BUT_YES"),
+ QObject::tr("SMESH_BUT_NO"), 0, 1);
+ if (aRet != 0) {
+ is_ok = false;
+ break;
+ }
}
}
- }
if( !toOverwrite ) {
+ // can't append to an existing using other format
SMESH::MED_VERSION aVersion = SMESH::MED_V2_1;
bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toLatin1().constData(), aVersion );
if( !isVersionOk || aVersion != aFormat ) {
}
}
}
-
if( !aMeshNamesCollisionList.isEmpty() ) {
QString aMeshNamesCollisionString = aMeshNamesCollisionList.join( ", " );
int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
toCreateGroups = fd->IsChecked();
delete fd;
}
+ else
+ {
+ return;
+ }
+
+ // Perform export
+
if ( !aFilename.isEmpty() ) {
// Check whether the file already exists and delete it if yes
QFile aFile( aFilename );
SUIT_OverrideCursor wc;
try {
- bool Renumber = false;
- // PAL 14172 : Check of we have to renumber or not from the preferences before export
- if (resMgr)
- Renumber= resMgr->booleanValue("SMESH","renumbering");
- if (Renumber){
- SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
- aMeshEditor->RenumberNodes();
- aMeshEditor->RenumberElements();
- if ( SMESHGUI::automaticUpdate() )
- SMESH::UpdateView();
+ // Renumbering is not needed since SMDS redesign in V6.2.0 (Nov 2010)
+// bool Renumber = false;
+// // PAL 14172 : Check of we have to renumber or not from the preferences before export
+// if (resMgr)
+// Renumber= resMgr->booleanValue("SMESH","renumbering");
+// if (Renumber){
+// SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+// aMeshEditor->RenumberNodes();
+// aMeshEditor->RenumberElements();
+// if ( SMESHGUI::automaticUpdate() )
+// SMESH::UpdateView();
+// }
+ if ( isMED )
+ {
+ aMeshIter = aMeshList.begin();
+ for( int aMeshIndex = 0; aMeshIter != aMeshList.end(); aMeshIter++, aMeshIndex++ )
+ {
+ SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first;
+ SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh();
+ if ( aMeshOrGroup->_is_equivalent( aMeshItem ))
+ aMeshItem->ExportToMEDX( aFilename.toLatin1().data(), toCreateGroups,
+ aFormat, toOverwrite && aMeshIndex == 0 );
+ else
+ aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toLatin1().data(), toCreateGroups,
+ aFormat, toOverwrite && aMeshIndex == 0 );
+ }
}
- switch ( theCommandID ) {
- case 125:
- case 122: {
- int aMeshIndex = 0;
- for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++, aMeshIndex++ ) {
- SMESH::SMESH_Mesh_var aMeshItem = (*aMeshIter).first;
- if( !aMeshItem->_is_nil() )
- aMeshItem->ExportToMEDX( aFilename.toLatin1().data(), toCreateGroups, aFormat, toOverwrite && aMeshIndex == 0 );
- }
+ else if ( isSAUV )
+ {
+ for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ )
+ {
+ SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
+ if( !aMeshItem->_is_nil() )
+ aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups );
+ }
+ }
+ else if ( isDAT )
+ {
+ if ( aMeshOrGroup->_is_equivalent( aMesh ))
+ aMesh->ExportDAT( aFilename.toLatin1().data() );
+ else
+ aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toLatin1().data() );
+ }
+ else if ( isUNV )
+ {
+ if ( aMeshOrGroup->_is_equivalent( aMesh ))
+ aMesh->ExportUNV( aFilename.toLatin1().data() );
+ else
+ aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toLatin1().data() );
+ }
+ else if ( isSTL )
+ {
+ if ( aMeshOrGroup->_is_equivalent( aMesh ))
+ aMesh->ExportSTL( aFilename.toLatin1().data(), aIsASCII_STL );
+ else
+ aMesh->ExportPartToSTL( aMeshOrGroup, aFilename.toLatin1().data(), aIsASCII_STL );
+ }
+ else if ( isCGNS )
+ {
+ aMeshIter = aMeshList.begin();
+ for( int aMeshIndex = 0; aMeshIter != aMeshList.end(); aMeshIter++, aMeshIndex++ )
+ {
+ SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first;
+ SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh();
+ aMeshItem->ExportCGNS( aMeshOrGroup,
+ aFilename.toLatin1().data(),
+ toOverwrite && aMeshIndex == 0 );
}
- break;
- case 124:
- case 121:
- aMesh->ExportDAT( aFilename.toLatin1().data() );
- break;
- case 126:
- case 123:
- aMesh->ExportUNV( aFilename.toLatin1().data() );
- break;
- case 141:
- aMesh->ExportSTL( aFilename.toLatin1().data(), aIsASCII_STL );
- break;
- default:
- break;
}
}
catch (const SALOME::SALOME_Exception& S_ex){
anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B );
else if( aGroupObject->GetType() == SMESH::ELEM0D )
anActor->Set0DColor( aColor.R, aColor.G, aColor.B );
- else
- anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
+ else {
+ QColor c;
+ int delta;
+ SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
+ anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta );
+ }
}
}
}
type = QObject::tr( "OVER_CONSTRAINED_VOLUME" );
else if ( dynamic_cast< SMESH::Controls::OverConstrainedFace* >( f.get() ) )
type = QObject::tr( "OVER_CONSTRAINED_FACE" );
+ else if ( dynamic_cast< SMESH::Controls::CoincidentNodes* >( f.get() ) )
+ type = QObject::tr( "EQUAL_NODE" );
+ else if ( dynamic_cast< SMESH::Controls::CoincidentElements1D* >( f.get() ) )
+ type = QObject::tr( "EQUAL_EDGE" );
+ else if ( dynamic_cast< SMESH::Controls::CoincidentElements2D* >( f.get() ) )
+ type = QObject::tr( "EQUAL_FACE" );
+ else if ( dynamic_cast< SMESH::Controls::CoincidentElements3D* >( f.get() ) )
+ type = QObject::tr( "EQUAL_VOLUME" );
return type;
}
return;
}
case 1132:{
- QColor c, e, b, n, c0D, o;
+ QColor c, e, b, n, c0D, o, outl, selection, preselection;
+ int delta;
int size0D = 0;
int Edgewidth = 0;
vtkFloatingPointType Shrink = 0.0;
if(IObject->hasEntry()){
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
vtkFloatingPointType color[3];
- anActor->GetSufaceColor(color[0], color[1], color[2]);
+ anActor->GetSufaceColor(color[0], color[1], color[2],delta);
int c0 = int (color[0] * 255);
int c1 = int (color[1] * 255);
int c2 = int (color[2] * 255);
c2 = int (edgecolor[2] * 255);
e.setRgb(c0, c1, c2);
- vtkFloatingPointType backfacecolor[3];
- anActor->GetBackSufaceColor(backfacecolor[0], backfacecolor[1], backfacecolor[2]);
- c0 = int (backfacecolor[0] * 255);
- c1 = int (backfacecolor[1] * 255);
- c2 = int (backfacecolor[2] * 255);
- b.setRgb(c0, c1, c2);
-
vtkFloatingPointType nodecolor[3];
anActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]);
c0 = int (nodecolor[0] * 255);
c2 = int (color0D[2] * 255);
c0D.setRgb(c0, c1, c2);
+ vtkFloatingPointType outlineColor[3];
+ anActor->GetOutlineColor(outlineColor[0], outlineColor[1], outlineColor[2]);
+ c0 = int (outlineColor[0] * 255);
+ c1 = int (outlineColor[1] * 255);
+ c2 = int (outlineColor[2] * 255);
+ outl.setRgb(c0, c1, c2);
+
+ vtkFloatingPointType hColor[3];
+ anActor->GetHighlightColor(hColor[0], hColor[1], hColor[2]);
+ c0 = int (hColor[0] * 255);
+ c1 = int (hColor[1] * 255);
+ c2 = int (hColor[2] * 255);
+ selection.setRgb(c0, c1, c2);
+
+ vtkFloatingPointType phColor[3];
+ anActor->GetPreHighlightColor(phColor[0], phColor[1], phColor[2]);
+ c0 = int (phColor[0] * 255);
+ c1 = int (phColor[1] * 255);
+ c2 = int (phColor[2] * 255);
+ preselection.setRgb(c0, c1, c2);
+
size0D = (int)anActor->Get0DSize();
if(size0D == 0)
size0D = 1;
aDlg->SetColor(1, c);
aDlg->SetColor(2, e);
aDlg->SetColor(3, n);
- aDlg->SetColor(4, b);
+ aDlg->SetColor(4, outl);
+ aDlg->SetDeltaBrightness(delta);
aDlg->SetColor(5, c0D);
aDlg->SetColor(6, o);
aDlg->SetIntValue(1, Edgewidth);
aDlg->SetIntValue(3, size0D);
aDlg->SetDoubleValue(1, faces_orientation_scale);
aDlg->SetBooleanValue(1, faces_orientation_3dvectors);
+ aDlg->SetColor(7, selection);
+ aDlg->SetColor(8, preselection);
aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] );
QColor color = aDlg->GetColor(1);
QColor edgecolor = aDlg->GetColor(2);
QColor nodecolor = aDlg->GetColor(3);
- QColor backfacecolor = aDlg->GetColor(4);
+ QColor outlinecolor = aDlg->GetColor(4);
QColor color0D = aDlg->GetColor(5);
QColor faces_orientation_color = aDlg->GetColor(6);
+ QColor selectioncolor = aDlg->GetColor(7);
+ QColor preSelectioncolor = aDlg->GetColor(8);
+ int delta = aDlg->GetDeltaBrightness();
/* Point marker */
theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap();
/* actor color and backface color */
anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255.,
vtkFloatingPointType (color.green()) / 255.,
- vtkFloatingPointType (color.blue()) / 255.);
- anActor->SetBackSufaceColor(vtkFloatingPointType (backfacecolor.red()) / 255.,
- vtkFloatingPointType (backfacecolor.green()) / 255.,
- vtkFloatingPointType (backfacecolor.blue()) / 255.);
-
+ vtkFloatingPointType (color.blue()) / 255.,
+ delta);
/* edge color */
anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255.,
vtkFloatingPointType (edgecolor.green()) / 255.,
vtkFloatingPointType (edgecolor.blue()) / 255.);
+ /* edge outline */
+ anActor->SetOutlineColor(vtkFloatingPointType (outlinecolor.red()) / 255.,
+ vtkFloatingPointType (outlinecolor.green()) / 255.,
+ vtkFloatingPointType (outlinecolor.blue()) / 255.);
+
+ /* selection */
+ anActor->SetHighlightColor(vtkFloatingPointType (selectioncolor.red()) / 255.,
+ vtkFloatingPointType (selectioncolor.green()) / 255.,
+ vtkFloatingPointType (selectioncolor.blue()) / 255.);
+ /* pre-selection */
+ anActor->SetPreHighlightColor(vtkFloatingPointType (preSelectioncolor.red()) / 255.,
+ vtkFloatingPointType (preSelectioncolor.green()) / 255.,
+ vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
+
/* Shrink factor and size edges */
anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.);
Handle(SALOME_InteractiveObject) anIO = selected.First();
if(!anIO.IsNull()){
SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
- if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())){
+ if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) {
switch ( theCommandID ){
case 6001:
aControl = SMESH_Actor::eLength;
case 6027:
aControl = SMESH_Actor::eOverConstrainedFace;
break;
+ case 6028:
+ aControl = SMESH_Actor::eCoincidentNodes;
+ break;
+ case 6029:
+ aControl = SMESH_Actor::eCoincidentElems1D;
+ break;
+ case 6030:
+ aControl = SMESH_Actor:: eCoincidentElems2D;
+ break;
+ case 6031:
+ aControl = SMESH_Actor::eCoincidentElems3D;
+ break;
}
+
anActor->SetControlMode(aControl);
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
SMESH::RepaintCurrentView();
{
return new SMESHGUI();
}
+
+ SMESHGUI_EXPORT char* getModuleVersion() {
+ return (char*)SMESH_VERSION_STR;
+ }
}
SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil();
myComponentSMESH->SetBoundaryBoxSegmentation( nbSeg );
nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg );
+
+ const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" };
+ for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i )
+ if ( aResourceMgr->hasValue( "SMESH", options[i] ))
+ {
+ QString val = aResourceMgr->stringValue( "SMESH", options[i] );
+ myComponentSMESH->SetOption( options[i], val.toLatin1().constData() );
+ }
}
myActiveDialogBox = 0;
OnEditDelete();
break;
- case 113: // IMPORT
+ case 116:
+ case 115:
+ case 117:
+ case 113:
case 112:
- case 111:
- case 140:
+ case 111: // IMPORT
{
if(checkLock(aStudy)) break;
::ImportMeshesFromFile(GetSMESHGen(),theCommandID);
case 124:
case 125:
case 126:
+ case 140:
case 141:
+ case 142:
+ case 143:
+ case 144:
+ case 145:
{
::ExportMeshToFile(theCommandID);
break;
case 1134: // Clipping
case 1133: // Tranparency
- case 1132: // Colors / Size
+ case 1132: // Display preferences (colors, shrink size, line width, ...)
// Display Mode
case 215: // Nodes
SMESH::long_array_var aVolumes = aSubMesh->GetElementsByType(SMESH::VOLUME);
// create group for each type o elements
QString aName = IObject->getName();
+ QStringList anEntryList;
if (aNodes->length() > 0) {
SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::NODE, aName + "_Nodes");
aGroup->Add(aNodes.inout());
+ if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( aGroup ) )
+ anEntryList.append( aSObject->GetID().c_str() );
}
if (aEdges->length() > 0) {
SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::EDGE, aName + "_Edges");
aGroup->Add(aEdges.inout());
+ if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( aGroup ) )
+ anEntryList.append( aSObject->GetID().c_str() );
}
if (aFaces->length() > 0) {
SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::FACE, aName + "_Faces");
aGroup->Add(aFaces.inout());
+ if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( aGroup ) )
+ anEntryList.append( aSObject->GetID().c_str() );
}
if (aVolumes->length() > 0) {
SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::VOLUME, aName + "_Volumes");
aGroup->Add(aVolumes.inout());
+ if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( aGroup ) )
+ anEntryList.append( aSObject->GetID().c_str() );
}
updateObjBrowser();
-
+ anApp->browseObjects( anEntryList );
}
catch(const SALOME::SALOME_Exception & S_ex){
SalomeApp_Tools::QtCatchCorbaException(S_ex);
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, aGroup, true );
aDlg->show();
}
+ else
+ {
+ SMESH::SMESH_GroupOnFilter_var aGroup =
+ SMESH::IObjectToInterface<SMESH::SMESH_GroupOnFilter>(It.Value());
+ if (!aGroup->_is_nil()) {
+ SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, aGroup, true );
+ aDlg->show();
+ }
+ }
}
break;
}
}
break;
}
- /*
- case 902: // STANDARD MESH INFOS
- {
- EmitSignalDeactivateDialog();
- LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
- SALOME_ListIO selected;
- if( aSel )
- aSel->selectedObjects( selected );
-
- if ( selected.Extent() > 1 ) { // a dlg for each IO
- SALOME_ListIO IOs;
- SALOME_ListIteratorOfListIO It (selected);
- for ( ; It.More(); It.Next() ) {
- IOs.Clear();
- IOs.Append( It.Value() );
- aSel->setSelectedObjects( IOs );
- ( new SMESHGUI_StandardMeshInfosDlg( this ) )->show();
- }
- // restore selection
- aSel->setSelectedObjects( selected );
- }
- else
- ( new SMESHGUI_StandardMeshInfosDlg( this ) )->show();
- break;
- }
- case 903: // WHAT IS
- {
- EmitSignalDeactivateDialog();
- ( new SMESHGUI_WhatIsDlg( this ) )->show();
- break;
- }
- */
case 904: // FIND ELEM
{
}
break;
}
-
- case 1101: // RENAME
- {
- if ( checkLock( aStudy ) )
- break;
-
- LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
- SALOME_ListIO selected;
- if( aSel )
- aSel->selectedObjects( selected );
-
- bool isAny = false; // is there any appropriate object selected
-
- SALOME_ListIteratorOfListIO It( selected );
- for ( ; It.More(); It.Next() )
- {
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- _PTR(SObject) obj = aStudy->FindObjectID( IObject->getEntry() );
- _PTR(GenericAttribute) anAttr;
- _PTR(AttributeName) aName;
- if ( obj )
- {
- if ( obj->FindAttribute(anAttr, "AttributeName") )
- {
- aName = anAttr;
- QString newName = QString(aName->Value().c_str());
-
- // check type to prevent renaming of inappropriate objects
- int aType = SMESHGUI_Selection::type(IObject->getEntry(), aStudy);
- if (aType == MESH || aType == GROUP ||
- aType == SUBMESH || aType == SUBMESH_COMPOUND ||
- aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
- aType == SUBMESH_EDGE || aType == SUBMESH_VERTEX ||
- aType == HYPOTHESIS || aType == ALGORITHM)
- {
- isAny = true;
- newName = LightApp_NameDlg::getName(desktop(), newName);
- if ( !newName.isEmpty() )
- {
- SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), newName.toLatin1().data());
-
- // update name of group object and its actor
- SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
- if( !aGroupObject->_is_nil() )
- {
- aGroupObject->SetName( newName.toLatin1().data() );
- if ( SMESH_Actor *anActor = SMESH::FindActorByEntry( IObject->getEntry() ) )
- anActor->setName( newName.toLatin1().data() );
- }
-
- updateObjBrowser();
- }
- }
- }
- }
- } // for
-
- if (!isAny) {
- SUIT_MessageBox::warning(desktop(),
- QObject::tr("SMESH_WRN_WARNING"),
- QObject::tr("SMESH_WRN_NO_APPROPRIATE_SELECTION"));
- }
- break;
- }
-
case 1102: // REMOVE HYPOTHESIS / ALGORITHMS
{
if(checkLock(aStudy)) break;
}
case 4009: // ELEM0D
- case 4010: // GEOM::EDGE
+ case 4010: // EDGE
case 4021: // TRIANGLE
case 4022: // QUAD
case 4023: // POLYGON
case 4031: // TETRA
case 4032: // HEXA
+ case 4133: // PENTA
+ case 4134: // PYRAMID
+ case 4135: // OCTA12
{
if(checkLock(aStudy)) break;
if ( vtkwnd ) {
EmitSignalDeactivateDialog();
- SMDSAbs_ElementType type = SMDSAbs_Edge;
- int nbNodes = 2;
+ SMDSAbs_EntityType type = SMDSEntity_Edge;
switch (theCommandID) {
- case 4009: // ELEM0D
- type = SMDSAbs_0DElement; nbNodes = 1; break;
- case 4021: // TRIANGLE
- type = SMDSAbs_Face; nbNodes = 3; break;
- case 4022: // QUAD
- type = SMDSAbs_Face; nbNodes = 4; break;
- case 4031: // TETRA
- type = SMDSAbs_Volume; nbNodes = 4; break;
- case 4023: // POLYGON
- type = SMDSAbs_Face; nbNodes = 5; break; // 5 - identificator for POLYGON
- case 4032: // HEXA
- type = SMDSAbs_Volume; nbNodes = 8; break;
- case 4033: // POLYHEDRE
- type = SMDSAbs_Volume; nbNodes = 9; break; // 9 - identificator for POLYHEDRE
+ case 4009:
+ type = SMDSEntity_0D; break;
+ case 4021:
+ type = SMDSEntity_Triangle; break;
+ case 4022:
+ type = SMDSEntity_Quadrangle; break;
+ case 4031:
+ type = SMDSEntity_Tetra; break;
+ case 4023:
+ type = SMDSEntity_Polygon; break;
+ case 4032:
+ type = SMDSEntity_Hexa; break;
+ case 4133:
+ type = SMDSEntity_Penta; break;
+ case 4134:
+ type = SMDSEntity_Pyramid; break;
+ case 4135:
+ type = SMDSEntity_Hexagonal_Prism; break;
default:;
}
- ( new SMESHGUI_AddMeshElementDlg( this, type, nbNodes ) )->show();
+ ( new SMESHGUI_AddMeshElementDlg( this, type ) )->show();
}
else {
SUIT_MessageBox::warning(desktop(),
case 4034: // QUADRATIC EDGE
case 4035: // QUADRATIC TRIANGLE
case 4036: // QUADRATIC QUADRANGLE
+ case 4136: // BIQUADRATIC QUADRANGLE
case 4037: // QUADRATIC TETRAHEDRON
case 4038: // QUADRATIC PYRAMID
case 4039: // QUADRATIC PENTAHEDRON
case 4040: // QUADRATIC HEXAHEDRON
+ case 4140: // TRIQUADRATIC HEXAHEDRON
{
if(checkLock(aStudy)) break;
if ( vtkwnd ) {
EmitSignalDeactivateDialog();
- int type;
+ SMDSAbs_EntityType type;
switch (theCommandID) {
case 4034:
- type = QUAD_EDGE; break;
+ type = SMDSEntity_Quad_Edge; break;
case 4035:
- type = QUAD_TRIANGLE; break;
+ type = SMDSEntity_Quad_Triangle; break;
case 4036:
- type = QUAD_QUADRANGLE; break;
+ type = SMDSEntity_Quad_Quadrangle; break;
+ case 4136:
+ type = SMDSEntity_BiQuad_Quadrangle; break;
case 4037:
- type = QUAD_TETRAHEDRON; break;
+ type = SMDSEntity_Quad_Tetra; break;
case 4038:
- type = QUAD_PYRAMID; break;
+ type = SMDSEntity_Quad_Pyramid; break;
case 4039:
- type = QUAD_PENTAHEDRON; break;
+ type = SMDSEntity_Quad_Penta; break;
case 4040:
- type = QUAD_HEXAHEDRON;
+ type = SMDSEntity_Quad_Hexa;
+ case 4140:
+ type = SMDSEntity_TriQuad_Hexa;
break;
default:;
}
}
catch (const SALOME::SALOME_Exception& S_ex) {
SalomeApp_Tools::QtCatchCorbaException(S_ex);
- }
+ }
catch (...) {
}
}
case 6025:
case 6026:
case 6027:
+ case 6028:
+ case 6029:
+ case 6030:
+ case 6031:
if ( vtkwnd ) {
LightApp_SelectionMgr* mgr = selectionMgr();
// function : createSMESHAction
// purpose :
//=======================================================================
-void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id,
+void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id,
const int key, const bool toggle, const QString& shortcutAction )
{
QIcon icon;
menu = tr( QString( "MEN_%1" ).arg( po_id ).toLatin1().data() ),
status_bar = tr( QString( "STB_%1" ).arg( po_id ).toLatin1().data() );
- createAction( id, tooltip, icon, menu, status_bar, key, parent,
+ createAction( id, tooltip, icon, menu, status_bar, key, parent,
toggle, this, SLOT( OnGUIEvent() ), shortcutAction );
}
createSMESHAction( 112, "UNV", "", (Qt::CTRL+Qt::Key_U) );
createSMESHAction( 113, "MED", "", (Qt::CTRL+Qt::Key_M) );
createSMESHAction( 114, "NUM" );
+ createSMESHAction( 115, "STL" );
+ createSMESHAction( 116, "CGNS" );
+ createSMESHAction( 117, "SAUV" );
createSMESHAction( 121, "DAT" );
createSMESHAction( 122, "MED" );
createSMESHAction( 123, "UNV" );
createSMESHAction( 140, "STL" );
+ createSMESHAction( 142, "CGNS" );
+ createSMESHAction( 144, "SAUV" );
createSMESHAction( 124, "EXPORT_DAT" );
createSMESHAction( 125, "EXPORT_MED" );
createSMESHAction( 126, "EXPORT_UNV" );
createSMESHAction( 141, "EXPORT_STL" );
+ createSMESHAction( 143, "EXPORT_CGNS" );
+ createSMESHAction( 145, "EXPORT_SAUV" );
createSMESHAction( 150, "FILE_INFO" );
createSMESHAction( 33, "DELETE", "ICON_DELETE", Qt::Key_Delete );
createSMESHAction( 5105, "SEL_FILTER_LIB" );
createSMESHAction( 813, "DEL_GROUP", "ICON_DEL_GROUP" );
createSMESHAction( 900, "ADV_INFO", "ICON_ADV_INFO" );
//createSMESHAction( 902, "STD_INFO", "ICON_STD_INFO" );
- createSMESHAction( 903, "WHAT_IS", "ICON_WHAT_IS" );
+ //createSMESHAction( 903, "WHAT_IS", "ICON_WHAT_IS" ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createSMESHAction( 904, "FIND_ELEM", "ICON_FIND_ELEM" );
createSMESHAction( 6001, "LENGTH", "ICON_LENGTH", 0, true );
createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE", 0, true );
createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true );
- createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
- createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
- createSMESHAction( 6024, "BARE_BORDER_VOLUME","ICON_BARE_BORDER_VOLUME", 0, true );
- createSMESHAction( 6025, "BARE_BORDER_FACE","ICON_BARE_BORDER_FACE", 0, true );
+ createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
+ createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
+ createSMESHAction( 6024, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true );
+ createSMESHAction( 6025, "BARE_BORDER_FACE", "ICON_BARE_BORDER_FACE", 0, true );
createSMESHAction( 6026, "OVER_CONSTRAINED_VOLUME","ICON_OVER_CONSTRAINED_VOLUME", 0, true );
- createSMESHAction( 6027, "OVER_CONSTRAINED_FACE","ICON_OVER_CONSTRAINED_FACE", 0, true );
+ createSMESHAction( 6027, "OVER_CONSTRAINED_FACE", "ICON_OVER_CONSTRAINED_FACE", 0, true );
+ createSMESHAction( 6028, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true );
+ createSMESHAction( 6029, "EQUAL_EDGE", "ICON_EQUAL_EDGE", 0, true );
+ createSMESHAction( 6030, "EQUAL_FACE", "ICON_EQUAL_FACE", 0, true );
+ createSMESHAction( 6031, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true );
createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true );
createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true );
createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true );
createSMESHAction( 4023, "POLYGON", "ICON_DLG_POLYGON" );
createSMESHAction( 4031, "TETRA", "ICON_DLG_TETRAS" );
createSMESHAction( 4032, "HEXA", "ICON_DLG_HEXAS" );
- createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" );
- createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" );
- createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
+ createSMESHAction( 4133, "PENTA", "ICON_DLG_PENTA" );
+ createSMESHAction( 4134, "PYRAMID", "ICON_DLG_PYRAMID" );
+ createSMESHAction( 4135, "OCTA", "ICON_DLG_OCTA" );
+ createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" );
+ createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" );
+ createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" );
+ createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" );
+ createSMESHAction( 4136, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" );
+ createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" );
+ createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" );
+ createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" );
+ createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" );
+ createSMESHAction( 4140, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" );
+ createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" );
+ createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" );
+ createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
createSMESHAction( 4043, "CLEAR_MESH" , "ICON_CLEAR_MESH" );
createSMESHAction( 4051, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" );
createSMESHAction( 4052, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" );
createSMESHAction( 232, "ARC_REPRESENTATION", "", 0, true );
createSMESHAction( 1100, "EDIT_HYPO" );
- createSMESHAction( 1101, "RENAME", "", Qt::Key_F2 );
createSMESHAction( 1102, "UNASSIGN" );
createSMESHAction( 9010, "NUM_NODES", "", 0, true );
createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true );
createSMESHAction( 300, "ERASE" );
createSMESHAction( 301, "DISPLAY" );
createSMESHAction( 302, "DISPLAY_ONLY" );
- createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" );
- createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" );
- createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" );
- createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" );
- createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" );
- createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" );
- createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" );
- createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" );
// ----- create menu --------------
int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ),
createMenu( 111, importId, -1 );
createMenu( 112, importId, -1 );
createMenu( 113, importId, -1 );
- createMenu( 140, importId, -1 );
-
+ createMenu( 115, importId, -1 );
+#ifdef WITH_CGNS
+ createMenu( 116, importId, -1 );
+#endif
+ createMenu( 117, importId, -1 );
createMenu( 121, exportId, -1 );
createMenu( 122, exportId, -1 );
createMenu( 123, exportId, -1 );
- createMenu( 141, exportId, -1 ); // export to stl STL
-
+ createMenu( 140, exportId, -1 ); // export to STL
+#ifdef WITH_CGNS
+ createMenu( 142, exportId, -1 ); // export to CGNS
+#endif
+ createMenu( 144, exportId, -1 ); // export to SAUV
createMenu( separator(), fileId, 10 );
createMenu( 33, editId, -1 );
createMenu( separator(), meshId, -1 );
createMenu( 900, meshId, -1 );
//createMenu( 902, meshId, -1 );
- createMenu( 903, meshId, -1 );
+ //createMenu( 903, meshId, -1 ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createMenu( 904, meshId, -1 );
createMenu( separator(), meshId, -1 );
createMenu( 6005, nodeId, -1 );
+ createMenu( 6028, nodeId, -1 );
createMenu( 6002, edgeId, -1 );
createMenu( 6003, edgeId, -1 );
createMenu( 6001, edgeId, -1 );
createMenu( 6004, edgeId, -1 );
+ createMenu( 6029, edgeId, -1 );
createMenu( 6021, faceId, -1 );
createMenu( 6025, faceId, -1 );
createMenu( 6027, faceId, -1 );
createMenu( 6015, faceId, -1 );
createMenu( 6016, faceId, -1 );
createMenu( 6022, faceId, -1 );
+ createMenu( 6030, faceId, -1 );
createMenu( 6017, volumeId, -1 );
createMenu( 6009, volumeId, -1 );
createMenu( 6023, volumeId, -1 );
createMenu( 6024, volumeId, -1 );
createMenu( 6026, volumeId, -1 );
+ createMenu( 6031, volumeId, -1 );
createMenu( 4000, addId, -1 );
createMenu( 4009, addId, -1 );
createMenu( 4023, addId, -1 );
createMenu( 4031, addId, -1 );
createMenu( 4032, addId, -1 );
+ createMenu( 4133, addId, -1 );
+ createMenu( 4134, addId, -1 );
+ createMenu( 4135, addId, -1 );
createMenu( 4033, addId, -1 );
createMenu( separator(), addId, -1 );
createMenu( 4034, addId, -1 );
createMenu( 4035, addId, -1 );
createMenu( 4036, addId, -1 );
+ createMenu( 4136, addId, -1 );
createMenu( 4037, addId, -1 );
createMenu( 4038, addId, -1 );
createMenu( 4039, addId, -1 );
createMenu( 4040, addId, -1 );
+ createMenu( 4140, addId, -1 );
createMenu( 4041, removeId, -1 );
createMenu( 4042, removeId, -1 );
createTool( separator(), meshTb );
createTool( 900, meshTb );
//createTool( 902, meshTb );
- createTool( 903, meshTb );
+ //createTool( 903, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createTool( 904, meshTb );
createTool( separator(), meshTb );
createTool( 6005, ctrlTb );
+ createTool( 6028, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6002, ctrlTb );
createTool( 6003, ctrlTb );
createTool( 6001, ctrlTb );
createTool( 6004, ctrlTb );
+ createTool( 6029, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6021, ctrlTb );
createTool( 6025, ctrlTb );
createTool( 6015, ctrlTb );
createTool( 6016, ctrlTb );
createTool( 6022, ctrlTb );
+ createTool( 6030, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6017, ctrlTb );
createTool( 6009, ctrlTb );
createTool( 6023, ctrlTb );
createTool( 6024, ctrlTb );
createTool( 6026, ctrlTb );
+ createTool( 6031, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 4000, addRemTb );
createTool( 4023, addRemTb );
createTool( 4031, addRemTb );
createTool( 4032, addRemTb );
+ createTool( 4133, addRemTb );
+ createTool( 4134, addRemTb );
+ createTool( 4135, addRemTb );
createTool( 4033, addRemTb );
createTool( separator(), addRemTb );
createTool( 4034, addRemTb );
createTool( 4035, addRemTb );
createTool( 4036, addRemTb );
+ createTool( 4136, addRemTb );
createTool( 4037, addRemTb );
createTool( 4038, addRemTb );
createTool( 4039, addRemTb );
createTool( 4040, addRemTb );
+ createTool( 4140, addRemTb );
createTool( separator(), addRemTb );
createTool( 4041, addRemTb );
createTool( 4042, addRemTb );
arg( SMESHGUI_Selection::typeName( SUBMESH_COMPOUND ) ).
arg( SMESHGUI_Selection::typeName( SUBMESH ) ),
subMesh = elems,
- mesh_group = mesh + " " + subMesh + " " + group,
+ mesh_part = mesh + " " + subMesh + " " + group,
+ mesh_group = mesh + " " + group,
hyp_alg = hypo + " " + algo;
// popup for object browser
createPopupItem( 150, OB, mesh, "&& selcount=1 && isImported" ); // FILE INFORMATION
createPopupItem( 703, OB, mesh, "&& isComputable"); // CREATE_SUBMESH
- //createPopupItem( 703, OB, subMesh, "&& isComputable" ); // CREATE_SUBMESH
createPopupItem( 704, OB, mesh, "&& isComputable"); // EDIT_MESHSUBMESH
createPopupItem( 704, OB, subMesh, "&& isComputable" ); // EDIT_MESHSUBMESH
createPopupItem( 803, OB, group ); // EDIT_GROUP
- createPopupItem( 815, OB, group, "&& groupType = 'GroupOnGeom'" ); // EDIT_GROUP
+ createPopupItem( 815, OB, group, "&& groupType != 'Group'" ); // EDIT AS STANDALONE
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 701, OB, mesh, "&& isComputable" ); // COMPUTE
createPopupItem( 711, OB, mesh, "&& isComputable && isPreComputable" ); // PRECOMPUTE
createPopupItem( 712, OB, mesh, "&& isComputable" ); // EVALUATE
createPopupItem( 713, OB, mesh, "&& isComputable" ); // MESH ORDER
- createPopupItem( 214, OB, mesh_group ); // UPDATE
- createPopupItem( 900, OB, mesh_group ); // ADV_INFO
- //createPopupItem( 902, OB, mesh ); // STD_INFO
- createPopupItem( 903, OB, mesh_group ); // WHAT_IS
- createPopupItem( 904, OB, mesh ); // FIND_ELEM
+ createPopupItem( 214, OB, mesh_part ); // UPDATE
+ createPopupItem( 900, OB, mesh_part ); // ADV_INFO
+ createPopupItem( 904, OB, mesh_group ); // FIND_ELEM
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 801, OB, mesh ); // CREATE_GROUP
createPopupItem( 806, OB, mesh ); // CREATE_GEO_GROUP
createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 1100, OB, hypo); // EDIT HYPOTHESIS
- createPopupItem( 1102, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS
- createPopupItem( 1101, OB, mesh_group + " " + hyp_alg ); // RENAME
+ createPopupItem( 1102, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 4043, OB, mesh ); // CLEAR_MESH
popupMgr()->insert( separator(), -1, 0 );
- createPopupItem( 417, OB, mesh/*, "&& " + hasElems*/); // convert to quadratic
- createPopupItem( 418, OB, mesh/*, "&& " + hasVolumes*/); // create 2D mesh on 3D
+ createPopupItem( 417, OB, mesh + " " + subMesh ); // convert to quadratic
+ createPopupItem( 418, OB, mesh + " " + group, // create 2D mesh from 3D
+ "&& dim>=2");
popupMgr()->insert( separator(), -1, 0 );
QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc );
QString multiple_non_empty = QString( " && %1>0 && numberOfNodes>0" ).arg( dc );
+ QString only_one_2D = only_one_non_empty + " && dim>1";
- createPopupItem( 125, OB, mesh, multiple_non_empty ); // EXPORT_MED
- createPopupItem( 126, OB, mesh, only_one_non_empty ); // EXPORT_UNV
- createPopupItem( 141, OB, mesh, only_one_non_empty ); // EXPORT_STL
- //createPopupItem( 33, OB, subMesh + " " + group ); // DELETE
- createPopupItem( 33, OB, mesh_group + " " + hyp_alg ); // DELETE
+ createPopupItem( 125, OB, mesh_group, multiple_non_empty ); // EXPORT_MED
+ createPopupItem( 126, OB, mesh_group, only_one_non_empty ); // EXPORT_UNV
+ createPopupItem( 141, OB, mesh_group, only_one_2D ); // EXPORT_STL
+#ifdef WITH_CGNS
+ createPopupItem( 143, OB, mesh_group, multiple_non_empty ); // EXPORT_CGNS
+#endif
+ createPopupItem( 145, OB, mesh_group, multiple_non_empty ); // EXPORT_SAUV
+ createPopupItem( 33, OB, mesh_part + " " + hyp_alg ); // DELETE
popupMgr()->insert( separator(), -1, 0 );
// popup for viewer
createPopupItem( 805, View, elems ); // REMOVE
popupMgr()->insert( separator(), -1, 0 );
- createPopupItem( 214, View, mesh_group ); // UPDATE
- createPopupItem( 900, View, mesh_group ); // ADV_INFO
- //createPopupItem( 902, View, mesh ); // STD_INFO
- createPopupItem( 903, View, mesh_group ); // WHAT_IS
+ createPopupItem( 214, View, mesh_part ); // UPDATE
+ createPopupItem( 900, View, mesh_part ); // ADV_INFO
createPopupItem( 904, View, mesh ); // FIND_ELEM
popupMgr()->insert( separator(), -1, 0 );
int anId;
QString aClient = QString( "%1client in {%2}" ).arg( lc ).arg( "'VTKViewer'" );
QString aType = QString( "%1type in {%2}" ).arg( lc );
- aType = aType.arg( mesh_group );
+ aType = aType.arg( mesh_part );
QString aMeshInVTK = aClient + "&&" + aType;
aClient = "($client in {'VTKViewer' 'ObjectBrowser'})";
popupMgr()->setRule( action( 6005 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6005 ), "controlMode = 'eFreeNodes'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6028 ), aSubId, -1 ); // EQUAL_NODE
+ popupMgr()->setRule( action( 6028 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6028 ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule);
+
aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS
popupMgr()->insert( action( 6002 ), aSubId, -1 ); // FREE_EDGE
popupMgr()->insert( action( 6004 ), aSubId, -1 ); // CONNECTION
popupMgr()->setRule( action( 6004 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6004 ), "controlMode = 'eMultiConnection'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6029 ), aSubId, -1 ); // EQUAL_EDGE
+ popupMgr()->setRule( action( 6029 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6029 ), "controlMode = 'eCoincidentElems1D'", QtxPopupMgr::ToggleRule);
aSubId = popupMgr()->insert( tr( "MEN_FACE_CTRL" ), anId, -1 ); // FACE CONTROLS
popupMgr()->insert ( action( 6027 ), aSubId, -1 ); // OVER_CONSTRAINED_FACE
popupMgr()->setRule( action( 6027 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6027 ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6030 ), aSubId, -1 ); // EQUAL_FACE
+ popupMgr()->setRule( action( 6030 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6030 ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule );
aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
popupMgr()->setRule( action( 6026 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6026 ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME
+ popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule );
+
popupMgr()->insert( separator(), anId, -1 );
popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP
// import Python module that manages SMESH plugins (need to be here because SalomePyQt API uses active module)
PyGILState_STATE gstate = PyGILState_Ensure();
- PyObject* pluginsmanager=PyImport_ImportModule((char*)"salome_pluginsmanager");
+ PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
if(pluginsmanager==NULL)
PyErr_Print();
else
action(113)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); // Import MED
action( 33)->setEnabled(true); // Delete: Key_Delete
- action(1101)->setEnabled(true); // Rename: Key_F2
// 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH
GetSMESHGen()->SetCurrentStudy(SALOMEDS::Study::_nil());
GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() );
updateObjBrowser(); // objects can be removed
}
-
+
// get all view currently opened in the study and connect their signals to
// the corresponding slots of the class.
SUIT_Desktop* aDesk = study->application()->desktop();
action(113)->setShortcut(QKeySequence()); // Import MED
action( 33)->setEnabled(false); // Delete: Key_Delete
- action(1101)->setEnabled(false); // Rename: Key_F2
return SalomeApp_Module::deactivateModule( study );
}
{
if ( dynamic_cast<SVTK_ViewManager*>( mgr ) ) {
SMESH::UpdateSelectionProp( this );
-
+
QVector<SUIT_ViewWindow*> aViews = mgr->getViews();
for(int i = 0; i < aViews.count() ; i++){
SUIT_ViewWindow *sf = aViews[i];
int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
setPreferenceProperty( prec, "min", 0 );
setPreferenceProperty( prec, "max", 16 );
+ int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
+ setPreferenceProperty( doubleNodesTol, "precision", 10 );
+ setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
+ setPreferenceProperty( doubleNodesTol, "max", 1000000.0 );
+ setPreferenceProperty( doubleNodesTol, "step", 0.0000001 );
int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab );
setPreferenceProperty( dispgroup, "columns", 2 );
int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" );
QStringList modes;
- modes.append( "Wireframe" );
- modes.append( "Shading" );
- modes.append( "Nodes" );
- modes.append( "Shrink" );
+ modes.append( tr("MEN_WIRE") );
+ modes.append( tr("MEN_SHADE") );
+ modes.append( tr("MEN_NODES") );
+ modes.append( tr("MEN_SHRINK") );
QList<QVariant> indices;
indices.append( 0 );
indices.append( 1 );
setPreferenceProperty( arcgroup, "columns", 2 );
int quadraticmode = addPreference( tr( "QUADRATIC_REPRESENT_MODE" ), arcgroup, LightApp_Preferences::Selector, "SMESH", "quadratic_mode" );
QStringList quadraticModes;
- quadraticModes.append("Lines");
- quadraticModes.append("Arcs");
+ quadraticModes.append(tr("MEN_LINE_REPRESENTATION"));
+ quadraticModes.append(tr("MEN_ARC_REPRESENTATION"));
indices.clear();
indices.append( 0 );
indices.append( 1 );
setPreferenceProperty( notifyMode, "indexes", indices );
int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab );
- setPreferenceProperty( computeGroup, "columns", 2 );
+ setPreferenceProperty( infoGroup, "columns", 4 );
int elemInfo = addPreference( tr( "PREF_ELEM_INFO" ), infoGroup, LightApp_Preferences::Selector, "SMESH", "mesh_elem_info" );
modes.clear();
modes.append( tr( "PREF_ELEM_INFO_SIMPLE" ) );
indices.append( 1 );
setPreferenceProperty( elemInfo, "strings", modes );
setPreferenceProperty( elemInfo, "indexes", indices );
+ int nodesLim = addPreference( tr( "PREF_GPP_NODES_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_groups_nodes_limit" );
+ setPreferenceProperty( nodesLim, "min", 0 );
+ setPreferenceProperty( nodesLim, "max", 10000000 );
+ setPreferenceProperty( nodesLim, "step", 10000 );
+ setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab );
setPreferenceProperty( segGroup, "columns", 2 );
setPreferenceProperty( nbSeg, "min", 1 );
setPreferenceProperty( nbSeg, "max", 10000000 );
+ int loadGroup = addPreference( tr( "SMESH_PREF_MESH_LOADING" ), genTab );
+ addPreference( tr( "PREF_FORGET_MESH_AT_HYP_MODIF" ), loadGroup, LightApp_Preferences::Bool,
+ "SMESH", "forget_mesh_on_hyp_modif" );
+
+
// Quantities with individual precision settings
int precGroup = addPreference( tr( "SMESH_PREF_GROUP_PRECISION" ), genTab );
setPreferenceProperty( precGroup, "columns", 2 );
setPreferenceProperty( precs[ii], "precision", 2 );
}
+ int previewGroup = addPreference( tr( "SMESH_PREF_GROUP_PREVIEW" ), genTab );
+ setPreferenceProperty( previewGroup, "columns", 2 );
+ int chunkSize = addPreference( tr( "PREF_PREVIEW_CHUNK_SIZE" ), previewGroup, LightApp_Preferences::IntSpin, "SMESH", "preview_actor_chunk_size" );
+ setPreferenceProperty( chunkSize, "min", 0 );
+ setPreferenceProperty( chunkSize, "max", 1000 );
+ setPreferenceProperty( chunkSize, "step", 50 );
+
+ int pyDumpGroup = addPreference( tr( "PREF_PYTHON_DUMP" ), genTab );
+ addPreference( tr( "PREF_HISTORICAL_PYTHON_DUMP" ), pyDumpGroup, LightApp_Preferences::Bool, "SMESH", "historical_python_dump" );
+
// Mesh tab ------------------------------------------------------------------------
int meshTab = addPreference( tr( "PREF_TAB_MESH" ) );
int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab );
int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab );
setPreferenceProperty( elemGroup, "columns", 2 );
- addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::Color, "SMESH", "fill_color" );
- addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" );
- addPreference( tr( "PREF_BACKFACE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "backface_color" );
+ int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" );
addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" );
+ addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" );
+ addPreference( tr( "PREF_WIREFRAME" ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" );
+
+ setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") );
+
int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab );
setPreferenceProperty( grpGroup, "columns", 2 );
addPreference( tr( "PREF_GRP_NAMES" ), grpGroup, LightApp_Preferences::Color, "SMESH", "group_name_color" );
- //int sp = addPreference( "", elemGroup, LightApp_Preferences::Space );
- //setPreferenceProperty( sp, "hstretch", 0 );
- //setPreferenceProperty( sp, "vstretch", 0 );
-
int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "elem0d_size");
- int sp = addPreference( "", elemGroup, LightApp_Preferences::Space );
int elemW = addPreference(tr("PREF_WIDTH"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "element_width");
int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
setPreferenceProperty( size0d, "min", 1 );
setPreferenceProperty( size0d, "max", 10 );
- setPreferenceProperty( sp, "hstretch", 0 );
- setPreferenceProperty( sp, "vstretch", 0 );
-
setPreferenceProperty( elemW, "min", 1 );
setPreferenceProperty( elemW, "max", 5 );
addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_object_color" );
addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_element_color" );
- int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, LightApp_Preferences::IntSpin, "SMESH", "selection_width" );
-
- setPreferenceProperty( selW, "min", 1 );
- setPreferenceProperty( selW, "max", 5 );
int preGroup = addPreference( tr( "PREF_GROUP_PRESELECTION" ), selTab );
setPreferenceProperty( preGroup, "columns", 2 );
addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, LightApp_Preferences::Color, "SMESH", "highlight_color" );
- int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, LightApp_Preferences::IntSpin, "SMESH", "highlight_width" );
-
- setPreferenceProperty( preW, "min", 1 );
- setPreferenceProperty( preW, "max", 5 );
int precSelGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), selTab );
setPreferenceProperty( precSelGroup, "columns", 2 );
setPreferenceProperty( hh, "min", 0.0 );
setPreferenceProperty( hh, "max", 1.0 );
setPreferenceProperty( hh, "step", 0.1 );
-
+
int distributionGr = addPreference( tr( "SMESH_DISTRIBUTION_SCALARBAR" ), sbarTab, LightApp_Preferences::Auto, "SMESH", "distribution_visibility" );
int coloringType = addPreference( tr( "SMESH_DISTRIBUTION_COLORING_TYPE" ), distributionGr, LightApp_Preferences::Selector, "SMESH", "distribution_coloring_type" );
setPreferenceProperty( distributionGr, "columns", 3 );
QStringList types;
- types.append( tr( "SMESH_MONOCOLOR" ) );
+ types.append( tr( "SMESH_MONOCOLOR" ) );
types.append( tr( "SMESH_MULTICOLOR" ) );
indices.clear(); indices.append( 0 ); indices.append( 1 );
setPreferenceProperty( coloringType, "strings", types );
std::string aWarning;
SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
if( name=="selection_object_color" || name=="selection_element_color" ||
- name=="selection_width" || name=="highlight_color" || name=="highlight_width" ||
+ name=="highlight_color" ||
name=="selection_precision_node" || name=="selection_precision_element" ||
name=="selection_precision_object")
SMESH::UpdateSelectionProp( this );
int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg );
}
+ else if ( name == "historical_python_dump" ||
+ name == "forget_mesh_on_hyp_modif") {
+ QString val = aResourceMgr->stringValue( "SMESH", name );
+ myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() );
+ }
if(aWarning.size() != 0){
aWarning += "The default values are applied instead.";
//================================================================================
void SMESHGUI::update( const int flags )
{
- if ( flags & UF_Viewer | flags & UF_Forced )
+ if ( (flags & UF_Viewer) | (flags & UF_Forced) )
SMESH::UpdateView();
else
SalomeApp_Module::update( flags );
// Colors (surface:edge:)
vtkFloatingPointType r, g, b;
+ int delta;
- aSmeshActor->GetSufaceColor(r, g, b);
+ aSmeshActor->GetSufaceColor(r, g, b, delta);
QString colorStr ("surface");
colorStr += gDigitsSep; colorStr += QString::number(r);
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
- aSmeshActor->GetBackSufaceColor(r, g, b);
colorStr += gDigitsSep; colorStr += "backsurface";
- colorStr += gDigitsSep; colorStr += QString::number(r);
- colorStr += gDigitsSep; colorStr += QString::number(g);
- colorStr += gDigitsSep; colorStr += QString::number(b);
+ colorStr += gDigitsSep; colorStr += QString::number(delta);
+
aSmeshActor->GetEdgeColor(r, g, b);
colorStr += gDigitsSep; colorStr += "edge";
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
+ aSmeshActor->GetOutlineColor(r, g, b);
+ colorStr += gDigitsSep; colorStr += "outline";
+ colorStr += gDigitsSep; colorStr += QString::number(r);
+ colorStr += gDigitsSep; colorStr += QString::number(g);
+ colorStr += gDigitsSep; colorStr += QString::number(b);
+
param = vtkParam + "Colors";
ip->setParameter(entry, param, colorStr.toLatin1().data());
for ( ; anIter2 != anActorList.end(); anIter2++ ) {
if( aSmeshActor == *anIter2 ) {
ip->setParameter( entry, param + QString::number( ++aPlaneId ).toLatin1().constData(),
- QString::number( anId ).toLatin1().constData() );
+ QString::number( anId ).toLatin1().constData() );
break;
}
}
continue;
TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ];
- aPlaneDataList.push_back( aPlaneData );
+ aPlaneDataList.push_back( aPlaneData );
}
}
// Colors
else if (paramNameStr == "Colors") {
QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts);
- if (colors.count() == 16) {
+ if (colors.count() == 16 || colors.count() == 18 ) {
if (colors[0] != "surface" || colors[4] != "backsurface" ||
- colors[8] != "edge" || colors[12] != "node") {
+ (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node") ||
+ (colors.count() == 18 && colors[14] != "outline")) {
MESSAGE("Invalid order of data in Colors, must be: "
- "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b");
+ "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b");
}
else {
- aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat());
- aSmeshActor->SetBackSufaceColor(colors[5].toFloat(), colors[6].toFloat(), colors[7].toFloat());
- aSmeshActor->SetEdgeColor(colors[9].toFloat(), colors[10].toFloat(), colors[11].toFloat());
- aSmeshActor->SetNodeColor(colors[13].toFloat(), colors[14].toFloat(), colors[15].toFloat());
+ int delta = 0;
+ float er,eg,eb;
+ float nr,ng,nb;
+ vtkFloatingPointType otr,otg,otb;
+ //Old case backsurface color is independent
+ if( colors.count() == 16 ) {
+ QColor ffc;
+ SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ;
+ er = colors[9].toFloat();
+ eg = colors[10].toFloat();
+ eb = colors[11].toFloat();
+
+ nr = colors[13].toFloat();
+ ng = colors[14].toFloat();
+ nb = colors[15].toFloat();
+ SMESH::GetColor("SMESH", "outline_color", otr, otg, otb, QColor( 0, 70, 0 ) );
+ } else {
+ //New case backsurface color depends on surface color
+ delta = colors[5].toInt();
+
+ er = colors[7].toFloat();
+ eg = colors[8].toFloat();
+ eb = colors[9].toFloat();
+
+ nr = colors[11].toFloat();
+ ng = colors[12].toFloat();
+ nb = colors[13].toFloat();
+
+ otr = colors[15].toFloat();
+ otg = colors[16].toFloat();
+ otb = colors[17].toFloat();
+ }
+ aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat(), delta);
+ aSmeshActor->SetEdgeColor(er,eg,eb);
+ aSmeshActor->SetNodeColor(nr,ng,nb);
+ aSmeshActor->SetOutlineColor(otr,otg,otb);
}
}
}
*/
int SMESHGUI::addVtkFontPref( const QString& label, const int pId, const QString& param )
{
- int tfont = addPreference( label, pId, LightApp_Preferences::Font, "VISU", param );
+ int tfont = addPreference( label, pId, LightApp_Preferences::Font, "SMESH", param );
setPreferenceProperty( tfont, "mode", QtxFontEdit::Custom );
#ifndef DISABLE_PLOT2DVIEWER
//Crear all Plot2d Viewers if need.
SMESH::ClearPlot2Viewers(pview);
-#endif
+#endif
+}
+
+void SMESHGUI::message( const QString& msg )
+{
+ // dispatch message
+ QStringList data = msg.split("/");
+ if ( data.count() > 0 ) {
+ if ( data.first() == "mesh_loading" ) {
+ // get mesh entry
+ QString entry = data.count() > 1 ? data[1] : QString();
+ if ( entry.isEmpty() )
+ return;
+ // get study
+ _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() )->studyDS();
+ // get mesh name
+ _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() );
+ QString name;
+ if ( obj )
+ name = obj->GetName().c_str();
+ if ( name.isEmpty() )
+ return;
+
+ if ( data.last() == "stop" )
+ application()->putInfo( tr( "MESH_LOADING_MSG_FINISHED" ).arg( name ) );
+ else
+ application()->putInfo( tr( "MESH_LOADING_MSG" ).arg( name ) );
+ QApplication::processEvents();
+ }
+ }
}
/*!
void SMESHGUI::connectView( const SUIT_ViewWindow* pview ) {
if(!pview)
return;
-
+
SUIT_ViewManager* viewMgr = pview->getViewManager();
if ( viewMgr ) {
disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
-
+
connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
}
}
-
+
+/*!
+ \brief Return \c true if object can be renamed
+*/
+bool SMESHGUI::renameAllowed( const QString& entry) const {
+ SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( application() );
+ if( !anApp )
+ return false;
+
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
+ if( !appStudy )
+ return false;
+
+ SalomeApp_DataObject* obj = dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry));
+
+ if(!obj)
+ return false;
+
+ if(appStudy->isComponent(entry) || obj->isReference())
+ return false;
+
+ // check type to prevent renaming of inappropriate objects
+ int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument());
+ if (aType == MESH || aType == GROUP ||
+ aType == SUBMESH || aType == SUBMESH_COMPOUND ||
+ aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
+ aType == SUBMESH_EDGE || aType == SUBMESH_VERTEX ||
+ aType == HYPOTHESIS || aType == ALGORITHM)
+ return true;
+
+ return false;
+}
+
+/*!
+ Rename object by entry.
+ \param entry entry of the object
+ \param name new name of the object
+ \brief Return \c true if rename operation finished successfully, \c false otherwise.
+*/
+bool SMESHGUI::renameObject( const QString& entry, const QString& name) {
+
+ SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( application() );
+ if( !anApp )
+ return false;
+
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
+
+ if(!appStudy)
+ return false;
+
+ _PTR(Study) aStudy = appStudy->studyDS();
+
+ if(!aStudy)
+ return false;
+
+ bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
+ if ( aLocked ) {
+ SUIT_MessageBox::warning ( anApp->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
+ return false;
+ }
+
+
+ _PTR(SObject) obj = aStudy->FindObjectID( qPrintable(entry) );
+ _PTR(GenericAttribute) anAttr;
+ _PTR(AttributeName) aName;
+ if ( obj ) {
+ if ( obj->FindAttribute(anAttr, "AttributeName") ) {
+ aName = anAttr;
+ // check type to prevent renaming of inappropriate objects
+ int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() );
+ if (aType == MESH || aType == GROUP ||
+ aType == SUBMESH || aType == SUBMESH_COMPOUND ||
+ aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
+ aType == SUBMESH_EDGE || aType == SUBMESH_VERTEX ||
+ aType == HYPOTHESIS || aType == ALGORITHM) {
+ if ( !name.isEmpty() ) {
+ SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qPrintable(name) );
+
+ // update name of group object and its actor
+ Handle(SALOME_InteractiveObject) IObject =
+ new SALOME_InteractiveObject ( qPrintable(entry), "SMESH", qPrintable(name) );
+
+ SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
+ if( !aGroupObject->_is_nil() ) {
+ aGroupObject->SetName( qPrintable(name) );
+ if ( SMESH_Actor *anActor = SMESH::FindActorByEntry( qPrintable(entry) ) )
+ anActor->setName( qPrintable(name) );
+ }
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}