-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013 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
#undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
#endif
#include "Python.h"
+
// SMESH includes
#include "SMESHGUI.h"
+#include "SMESHGUI_Add0DElemsOnAllNodesDlg.h"
#include "SMESHGUI_AddMeshElementDlg.h"
#include "SMESHGUI_AddQuadraticElementDlg.h"
#include "SMESHGUI_BuildCompoundDlg.h"
#include "SMESHGUI_ClippingDlg.h"
#include "SMESHGUI_ComputeDlg.h"
#include "SMESHGUI_ConvToQuadOp.h"
+#include "SMESHGUI_CopyMeshDlg.h"
#include "SMESHGUI_CreatePolyhedralVolumeDlg.h"
#include "SMESHGUI_DeleteGroupDlg.h"
#include "SMESHGUI_Displayer.h"
-#include "SMESHGUI_MergeDlg.h"
+#include "SMESHGUI_DuplicateNodesDlg.h"
#include "SMESHGUI_ExtrusionAlongPathDlg.h"
#include "SMESHGUI_ExtrusionDlg.h"
#include "SMESHGUI_FileInfoDlg.h"
#include "SMESHGUI_Make2DFrom3DOp.h"
#include "SMESHGUI_MakeNodeAtPointDlg.h"
#include "SMESHGUI_Measurements.h"
+#include "SMESHGUI_MergeDlg.h"
#include "SMESHGUI_MeshInfo.h"
#include "SMESHGUI_MeshOp.h"
#include "SMESHGUI_MeshOrderOp.h"
#include "SMESHGUI_MeshPatternDlg.h"
#include "SMESHGUI_MultiEditDlg.h"
#include "SMESHGUI_NodesDlg.h"
-#include "SMESHGUI_Preferences_ColorDlg.h"
#include "SMESHGUI_Preferences_ScalarBarDlg.h"
+#include "SMESHGUI_PropertiesDlg.h"
#include "SMESHGUI_RemoveElementsDlg.h"
#include "SMESHGUI_RemoveNodesDlg.h"
#include "SMESHGUI_RenumberingDlg.h"
+#include "SMESHGUI_ReorientFacesDlg.h"
#include "SMESHGUI_RevolutionDlg.h"
#include "SMESHGUI_RotationDlg.h"
+#include "SMESHGUI_ScaleDlg.h"
#include "SMESHGUI_Selection.h"
#include "SMESHGUI_SewingDlg.h"
#include "SMESHGUI_SingleEditDlg.h"
#include "SMESHGUI_SmoothingDlg.h"
#include "SMESHGUI_SymmetryDlg.h"
#include "SMESHGUI_TranslationDlg.h"
-#include "SMESHGUI_ScaleDlg.h"
#include "SMESHGUI_TransparencyDlg.h"
-#include "SMESHGUI_DuplicateNodesDlg.h"
-#include "SMESHGUI_CopyMeshDlg.h"
-#include "SMESHGUI_ReorientFacesDlg.h"
-#include "SMESHGUI_Utils.h"
-#include "SMESHGUI_MeshUtils.h"
-#include "SMESHGUI_GroupUtils.h"
#include "SMESHGUI_FilterUtils.h"
+#include "SMESHGUI_GroupUtils.h"
+#include "SMESHGUI_HypothesesUtils.h"
+#include "SMESHGUI_MeshUtils.h"
#include "SMESHGUI_PatternUtils.h"
+#include "SMESHGUI_Utils.h"
#include "SMESHGUI_VTKUtils.h"
-#include "SMESHGUI_HypothesesUtils.h"
#include <SMESH_version.h>
-#include <SMESH_Client.hxx>
+#include "SMESH_ControlsDef.hxx"
#include <SMESH_Actor.h>
-#include <SMESH_ScalarBarActor.h>
#include <SMESH_ActorUtils.h>
+#include <SMESH_Client.hxx>
+#include <SMESH_ScalarBarActor.h>
#include <SMESH_TypeFilter.hxx>
-#include "SMESH_ControlsDef.hxx"
// SALOME GUI includes
-#include <SalomeApp_Tools.h>
-#include <SalomeApp_Study.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_CheckFileDlg.h>
#include <SalomeApp_DataObject.h>
+#include <SalomeApp_Study.h>
+#include <SalomeApp_Tools.h>
#include <LightApp_DataOwner.h>
+#include <LightApp_NameDlg.h>
#include <LightApp_Preferences.h>
#include <LightApp_SelectionMgr.h>
#include <LightApp_UpdateFlags.h>
-#include <LightApp_NameDlg.h>
-#include <SVTK_ViewWindow.h>
-#include <SVTK_ViewModel.h>
#include <SVTK_ViewManager.h>
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
#include <VTKViewer_Algorithm.h>
-#include <SUIT_MessageBox.h>
-#include <SUIT_ResourceMgr.h>
-#include <SUIT_FileDlg.h>
+#include <PyInterp_Interp.h>
+
#include <SUIT_Desktop.h>
+#include <SUIT_FileDlg.h>
+#include <SUIT_MessageBox.h>
#include <SUIT_OverrideCursor.h>
+#include <SUIT_ResourceMgr.h>
#include <SUIT_Session.h>
#include <QtxPopupMgr.h>
#include <boost/shared_ptr.hpp>
// VTK includes
-#include <vtkCamera.h>
-#include <vtkRenderer.h>
-#include <vtkPlane.h>
#include <vtkCallbackCommand.h>
+#include <vtkCamera.h>
#include <vtkLookupTable.h>
+#include <vtkPlane.h>
+#include <vtkRenderer.h>
// SALOME KERNEL includes
-#include <SALOMEDS_Study.hxx>
-#include <SALOMEDSClient_StudyBuilder.hxx>
-#include <SALOMEDSClient_SComponent.hxx>
#include <SALOMEDSClient_ClientFactory.hxx>
#include <SALOMEDSClient_IParameters.hxx>
+#include <SALOMEDSClient_SComponent.hxx>
+#include <SALOMEDSClient_StudyBuilder.hxx>
+#include <SALOMEDS_Study.hxx>
+#include <SALOMEDS_SObject.hxx>
// OCCT includes
#include <Standard_ErrorHandler.hxx>
#include <NCollection_DataMap.hxx>
+#include <Basics_Utils.hxx>
+
//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
+//Otherwise, it should be uncommented.
+//Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
#define WITHGENERICOBJ
+// Below macro, when uncommented, switches on simplified (more performant) algorithm
+// of auto-color picking up
+#define SIMPLE_AUTOCOLOR
+
//namespace{
// Declarations
//=============================================================
std::string myExtension;
if ( theCommandID == 113 ) {
- filter.append( QObject::tr( "MED_FILES_FILTER" ) + " (*.med)" );
+ filter.append( QObject::tr( "MED_FILES_FILTER" ) + " (*.*med)" );
filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" );
}
else if ( theCommandID == 112 ) {
filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" );
}
else if ( theCommandID == 115 ) {
- filter.append( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)" );
+ filter.append( QObject::tr( "STL_FILES_FILTER" ) + " (*.stl)" );
}
else if ( theCommandID == 116 ) {
filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
filter.append( QObject::tr( "All files (*)" ) );
}
+ else if ( theCommandID == 118 ) {
+ filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" );
+ filter.append( QObject::tr( "GMF_BINARY_FILES_FILTER") + " (*.meshb)" );
+ }
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
anInitialPath = QDir::currentPath();
- QStringList filenames = SUIT_FileDlg::getOpenFileNames( SMESHGUI::desktop(),
- anInitialPath,
- filter,
- QObject::tr( "SMESH_IMPORT_MESH" ) );
+ QStringList filenames;
+ bool toCreateGroups = true;
+
+ // if ( theCommandID == 118 ) { // GMF
+ // SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg
+ // ( SMESHGUI::desktop(), true, QObject::tr("SMESH_REQUIRED_GROUPS"), true, true );
+ // fd->setWindowTitle( QObject::tr( "SMESH_IMPORT_MESH" ) );
+ // fd->setNameFilters( filter );
+ // fd->SetChecked( true );
+ // if ( fd->exec() )
+ // filenames << fd->selectedFile();
+ // toCreateGroups = fd->IsChecked();
+
+ // delete fd;
+ // }
+ // else
+ {
+ filenames = SUIT_FileDlg::getOpenFileNames( SMESHGUI::desktop(),
+ anInitialPath,
+ filter,
+ QObject::tr( "SMESH_IMPORT_MESH" ) );
+ }
if ( filenames.count() > 0 ) {
SUIT_OverrideCursor wc;
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
{
// UNV format
aMeshes->length( 1 );
- aMeshes[0] = theComponentMesh->CreateMeshesFromUNV( filename.toLatin1().constData() );
+ aMeshes[0] = theComponentMesh->CreateMeshesFromUNV( filename.toUtf8().constData() );
if ( aMeshes[0]->_is_nil() )
errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) );
{
// MED format
SMESH::DriverMED_ReadStatus res;
- aMeshes = theComponentMesh->CreateMeshesFromMED( filename.toLatin1().constData(), res );
+ aMeshes = theComponentMesh->CreateMeshesFromMED( filename.toUtf8().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() ) ) );
{
// STL format
aMeshes->length( 1 );
- aMeshes[0] = theComponentMesh->CreateMeshesFromSTL( filename.toLatin1().constData() );
+ aMeshes[0] = theComponentMesh->CreateMeshesFromSTL( filename.toUtf8().constData() );
if ( aMeshes[0]->_is_nil() ) {
errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) );
{
// CGNS format
SMESH::DriverMED_ReadStatus res;
- aMeshes = theComponentMesh->CreateMeshesFromCGNS( filename.toLatin1().constData(), res );
+ aMeshes = theComponentMesh->CreateMeshesFromCGNS( filename.toUtf8().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() ) ) );
{
// SAUV format
SMESH::DriverMED_ReadStatus res;
- aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res );
+ aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toUtf8().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 118:
+ {
+ // GMF format
+ SMESH::ComputeError_var res;
+ aMeshes->length( 1 );
+ aMeshes[0] = theComponentMesh->CreateMeshesFromGMF( filename.toUtf8().constData(),
+ toCreateGroups,
+ res.out() );
+ if ( res->code != SMESH::DRS_OK ) {
+ errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
+ arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res->code ).toLatin1().data() ) ) );
+ if ( strlen( res->comment.in() ) > 0 ) {
+ errors.back() += ": ";
+ errors.back() += res->comment.in();
+ }
+ }
+ break;
+ }
}
}
catch ( const SALOME::SALOME_Exception& S_ex ) {
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
- // so that it will be destroyed when the entry in study will be removed
- aMeshes[i]->UnRegister();
-#endif
}
else {
isEmpty = true;
const bool isSTL = ( theCommandID == 140 || theCommandID == 141 );
const bool isCGNS= ( theCommandID == 142 || theCommandID == 143 );
const bool isSAUV= ( theCommandID == 144 || theCommandID == 145 );
+ const bool isGMF = ( theCommandID == 146 || theCommandID == 147 );
// actually, the following condition can't be met (added for insurance)
if( selected.Extent() == 0 ||
aMeshIter = aMeshList.begin();
SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first;
- SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh();
- QString aMeshName = (*aMeshIter).second;
+ SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh();
+ QString aMeshName = (*aMeshIter).second;
- if ( isMED || isCGNS || isSAUV )
+ if ( isMED || isCGNS || isSAUV ) // formats where group names must be unique
{
// check for equal group names within each mesh
for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
if ( isDAT )
{
format = "DAT";
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Quadrangle );
- notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Quadrangle );
- notSupportedElemTypes.push_back( SMESH::Entity_Polygon );
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon );
- notSupportedElemTypes.push_back( SMESH::Entity_Tetra );
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Tetra );
- notSupportedElemTypes.push_back( SMESH::Entity_Pyramid );
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Pyramid );
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Hexa );
- notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa );
- notSupportedElemTypes.push_back( SMESH::Entity_Penta );
- notSupportedElemTypes.push_back( SMESH::Entity_Quad_Penta );
- notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism );
- notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra );
notSupportedElemTypes.push_back( SMESH::Entity_0D );
notSupportedElemTypes.push_back( SMESH::Entity_Ball );
}
{
format = "CGNS";
notSupportedElemTypes.push_back( SMESH::Entity_Ball );
+ notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Triangle );
}
else if ( isSAUV )
{
format = "SAUV";
notSupportedElemTypes.push_back( SMESH::Entity_Ball );
+ notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Triangle );
notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Quadrangle );
notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa );
notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism );
notSupportedElemTypes.push_back( SMESH::Entity_Polygon );
notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra );
}
+ else if ( isGMF )
+ {
+ format = "GMF";
+ notSupportedElemTypes.push_back( SMESH::Entity_0D );
+ notSupportedElemTypes.push_back( SMESH::Entity_Polygon );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Pyramid );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Penta );
+ notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism );
+ notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polyhedra );
+ notSupportedElemTypes.push_back( SMESH::Entity_Ball );
+ }
if ( ! notSupportedElemTypes.empty() )
{
SMESH::long_array_var nbElems = aMeshOrGroup->GetMeshInfo();
if ( !presentNotSupported.empty() )
{
QString typeNames;
- const char* typeMsg[SMESH::Entity_Last] = { "SMESH_NODES",
- "SMESH_ELEMS0D","SMESH_EDGES","SMESH_QUADRATIC_EDGES","SMESH_TRIANGLES",
- "SMESH_QUADRATIC_TRIANGLES","SMESH_QUADRANGLES","SMESH_QUADRATIC_QUADRANGLES",
- "SMESH_BIQUADRATIC_QUADRANGLES","SMESH_POLYGONS","SMESH_QUADRATIC_POLYGONS",
+ const char* typeMsg[SMESH::Entity_Last] = {
+ "SMESH_NODES", "SMESH_ELEMS0D","SMESH_EDGES","SMESH_QUADRATIC_EDGES",
+ "SMESH_TRIANGLES", "SMESH_QUADRATIC_TRIANGLES", "SMESH_BIQUADRATIC_TRIANGLES",
+ "SMESH_QUADRANGLES","SMESH_QUADRATIC_QUADRANGLES", "SMESH_BIQUADRATIC_QUADRANGLES",
+ "SMESH_POLYGONS","SMESH_QUADRATIC_POLYGONS",
"SMESH_TETRAHEDRA","SMESH_QUADRATIC_TETRAHEDRONS","SMESH_PYRAMIDS",
"SMESH_QUADRATIC_PYRAMIDS","SMESH_HEXAHEDRA","SMESH_QUADRATIC_HEXAHEDRONS",
"SMESH_TRIQUADRATIC_HEXAHEDRONS","SMESH_PENTAHEDRA","SMESH_QUADRATIC_PENTAHEDRONS",
// Get parameters of export operation
- QString aFilename;
+ QString aFilename;
SMESH::MED_VERSION aFormat;
// Init the parameters with the default values
- bool aIsASCII_STL = true;
+ bool aIsASCII_STL = true;
bool toCreateGroups = false;
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
if ( resMgr )
toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
bool toOverwrite = true;
+ bool toFindOutDim = true;
QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH");
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
anInitialPath = QDir::currentPath();
- if ( isUNV || isDAT )
+ // Get a file name to write in and additional otions
+ if ( isUNV || isDAT || isGMF ) // Export w/o options
{
if ( isUNV )
aFilter = QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)";
- else
+ else if ( isDAT )
aFilter = QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)";
- if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath();
+ else if ( isGMF )
+ aFilter = QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" +
+ ";;" + QObject::tr( "GMF_BINARY_FILES_FILTER" ) + " (*.meshb)";
+ if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath();
aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(),
anInitialPath + QString("/") + aMeshName,
aFilter, aTitle, false);
if (it.value() == SMESH::MED_V2_2)
aDefaultFilter = it.key();
}
+ QStringList checkBoxes;
+ checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM");
- SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg
- ( SMESHGUI::desktop(), false, QObject::tr("SMESH_AUTO_GROUPS"), true, true );
+ SalomeApp_CheckFileDlg* fd =
+ new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true );
fd->setWindowTitle( aTitle );
fd->setNameFilters( filters );
- fd->selectNameFilter(aDefaultFilter);
- fd->SetChecked(toCreateGroups);
+ fd->selectNameFilter( aDefaultFilter );
+ fd->SetChecked( toCreateGroups, 0 );
+ fd->SetChecked( toFindOutDim, 1 );
if ( !anInitialPath.isEmpty() )
fd->setDirectory( anInitialPath );
fd->selectFile(aMeshName);
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 );
+ bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion );
if( !isVersionOk || aVersion != aFormat ) {
int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
QObject::tr("SMESH_WRN_WARNING"),
}
QStringList aMeshNamesCollisionList;
- SMESH::string_array_var aMeshNames = SMESHGUI::GetSMESHGen()->GetMeshNames( aFilename.toLatin1().constData() );
+ SMESH::string_array_var aMeshNames = SMESHGUI::GetSMESHGen()->GetMeshNames( aFilename.toUtf8().constData() );
for( int i = 0, n = aMeshNames->length(); i < n; i++ ) {
QString anExistingMeshName( aMeshNames[ i ] );
for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
}
}
}
- toCreateGroups = fd->IsChecked();
+ toCreateGroups = fd->IsChecked(0);
+ toFindOutDim = fd->IsChecked(1);
delete fd;
}
else
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 );
+ aMeshItem->ExportToMEDX( aFilename.toUtf8().data(), toCreateGroups,
+ aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim );
else
- aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toLatin1().data(), toCreateGroups,
- aFormat, toOverwrite && aMeshIndex == 0 );
+ aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups,
+ aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim );
}
}
else if ( isSAUV )
{
SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
if( !aMeshItem->_is_nil() )
- aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups );
+ aMeshItem->ExportSAUV( aFilename.toUtf8().data(), toCreateGroups );
}
}
else if ( isDAT )
{
if ( aMeshOrGroup->_is_equivalent( aMesh ))
- aMesh->ExportDAT( aFilename.toLatin1().data() );
+ aMesh->ExportDAT( aFilename.toUtf8().data() );
else
- aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toLatin1().data() );
+ aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toUtf8().data() );
}
else if ( isUNV )
{
if ( aMeshOrGroup->_is_equivalent( aMesh ))
- aMesh->ExportUNV( aFilename.toLatin1().data() );
+ aMesh->ExportUNV( aFilename.toUtf8().data() );
else
- aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toLatin1().data() );
+ aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toUtf8().data() );
}
else if ( isSTL )
{
if ( aMeshOrGroup->_is_equivalent( aMesh ))
- aMesh->ExportSTL( aFilename.toLatin1().data(), aIsASCII_STL );
+ aMesh->ExportSTL( aFilename.toUtf8().data(), aIsASCII_STL );
else
- aMesh->ExportPartToSTL( aMeshOrGroup, aFilename.toLatin1().data(), aIsASCII_STL );
+ aMesh->ExportPartToSTL( aMeshOrGroup, aFilename.toUtf8().data(), aIsASCII_STL );
}
else if ( isCGNS )
{
SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first;
SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh();
aMeshItem->ExportCGNS( aMeshOrGroup,
- aFilename.toLatin1().data(),
+ aFilename.toUtf8().data(),
toOverwrite && aMeshIndex == 0 );
}
}
+ else if ( isGMF )
+ {
+ toCreateGroups = true;
+ aMesh->ExportGMF( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups );
+ }
}
catch (const SALOME::SALOME_Exception& S_ex){
wc.suspend();
}
}
- void AutoColor(){
+ void AutoColor()
+ {
SALOME_ListIO selected;
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
if( !app )
if( aMainObject->_is_nil() )
return;
+ SUIT_OverrideCursor wc;
+
aMainObject->SetAutoColor( true ); // mesh groups are re-colored here
+ QList<SALOMEDS::Color> aReservedColors;
+
SMESH::ListOfGroups aListOfGroups = *aMainObject->GetGroups();
for( int i = 0, n = aListOfGroups.length(); i < n; i++ )
{
SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i];
- SALOMEDS::Color aColor = aGroupObject->GetColor();
+ //SALOMEDS::Color aColor = aGroupObject->GetColor();
+
+#ifdef SIMPLE_AUTOCOLOR // simplified algorithm for auto-colors
+ SALOMEDS::Color aColor = SMESHGUI::getPredefinedUniqueColor();
+#else // old algorithm for auto-colors
+ SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
+ aReservedColors.append( aColor );
+#endif // SIMPLE_AUTOCOLOR
+ aGroupObject->SetColor( aColor );
+
_PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
if (aGroupSObject) {
+ QColor c;
+ int delta;
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) {
switch ( aGroupObject->GetType ()) {
case SMESH::NODE:
anActor->Set0DColor( aColor.R, aColor.G, aColor.B ); break;
case SMESH::BALL:
anActor->SetBallColor( aColor.R, aColor.G, aColor.B ); break;
+ case SMESH::VOLUME:
+ SMESH::GetColor("SMESH", "volume_color", c, delta, "255,0,170|-100");
+ anActor->SetVolumeColor( aColor.R, aColor.G, aColor.B, delta ); break;
+ case SMESH::FACE:
default:
- QColor c;
- int delta;
SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta );
}
SMESH::RepaintCurrentView();
}
+ void OverallMeshQuality() {
+ SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
+ LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
+ SALOME_ListIO selected;
+ if( aSel )
+ aSel->selectedObjects( selected );
+
+ if ( selected.IsEmpty() ) return;
+ SALOME_ListIteratorOfListIO It( selected );
+ for ( ; It.More(); It.Next() ) {
+ SMESHGUI_CtrlInfoDlg* ctrlDlg = new SMESHGUI_CtrlInfoDlg( SMESHGUI::desktop() );
+ ctrlDlg->showInfo( It.Value() );
+ ctrlDlg->show();
+ }
+ }
+
QString functorToString( SMESH::Controls::FunctorPtr f )
{
QString type = QObject::tr( "UNKNOWN_CONTROL" );
vtkLookupTable* lookupTable =
static_cast<vtkLookupTable*>(aScalarBarActor->GetLookupTable());
double * minmax = lookupTable->GetRange();
+ bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10;
std::vector<int> nbEvents;
std::vector<double> funValues;
- aNumFun->GetHistogram( nbIntervals, nbEvents, funValues, elements, minmax );
+ aNumFun->GetHistogram( nbIntervals, nbEvents, funValues, elements, minmax, isLogarithmic );
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
anInitialPath = QDir::currentPath();
}
}
+ void sortChildren(){
+ LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
+ SALOME_ListIO selected;
+ if( aSel ) {
+ aSel->selectedObjects( selected );
+
+ if(selected.Extent()){
+ Handle(SALOME_InteractiveObject) anIObject = selected.First();
+ _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+ _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry());
+ if (aSObj) {
+ if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) {
+ SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+ }
+ }
+ }
+ }
+ }
+
void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap)
{
SALOME_ListIO selected;
(new SMESHGUI_TransparencyDlg( SMESHGUI::GetSMESHGUI() ))->show();
return;
}
- case 1132:{
- QColor c, e, b, n, c0D, cBall, o, outl, selection, preselection;
- int delta;
- int size0D = 0, ballSize = 0;
- int Edgewidth = 0;
- vtkFloatingPointType Shrink = 0.0;
- vtkFloatingPointType faces_orientation_scale = 0.0;
- bool faces_orientation_3dvectors = false;
-
- VTK::MarkerType aMarkerTypeCurrent = VTK::MT_NONE;
- VTK::MarkerScale aMarkerScaleCurrent = VTK::MS_NONE;
- int aMarkerTextureCurrent = 0;
+ case 1132: {
+ double color[3];
+ QColor faceColor, edgeColor, nodeColor, elem0dColor, ballColor;
+ QColor orientationColor, outlineColor, volumeColor;
+ int deltaF = 0, deltaV = 0;
+ int elem0dSize = 1;
+ int ballSize = 1;
+ int edgeWidth = 1;
+ int outlineWidth = 1;
+ double shrinkCoef = 0.0;
+ double orientationScale = 0.0;
+ bool orientation3d = false;
+ VTK::MarkerType markerType = VTK::MT_NONE;
+ VTK::MarkerScale markerScale = VTK::MS_NONE;
+ int markerId = 0;
+ bool hasNodes = false;
+ int presentEntities = 0;
+ bool firstTime = true;
SALOME_ListIteratorOfListIO It( selected );
- for( ; It.More(); It.Next()){
+ for ( ; It.More(); It.Next() ) {
Handle(SALOME_InteractiveObject) IObject = It.Value();
- if(IObject->hasEntry()){
- if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
- vtkFloatingPointType color[3];
- 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);
- c.setRgb(c0, c1, c2);
-
- vtkFloatingPointType edgecolor[3];
- anActor->GetEdgeColor(edgecolor[0], edgecolor[1], edgecolor[2]);
- c0 = int (edgecolor[0] * 255);
- c1 = int (edgecolor[1] * 255);
- c2 = int (edgecolor[2] * 255);
- e.setRgb(c0, c1, c2);
-
- vtkFloatingPointType nodecolor[3];
- anActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]);
- c0 = int (nodecolor[0] * 255);
- c1 = int (nodecolor[1] * 255);
- c2 = int (nodecolor[2] * 255);
- n.setRgb(c0, c1, c2);
-
- vtkFloatingPointType color0D[3];
- anActor->Get0DColor(color0D[0], color0D[1], color0D[2]);
- c0 = int (color0D[0] * 255);
- c1 = int (color0D[1] * 255);
- c2 = int (color0D[2] * 255);
- c0D.setRgb(c0, c1, c2);
-
- vtkFloatingPointType ballcolor[3];
- anActor->GetBallColor(ballcolor[0], ballcolor[1], ballcolor[2]);
- c0 = int (ballcolor[0] * 255);
- c1 = int (ballcolor[1] * 255);
- c2 = int (ballcolor[2] * 255);
- cBall.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;
- ballSize = (int)anActor->GetBallSize();
- if(ballSize == 0)
- ballSize = 1;
- Edgewidth = (int)anActor->GetLineWidth();
- if(Edgewidth == 0)
- Edgewidth = 1;
- Shrink = anActor->GetShrinkFactor();
-
- vtkFloatingPointType faces_orientation_color[3];
- anActor->GetFacesOrientationColor(faces_orientation_color);
- c0 = int (faces_orientation_color[0] * 255);
- c1 = int (faces_orientation_color[1] * 255);
- c2 = int (faces_orientation_color[2] * 255);
- o.setRgb(c0, c1, c2);
-
- faces_orientation_scale = anActor->GetFacesOrientationScale();
- faces_orientation_3dvectors = anActor->GetFacesOrientation3DVectors();
-
- aMarkerTypeCurrent = anActor->GetMarkerType();
- aMarkerScaleCurrent = anActor->GetMarkerScale();
- aMarkerTextureCurrent = anActor->GetMarkerTexture();
-
- // even if there are multiple objects in the selection,
- // we need only the first one to get values for the dialog
- break;
- }
+ if ( !IObject->hasEntry() ) continue;
+ SMESH_Actor* anActor = SMESH::FindActorByEntry( IObject->getEntry() );
+ if ( !anActor || !anActor->GetObject() ) continue;
+
+ if ( firstTime ) {
+ // nodes: color, marker
+ anActor->GetNodeColor( color[0], color[1], color[2] );
+ nodeColor.setRgbF( color[0], color[1], color[2] );
+ markerType = anActor->GetMarkerType();
+ markerScale = anActor->GetMarkerScale();
+ markerId = anActor->GetMarkerTexture();
+ // edges: color, width
+ anActor->GetEdgeColor( color[0], color[1], color[2] );
+ edgeColor.setRgbF( color[0], color[1], color[2] );
+ edgeWidth = qMax( (int)anActor->GetLineWidth(), 1 ); // minimum allowed width is 1
+ // faces: front color, back color (delta)
+ anActor->GetSufaceColor( color[0], color[1], color[2], deltaF );
+ faceColor.setRgbF( color[0], color[1], color[2] );
+ // faces: front color, back color (delta)
+ anActor->GetVolumeColor( color[0], color[1], color[2], deltaV );
+ volumeColor.setRgbF( color[0], color[1], color[2] );
+ // 0d elements: color, size
+ anActor->Get0DColor( color[0], color[1], color[2] );
+ elem0dColor.setRgbF( color[0], color[1], color[2] );
+ elem0dSize = qMax( (int)anActor->Get0DSize(), 1 ); // minimum allowed size is 1
+ // balls: color, size
+ anActor->GetBallColor( color[0], color[1], color[2] );
+ ballColor.setRgbF( color[0], color[1], color[2] );
+ ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1
+ // outlines: color
+ anActor->GetOutlineColor( color[0], color[1], color[2] );
+ outlineColor.setRgbF( color[0], color[1], color[2] );
+ outlineWidth = qMax( (int)anActor->GetOutlineWidth(), 1 ); // minimum allowed width is 1
+ // orientation vectors: color, scale, 3d flag
+ anActor->GetFacesOrientationColor( color[0], color[1], color[2] );
+ orientationColor.setRgbF( color[0], color[1], color[2] );
+ orientationScale = anActor->GetFacesOrientationScale();
+ orientation3d = anActor->GetFacesOrientation3DVectors();
+ // shrink factor
+ shrinkCoef = anActor->GetShrinkFactor();
}
+
+ firstTime = false; // we only take properties from first object (for performance reasons)
+
+ if ( !hasNodes )
+ hasNodes = anActor->GetObject()->GetNbEntities( SMDSAbs_Node );
+ if ( !(presentEntities & SMESH_Actor::eEdges) && anActor->GetObject()->GetNbEntities( SMDSAbs_Edge ) )
+ presentEntities = presentEntities | SMESH_Actor::eEdges;
+ if ( !(presentEntities & SMESH_Actor::eFaces) && anActor->GetObject()->GetNbEntities( SMDSAbs_Face ) )
+ presentEntities = presentEntities | SMESH_Actor::eFaces;
+ if ( !(presentEntities & SMESH_Actor::eVolumes) && anActor->GetObject()->GetNbEntities( SMDSAbs_Volume ) )
+ presentEntities = presentEntities | SMESH_Actor::eVolumes;
+ if ( !(presentEntities & SMESH_Actor::e0DElements) && anActor->GetObject()->GetNbEntities( SMDSAbs_0DElement ) )
+ presentEntities = presentEntities | SMESH_Actor::e0DElements;
+ if ( !(presentEntities & SMESH_Actor::eBallElem) && anActor->GetObject()->GetNbEntities( SMDSAbs_Ball ) )
+ presentEntities = presentEntities | SMESH_Actor::eBallElem;
+
+ // as we know that all types of elements are present, we can exit the loop
+ if ( presentEntities == SMESH_Actor::eAllEntity )
+ break;
}
- SMESHGUI_Preferences_ColorDlg *aDlg =
- new SMESHGUI_Preferences_ColorDlg( SMESHGUI::GetSMESHGUI() );
- aDlg->SetBooleanValue(1, faces_orientation_3dvectors);
- aDlg->SetColor(1, c);
- aDlg->SetColor(2, e);
- aDlg->SetColor(3, n);
- aDlg->SetColor(4, outl);
- aDlg->SetColor(5, c0D);
- aDlg->SetColor(6, cBall);
- aDlg->SetColor(7, o);
- aDlg->SetColor(8, selection);
- aDlg->SetColor(9, preselection);
- aDlg->SetDeltaBrightness(delta);
- aDlg->SetDoubleValue(1, faces_orientation_scale);
- aDlg->SetIntValue(1, Edgewidth);
- aDlg->SetIntValue(2, int(Shrink*100.));
- aDlg->SetIntValue(3, size0D);
- aDlg->SetIntValue(4, ballSize);
-
- aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] );
-
- if( aMarkerTypeCurrent != VTK::MT_USER )
- aDlg->setStandardMarker( aMarkerTypeCurrent, aMarkerScaleCurrent );
+ SMESHGUI_PropertiesDlg dlg( theMarkerMap[ aStudy->StudyId() ], SMESHGUI::desktop() );
+ // nodes: color, marker
+ dlg.setNodeColor( nodeColor );
+ if( markerType != VTK::MT_USER )
+ dlg.setNodeMarker( markerType, markerScale );
else
- aDlg->setCustomMarker( aMarkerTextureCurrent );
-
- if(aDlg->exec()){
- QColor color = aDlg->GetColor(1);
- QColor edgecolor = aDlg->GetColor(2);
- QColor nodecolor = aDlg->GetColor(3);
- QColor outlinecolor = aDlg->GetColor(4);
- QColor color0D = aDlg->GetColor(5);
- QColor ballcolor = aDlg->GetColor(6);
- QColor faces_orientation_color = aDlg->GetColor(7);
- QColor selectioncolor = aDlg->GetColor(8);
- QColor preSelectioncolor = aDlg->GetColor(9);
- int delta = aDlg->GetDeltaBrightness();
-
- /* Point marker */
- theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap();
-
+ dlg.setNodeCustomMarker( markerId );
+ // edges: color, line width
+ dlg.setEdgeColor( edgeColor );
+ dlg.setEdgeWidth( edgeWidth );
+ // faces: front color, back color
+ dlg.setFaceColor( faceColor, deltaF );
+ // volumes: normal color, reversed color
+ dlg.setVolumeColor( volumeColor, deltaV );
+ // outlines: color, line width
+ dlg.setOutlineColor( outlineColor );
+ dlg.setOutlineWidth( outlineWidth );
+ // 0d elements: color, size
+ dlg.setElem0dColor( elem0dColor );
+ dlg.setElem0dSize( elem0dSize );
+ // balls: color, size
+ dlg.setBallColor( ballColor );
+ dlg.setBallSize( ballSize );
+ // orientation: color, scale, 3d flag
+ dlg.setOrientationColor( orientationColor );
+ dlg.setOrientationSize( int( orientationScale * 100. ) );
+ dlg.setOrientation3d( orientation3d );
+ // shrink: scale factor
+ dlg.setShrinkCoef( int( shrinkCoef * 100. ) );
+ // hide unused controls
+ dlg.showControls( presentEntities, hasNodes );
+
+ if ( dlg.exec() ) {
+ nodeColor = dlg.nodeColor();
+ markerType = dlg.nodeMarkerType();
+ markerScale = dlg.nodeMarkerScale();
+ markerId = dlg.nodeMarkerId();
+ edgeColor = dlg.edgeColor();
+ edgeWidth = dlg.edgeWidth();
+ faceColor = dlg.faceColor();
+ deltaF = dlg.faceColorDelta();
+ volumeColor = dlg.volumeColor();
+ deltaV = dlg.volumeColorDelta();
+ outlineColor = dlg.outlineColor();
+ outlineWidth = dlg.outlineWidth();
+ elem0dColor = dlg.elem0dColor();
+ elem0dSize = dlg.elem0dSize();
+ ballColor = dlg.ballColor();
+ ballSize = dlg.ballSize();
+ orientationColor = dlg.orientationColor();
+ orientationScale = dlg.orientationSize() / 100.;
+ orientation3d = dlg.orientation3d();
+ shrinkCoef = dlg.shrinkCoef() / 100.;
+
+ // store point markers map that might be changed by the user
+ theMarkerMap[ aStudy->StudyId() ] = dlg.customMarkers();
+
+ // set properties from dialog box to the presentations
SALOME_ListIteratorOfListIO It( selected );
- for( ; It.More(); It.Next()){
+ for ( ; It.More(); It.Next() ) {
Handle(SALOME_InteractiveObject) IObject = It.Value();
- if(IObject->hasEntry()){
- if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
- /* actor color and backface color */
- anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255.,
- vtkFloatingPointType (color.green()) / 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.);
- anActor->SetLineWidth(aDlg->GetIntValue(1));
-
- /* Nodes color and size */
- anActor->SetNodeColor(vtkFloatingPointType (nodecolor.red()) / 255.,
- vtkFloatingPointType (nodecolor.green()) / 255.,
- vtkFloatingPointType (nodecolor.blue()) / 255.);
-
- /* 0D elements */
- anActor->Set0DColor(vtkFloatingPointType (color0D.red()) / 255.,
- vtkFloatingPointType (color0D.green()) / 255.,
- vtkFloatingPointType (color0D.blue()) / 255.);
- anActor->Set0DSize(aDlg->GetIntValue(3));
-
- /* Ball elements */
- anActor->SetBallColor(vtkFloatingPointType (ballcolor.red()) / 255.,
- vtkFloatingPointType (ballcolor.green()) / 255.,
- vtkFloatingPointType (ballcolor.blue()) / 255.);
- anActor->SetBallSize(aDlg->GetIntValue(4));
-
- /* Faces orientation */
- vtkFloatingPointType c[3] = {vtkFloatingPointType(faces_orientation_color.redF()),
- vtkFloatingPointType(faces_orientation_color.greenF()),
- vtkFloatingPointType(faces_orientation_color.blueF())};
- anActor->SetFacesOrientationColor(c);
- anActor->SetFacesOrientationScale(aDlg->GetDoubleValue(1));
- anActor->SetFacesOrientation3DVectors(aDlg->GetBooleanValue(1));
-
- VTK::MarkerType aMarkerTypeNew = aDlg->getMarkerType();
- VTK::MarkerScale aMarkerScaleNew = aDlg->getStandardMarkerScale();
- int aMarkerTextureNew = aDlg->getCustomMarkerID();
- if( aMarkerTypeNew != VTK::MT_USER )
- anActor->SetMarkerStd( aMarkerTypeNew, aMarkerScaleNew );
- else {
- const VTK::MarkerMap& aMarkerMap = theMarkerMap[ aStudy->StudyId() ];
- VTK::MarkerMap::const_iterator anIter = aMarkerMap.find( aMarkerTextureNew );
- if( anIter != aMarkerMap.end() )
- anActor->SetMarkerTexture( aMarkerTextureNew, anIter->second.second );
- }
-
- SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
- if( !aGroupObject->_is_nil() )
- {
- SMESH::ElementType anElementType = aGroupObject->GetType();
- QColor aColor;
- switch( anElementType )
- {
- case SMESH::NODE: aColor = nodecolor; break;
- case SMESH::EDGE: aColor = edgecolor; break;
- default: aColor = color; break;
- }
-
- SALOMEDS::Color aGroupColor;
- aGroupColor.R = (float)aColor.red() / 255.0;
- aGroupColor.G = (float)aColor.green() / 255.0;
- aGroupColor.B = (float)aColor.blue() / 255.0;
- aGroupObject->SetColor( aGroupColor );
- }
- }
+ if ( !IObject->hasEntry() ) continue;
+ SMESH_Actor* anActor = SMESH::FindActorByEntry( IObject->getEntry() );
+ if ( !anActor ) continue;
+
+ // nodes: color, marker
+ anActor->SetNodeColor( nodeColor.redF(), nodeColor.greenF(), nodeColor.blueF() );
+ if ( markerType != VTK::MT_USER ) {
+ anActor->SetMarkerStd( markerType, markerScale );
}
- }
+ else {
+ const VTK::MarkerMap& markerMap = theMarkerMap[ aStudy->StudyId() ];
+ VTK::MarkerMap::const_iterator iter = markerMap.find( markerId );
+ if ( iter != markerMap.end() )
+ anActor->SetMarkerTexture( markerId, iter->second.second );
+ }
+ // volumes: normal color, reversed color (delta)
+ anActor->SetVolumeColor( volumeColor.redF(), volumeColor.greenF(), volumeColor.blueF(), deltaV );
+ // faces: front color, back color (delta)
+ anActor->SetSufaceColor( faceColor.redF(), faceColor.greenF(), faceColor.blueF(), deltaF );
+ // edges: color, width
+ anActor->SetEdgeColor( edgeColor.redF(), edgeColor.greenF(), edgeColor.blueF() );
+ anActor->SetLineWidth( edgeWidth );
+ // outlines: color
+ anActor->SetOutlineColor( outlineColor.redF(), outlineColor.greenF(), outlineColor.blueF() );
+ anActor->SetOutlineWidth( outlineWidth );
+ // 0D elements: color, size
+ anActor->Set0DColor( elem0dColor.redF(), elem0dColor.greenF(), elem0dColor.blueF() );
+ anActor->Set0DSize( elem0dSize );
+ // balls: color, size
+ anActor->SetBallColor( ballColor.redF(), ballColor.greenF(), ballColor.blueF() );
+ anActor->SetBallSize( ballSize );
+ // orientation: color, scale, 3d flag
+ anActor->SetFacesOrientationColor( orientationColor.redF(), orientationColor.greenF(), orientationColor.blueF() );
+ anActor->SetFacesOrientationScale( orientationScale );
+ anActor->SetFacesOrientation3DVectors( orientation3d );
+ // shrink factor
+ anActor->SetShrinkFactor( shrinkCoef );
+
+ // for groups, set also proper color
+ SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
+ if ( !aGroupObject->_is_nil() ) {
+ SMESH::ElementType anElementType = aGroupObject->GetType();
+ QColor aColor;
+ switch( anElementType ) {
+ case SMESH::NODE:
+ aColor = nodeColor; break;
+ case SMESH::EDGE:
+ aColor = edgeColor; break;
+ case SMESH::FACE:
+ aColor = faceColor; break;
+ case SMESH::VOLUME:
+ aColor = volumeColor; break;
+ case SMESH::ELEM0D:
+ aColor = elem0dColor; break;
+ case SMESH::BALL:
+ aColor = ballColor; break;
+ default: break;
+ }
+
+ if ( aColor.isValid() ) {
+ SALOMEDS::Color aGroupColor;
+ aGroupColor.R = aColor.redF();
+ aGroupColor.G = aColor.greenF();
+ aGroupColor.B = aColor.blueF();
+ aGroupObject->SetColor( aGroupColor );
+ }
+ } // if ( !aGroupObject->_is_nil() )
+ } // for ( ; It.More(); It.Next() )
SMESH::RepaintCurrentView();
- }
- delete aDlg;
+ } // if ( dlg.exec() )
return;
- }
- }
+ } // case 1132:
+ } // switch(theCommandID)
SALOME_ListIteratorOfListIO It( selected );
for( ; It.More(); It.Next()){
Handle(SALOME_InteractiveObject) IObject = It.Value();
aControl = SMESH_Actor::eCoincidentElems3D;
break;
}
-
+
anActor->SetControlMode(aControl);
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
SMESH::RepaintCurrentView();
bool CheckOIType(const Handle(SALOME_InteractiveObject) & theIO,
- MeshObjectType theType,
+ SMESH::MeshObjectType theType,
const QString theInTypeName,
QString & theOutTypeName)
{
QString aTypeName;
if (
- CheckOIType ( theIO, HYPOTHESIS, "Hypothesis", aTypeName ) ||
- CheckOIType ( theIO, ALGORITHM, "Algorithm", aTypeName ) ||
- CheckOIType ( theIO, MESH, "Mesh", aTypeName ) ||
- CheckOIType ( theIO, SUBMESH, "SubMesh", aTypeName ) ||
- CheckOIType ( theIO, GROUP, "Group", aTypeName )
+ CheckOIType ( theIO, SMESH::HYPOTHESIS, "Hypothesis", aTypeName ) ||
+ CheckOIType ( theIO, SMESH::ALGORITHM, "Algorithm", aTypeName ) ||
+ CheckOIType ( theIO, SMESH::MESH, "Mesh", aTypeName ) ||
+ CheckOIType ( theIO, SMESH::SUBMESH, "SubMesh", aTypeName ) ||
+ CheckOIType ( theIO, SMESH::GROUP, "Group", aTypeName )
)
return aTypeName;
aSO = aRefSObject; // Delete main Object instead of reference
listSO.push_back( aSO );
- std::list< _PTR(SObject) >::iterator itSO = listSO.begin();
+ std::list< _PTR(SObject) >::iterator itSO = --listSO.end();
for ( ; itSO != listSO.end(); ++itSO ) {
_PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
for (it->InitEx(false); it->More(); it->Next())
}
}
+ // Call mesh->Clear() to prevent loading mesh from file caused by hypotheses removal
+ for( It.Initialize( selected ); It.More(); It.Next()) // loop on selected IO's
+ {
+ Handle(SALOME_InteractiveObject) IObject = It.Value();
+ SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface< SMESH::SMESH_Mesh >( IObject );
+ if ( !mesh->_is_nil() )
+ mesh->Clear();
+ }
+
// Treat SO's in the list starting from the back
aStudyBuilder->NewCommand(); // There is a transaction
for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO )
if ( !SO ) continue;
std::string anEntry = SO->GetID();
- /** Erase graphical object **/
- if(SO->FindAttribute(anAttr, "AttributeIOR")){
- ViewManagerList aViewMenegers = anApp->viewManagers();
- ViewManagerList::const_iterator it = aViewMenegers.begin();
- for( ; it != aViewMenegers.end(); it++) {
- SUIT_ViewManager* vm = *it;
- int nbSf = vm ? vm->getViewsCount() : 0;
- if(vm) {
- QVector<SUIT_ViewWindow*> aViews = vm->getViews();
- for(int i = 0; i < nbSf; i++){
- SUIT_ViewWindow *sf = aViews[i];
- if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
- SMESH::RemoveActor(sf,anActor);
- }
- }
- }
- }
+ /** Erase graphical object and remove all its data **/
+ if(SO->FindAttribute(anAttr, "AttributeIOR")) {
+ SMESH::RemoveVisualObjectWithActors( anEntry.c_str(), true);
}
/** Remove an object from data structures **/
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO ));
*/
//=============================================================================
SMESHGUI::SMESHGUI() :
-SalomeApp_Module( "SMESH" ),
-LightApp_Module( "SMESH" )
+SalomeApp_Module( "SMESH" )
{
if ( CORBA::is_nil( myComponentSMESH ) )
{
myEventCallbackCommand->SetCallback( SMESHGUI::ProcessEvents );
myPriority = 0.0;
- SMESH::GetFilterManager();
- SMESH::GetPattern();
- SMESH::GetMeasurements();
-
/* load resources for all available meshers */
SMESH::InitAvailableHypotheses();
}
//=============================================================================
SMESHGUI::~SMESHGUI()
{
-#ifdef WITHGENERICOBJ
- SMESH::GetFilterManager()->UnRegister();
- SMESH::GetMeasurements()->UnRegister();
-#endif
- SMESH::GetFilterManager() = SMESH::FilterManager::_nil();
- SMESH::GetMeasurements() = SMESH::Measurements::_nil();
}
//=============================================================================
return autoUpdate && !exceeded;
}
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh,
+ int* entities, bool* limitExceeded, int* hidden )
+{
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ if ( !resMgr )
+ return false;
+
+ bool autoUpdate = resMgr->booleanValue( "SMESH", "auto_update", false );
+ long updateLimit = resMgr->integerValue( "SMESH", "update_limit", 500000 );
+ bool incrementalLimit = resMgr->booleanValue( "SMESH", "incremental_limit", false );
+
+ long requestedSize = theMesh->NbElements();
+
+ *entities = SMESH_Actor::eAllEntity;
+ *hidden = 0;
+
+ bool exceeded = updateLimit > 0 && requestedSize > updateLimit;
+
+ if ( limitExceeded ) *limitExceeded = autoUpdate && exceeded;
+
+ if ( incrementalLimit ) {
+ long nbOdElems = theMesh->Nb0DElements();
+ long nbEdges = theMesh->NbEdges();
+ long nbFaces = theMesh->NbFaces();
+ long nbVolumes = theMesh->NbVolumes();
+ long nbBalls = theMesh->NbBalls();
+ long total = 0;
+
+ if ( nbOdElems > 0 ) {
+ if ( total + nbOdElems > updateLimit ) {
+ *entities = *entities & ~SMESH_Actor::e0DElements;
+ *hidden = *hidden | SMESH_Actor::e0DElements;
+ }
+ else
+ exceeded = false;
+ }
+ total += nbOdElems;
+
+ if ( nbEdges > 0 ) {
+ if ( total + nbEdges > updateLimit ) {
+ *entities = *entities & ~SMESH_Actor::eEdges;
+ *hidden = *hidden | SMESH_Actor::eEdges;
+ }
+ else
+ exceeded = false;
+ }
+ total += nbEdges;
+
+ if ( nbFaces > 0 ) {
+ if ( total + nbFaces > updateLimit ) {
+ *entities = *entities & ~SMESH_Actor::eFaces;
+ *hidden = *hidden | SMESH_Actor::eFaces;
+ }
+ else
+ exceeded = false;
+ }
+ total += nbFaces;
+
+ if ( nbVolumes > 0 ) {
+ if ( total + nbVolumes > updateLimit ) {
+ *entities = *entities & ~SMESH_Actor::eVolumes;
+ *hidden = *hidden | SMESH_Actor::eVolumes;
+ }
+ else
+ exceeded = false;
+ }
+ total += nbVolumes;
+
+ if ( nbBalls > 0 ) {
+ if ( total + nbBalls > updateLimit ) {
+ *entities = *entities & ~SMESH_Actor::eBallElem;
+ *hidden = *hidden | SMESH_Actor::eBallElem;
+ }
+ else
+ exceeded = false;
+ }
+ total += nbBalls;
+ }
+
+ return autoUpdate && !exceeded;
+}
+
//=============================================================================
/*!
*
case 116:
case 115:
case 117:
+ case 118:
case 113:
case 112:
case 111: // IMPORT
case 143:
case 144:
case 145:
+ case 146:
+ case 147:
{
::ExportMeshToFile(theCommandID);
break;
case 214: // UPDATE
{
if(checkLock(aStudy)) break;
+ SUIT_OverrideCursor wc;
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
if (vtkwnd) {
SALOME_ListIteratorOfListIO It( to_process );
for ( ; It.More(); It.Next()) {
- MESSAGE("---");
+ MESSAGE("---");
Handle(SALOME_InteractiveObject) IOS = It.Value();
if (IOS->hasEntry()) {
- MESSAGE("---");
+ MESSAGE("---");
if (!SMESH::UpdateView(anAction, IOS->getEntry())) {
SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged();
break; // PAL16774 (Crash after display of many groups)
// PAL13338 + PAL15161 -->
if ( ( theCommandID==301 || theCommandID==302 ) && !checkLock(aStudy)) {
- MESSAGE("anAction = SMESH::eDisplayOnly");
+ MESSAGE("anAction = SMESH::eDisplayOnly");
SMESH::UpdateView();
SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged();
}
case 4035: // QUADRATIC TRIANGLE
case 4036: // QUADRATIC QUADRANGLE
case 4136: // BIQUADRATIC QUADRANGLE
+ case 4137: // BIQUADRATIC TRIANGLE
case 4037: // QUADRATIC TETRAHEDRON
case 4038: // QUADRATIC PYRAMID
case 4039: // QUADRATIC PENTAHEDRON
if(checkLock(aStudy)) break;
if ( vtkwnd ) {
EmitSignalDeactivateDialog();
- SMDSAbs_EntityType type;
+ SMDSAbs_EntityType type = SMDSEntity_Last;
switch (theCommandID) {
- case 4034:
- type = SMDSEntity_Quad_Edge; break;
- case 4035:
- type = SMDSEntity_Quad_Triangle; break;
- case 4036:
- type = SMDSEntity_Quad_Quadrangle; break;
- case 4136:
- type = SMDSEntity_BiQuad_Quadrangle; break;
- case 4037:
- type = SMDSEntity_Quad_Tetra; break;
- case 4038:
- type = SMDSEntity_Quad_Pyramid; break;
- case 4039:
- type = SMDSEntity_Quad_Penta; break;
- case 4040:
- type = SMDSEntity_Quad_Hexa;
- case 4140:
- type = SMDSEntity_TriQuad_Hexa;
- break;
- default:;
+ case 4034: type = SMDSEntity_Quad_Edge; break;
+ case 4035: type = SMDSEntity_Quad_Triangle; break;
+ case 4036: type = SMDSEntity_Quad_Quadrangle; break;
+ case 4136: type = SMDSEntity_BiQuad_Quadrangle; break;
+ case 4137: type = SMDSEntity_BiQuad_Triangle; break;
+ case 4037: type = SMDSEntity_Quad_Tetra; break;
+ case 4038: type = SMDSEntity_Quad_Pyramid; break;
+ case 4039: type = SMDSEntity_Quad_Penta; break;
+ case 4040: type = SMDSEntity_Quad_Hexa; break;
+ case 4140: type = SMDSEntity_TriQuad_Hexa; break;
+ default: break;
}
- ( new SMESHGUI_AddQuadraticElementDlg( this, type ) )->show();
+ if ( type != SMDSEntity_Last )
+ ( new SMESHGUI_AddQuadraticElementDlg( this, type ) )->show();
}
else {
SUIT_MessageBox::warning(SMESHGUI::desktop(),
SUIT_MessageBox::No ) == SUIT_MessageBox::Yes;
if( confirm ) {
try {
+ SUIT_OverrideCursor wc;
SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
int removed = aMeshEditor->RemoveOrphanNodes();
SUIT_MessageBox::information(SMESHGUI::desktop(),
break;
}
+ case 4070: // 0D_ON_ALL_NODES
+ startOperation( 4070 );
+ break;
+
case 5105: // Library of selection filters
{
static QList<int> aTypes;
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject );
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject );
if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) {
+ SUIT_OverrideCursor wc;
::Control( theCommandID );
break;
}
tr( "NOT_A_VTK_VIEWER" ) );
}
break;
+ case 6032:
+ OverallMeshQuality();
+ break;
case 9010:
{
+ SUIT_OverrideCursor wc;
LightApp_SelectionMgr* mgr = selectionMgr();
SALOME_ListIO selected; mgr->selectedObjects( selected );
}
case 9011:
{
+ SUIT_OverrideCursor wc;
LightApp_SelectionMgr* mgr = selectionMgr();
SALOME_ListIO selected; mgr->selectedObjects( selected );
}
case 501:
case 502:
+ case 503:
+ case 504:
+ case 505:
{
- int page = theCommandID == 501 ? SMESHGUI_MeasureDlg::MinDistance : SMESHGUI_MeasureDlg::BoundingBox;
+ int page = SMESHGUI_MeasureDlg::MinDistance;
+ if ( theCommandID == 502 )
+ page = SMESHGUI_MeasureDlg::BoundingBox;
+ else if ( theCommandID == 503 )
+ page = SMESHGUI_MeasureDlg::Length;
+ else if ( theCommandID == 504 )
+ page = SMESHGUI_MeasureDlg::Area;
+ else if ( theCommandID == 505 )
+ page = SMESHGUI_MeasureDlg::Volume;
+
EmitSignalDeactivateDialog();
SMESHGUI_MeasureDlg* dlg = new SMESHGUI_MeasureDlg( SMESHGUI::desktop(), page );
dlg->show();
break;
}
+ case 41:
+ ::sortChildren();
+ break;
+
}
anApp->updateActions(); //SRN: To update a Save button in the toolbar
const QString& theRule,
const int pId )
{
- int parentId = pId;
- if( pId!=-1 )
- parentId = popupMgr()->actionId( action( pId ) );
-
if( !popupMgr()->contains( popupMgr()->actionId( action( id ) ) ) )
- popupMgr()->insert( action( id ), parentId, 0 );
+ popupMgr()->insert( action( id ), pId, 0 );
QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality();
QString dc = "selcount"; // VSR : insetad of QtxPopupSelection::defSelCountParam()
// ----- create actions --------------
- createSMESHAction( 111, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) );
+ //createSMESHAction( 111, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) );
createSMESHAction( 112, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_U) );
createSMESHAction( 113, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) );
createSMESHAction( 114, "NUM" );
- createSMESHAction( 115, "IMPORT_STL" );
+ createSMESHAction( 115, "IMPORT_STL" );
createSMESHAction( 116, "IMPORT_CGNS" );
createSMESHAction( 117, "IMPORT_SAUV" );
+ createSMESHAction( 118, "IMPORT_GMF" );
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( 142, "CGNS");
+ createSMESHAction( 144, "SAUV");
+ createSMESHAction( 146, "GMF" );
+ createSMESHAction( 124, "DAT" );
+ createSMESHAction( 125, "MED" );
+ createSMESHAction( 126, "UNV" );
+ createSMESHAction( 141, "STL" );
+ createSMESHAction( 143, "CGNS");
+ createSMESHAction( 145, "SAUV");
+ createSMESHAction( 147, "GMF" );
createSMESHAction( 150, "FILE_INFO" );
createSMESHAction( 33, "DELETE", "ICON_DELETE", Qt::Key_Delete );
createSMESHAction( 5105, "SEL_FILTER_LIB" );
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( 6032, "OVERALL_MESH_QUALITY" );
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( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" );
createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" );
createSMESHAction( 4136, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" );
+ createSMESHAction( 4137, "BIQUADRATIC_TRIANGLE", "ICON_DLG_BIQUADRATIC_TRIANGLE" );
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( 4067, "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" );
createSMESHAction( 4068, "SCALE", "ICON_DLG_MESH_SCALE" );
createSMESHAction( 4069, "DUPLICATE_NODES", "ICON_SMESH_DUPLICATE_NODES" );
+ createSMESHAction( 4070, "0D_ON_ALL_NODES", "ICON_0D_ON_ALL_NODES" );
createSMESHAction( 407, "INV", "ICON_DLG_MESH_DIAGONAL" );
createSMESHAction( 408, "UNION2", "ICON_UNION2TRI" );
createSMESHAction( 409, "ORIENT", "ICON_DLG_MESH_ORIENTATION" );
createSMESHAction( 501, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" );
createSMESHAction( 502, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" );
+ createSMESHAction( 503, "MEASURE_LENGTH", "ICON_MEASURE_LENGTH" );
+ createSMESHAction( 504, "MEASURE_AREA", "ICON_MEASURE_AREA" );
+ createSMESHAction( 505, "MEASURE_VOLUME", "ICON_MEASURE_VOLUME" );
createSMESHAction( 300, "HIDE" );
createSMESHAction( 301, "SHOW" );
createSMESHAction( 302, "DISPLAY_ONLY" );
+ createSMESHAction( 41, "SORT_CHILD_ITEMS" );
+
// ----- create menu --------------
int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ),
editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ),
addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ),
removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ),
renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
- transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 );
+ transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ),
+ basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 );
- createMenu( 111, importId, -1 );
+ //createMenu( 111, importId, -1 );
createMenu( 112, importId, -1 );
createMenu( 113, importId, -1 );
createMenu( 115, importId, -1 );
createMenu( 116, importId, -1 );
#endif
createMenu( 117, importId, -1 );
+ createMenu( 118, importId, -1 );
createMenu( 121, exportId, -1 );
createMenu( 122, exportId, -1 );
createMenu( 123, exportId, -1 );
createMenu( 142, exportId, -1 ); // export to CGNS
#endif
createMenu( 144, exportId, -1 ); // export to SAUV
+ createMenu( 146, exportId, -1 ); // export to GMF
createMenu( separator(), fileId, 10 );
createMenu( 33, editId, -1 );
createMenu( 6024, volumeId, -1 );
createMenu( 6026, volumeId, -1 );
createMenu( 6031, volumeId, -1 );
+ createMenu( separator(), ctrlId, -1 );
+ createMenu( 6032, ctrlId, -1 );
createMenu( 4000, addId, -1 );
createMenu( 4009, addId, -1 );
+ createMenu( 4070, addId, -1 );
createMenu( 4008, addId, -1 );
createMenu( 4010, addId, -1 );
createMenu( 4021, addId, -1 );
createMenu( separator(), addId, -1 );
createMenu( 4034, addId, -1 );
createMenu( 4035, addId, -1 );
+ createMenu( 4137, addId, -1 );
createMenu( 4036, addId, -1 );
createMenu( 4136, addId, -1 );
createMenu( 4037, addId, -1 );
createMenu( 501, measureId, -1 );
createMenu( 502, measureId, -1 );
+ createMenu( 503, basicPropId, -1 );
+ createMenu( 504, basicPropId, -1 );
+ createMenu( 505, basicPropId, -1 );
createMenu( 214, viewId, -1 );
// ----- create toolbars --------------
- int meshTb = createTool( tr( "TB_MESH" ) ),
- ctrlTb = createTool( tr( "TB_CTRL" ) ),
- addRemTb = createTool( tr( "TB_ADD_REMOVE" ) ),
- modifyTb = createTool( tr( "TB_MODIFY" ) ),
- dispModeTb = createTool( tr( "TB_DISP_MODE" ) );
+ int meshTb = createTool( tr( "TB_MESH" ) ),
+ info = createTool( tr( "TB_INFO" ) ),
+ groupTb = createTool( tr( "TB_GROUP" ) ),
+ ctrl0dTb = createTool( tr( "TB_CTRL0D" ) ),
+ ctrl1dTb = createTool( tr( "TB_CTRL1D" ) ),
+ ctrl2dTb = createTool( tr( "TB_CTRL2D" ) ),
+ ctrl3dTb = createTool( tr( "TB_CTRL3D" ) ),
+ addElemTb = createTool( tr( "TB_ADD" ) ),
+ addNonElemTb = createTool( tr( "TB_ADDNON" ) ),
+ remTb = createTool( tr( "TB_REM" ) ),
+ renumbTb = createTool( tr( "TB_RENUMBER" ) ),
+ transformTb = createTool( tr( "TB_TRANSFORM" ) ),
+ modifyTb = createTool( tr( "TB_MODIFY" ) ),
+ measuremTb = createTool( tr( "TB_MEASUREM" ) ),
+ dispModeTb = createTool( tr( "TB_DISP_MODE" ) );
createTool( 702, meshTb );
createTool( 703, meshTb );
createTool( 711, meshTb );
createTool( 712, meshTb );
createTool( 713, meshTb );
- createTool( separator(), meshTb );
- createTool( 801, meshTb );
- createTool( 806, meshTb );
- createTool( 802, meshTb );
- createTool( 803, meshTb );
- //createTool( 815, meshTb );
- createTool( separator(), meshTb );
- createTool( 900, meshTb );
+
+ createTool( 801, groupTb );
+ createTool( 806, groupTb );
+ createTool( 802, groupTb );
+ createTool( 803, groupTb );
+
+ createTool( 900, info );
//createTool( 902, 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( 6027, ctrlTb );
- createTool( 6018, ctrlTb );
- createTool( 6019, ctrlTb );
- createTool( 6011, ctrlTb );
- createTool( 6012, ctrlTb );
- createTool( 6013, ctrlTb );
- createTool( 6014, 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( 4009, addRemTb );
- createTool( 4008, addRemTb );
- createTool( 4010, addRemTb );
- createTool( 4021, addRemTb );
- createTool( 4022, 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 );
- createTool( 4044, addRemTb );
- createTool( 4043, addRemTb );
- createTool( separator(), addRemTb );
- createTool( 4051, addRemTb );
- createTool( 4052, addRemTb );
- createTool( separator(), addRemTb );
- createTool( 4061, addRemTb );
- createTool( 4062, addRemTb );
- createTool( 4063, addRemTb );
- createTool( 4068, addRemTb );
- createTool( 4064, addRemTb );
- createTool( 4065, addRemTb );
- createTool( 4066, addRemTb );
- createTool( 4069, addRemTb );
- createTool( separator(), addRemTb );
+ createTool( 904, info );
+
+ createTool( 6005, ctrl0dTb );
+ createTool( 6028, ctrl0dTb );
+
+ createTool( 6002, ctrl1dTb );
+ createTool( 6003, ctrl1dTb );
+ createTool( 6001, ctrl1dTb );
+ createTool( 6004, ctrl1dTb );
+ createTool( 6029, ctrl1dTb );
+
+ createTool( 6021, ctrl2dTb );
+ createTool( 6025, ctrl2dTb );
+ createTool( 6027, ctrl2dTb );
+ createTool( 6018, ctrl2dTb );
+ createTool( 6019, ctrl2dTb );
+ createTool( 6011, ctrl2dTb );
+ createTool( 6012, ctrl2dTb );
+ createTool( 6013, ctrl2dTb );
+ createTool( 6014, ctrl2dTb );
+ createTool( 6015, ctrl2dTb );
+ createTool( 6016, ctrl2dTb );
+ createTool( 6022, ctrl2dTb );
+ createTool( 6030, ctrl2dTb );
+
+ createTool( 6017, ctrl3dTb );
+ createTool( 6009, ctrl3dTb );
+ createTool( 6023, ctrl3dTb );
+ createTool( 6024, ctrl3dTb );
+ createTool( 6026, ctrl3dTb );
+ createTool( 6031, ctrl3dTb );
+
+ createTool( 4000, addElemTb );
+ createTool( 4009, addElemTb );
+ createTool( 4070, addElemTb );
+ createTool( 4008, addElemTb );
+ createTool( 4010, addElemTb );
+ createTool( 4021, addElemTb );
+ createTool( 4022, addElemTb );
+ createTool( 4023, addElemTb );
+ createTool( 4031, addElemTb );
+ createTool( 4032, addElemTb );
+ createTool( 4133, addElemTb );
+ createTool( 4134, addElemTb );
+ createTool( 4135, addElemTb );
+ createTool( 4033, addElemTb );
+
+ createTool( 4034, addNonElemTb );
+ createTool( 4035, addNonElemTb );
+ createTool( 4137, addNonElemTb );
+ createTool( 4036, addNonElemTb );
+ createTool( 4136, addNonElemTb );
+ createTool( 4037, addNonElemTb );
+ createTool( 4038, addNonElemTb );
+ createTool( 4039, addNonElemTb );
+ createTool( 4040, addNonElemTb );
+ createTool( 4140, addNonElemTb );
+
+ createTool( 4041, remTb );
+ createTool( 4042, remTb );
+ createTool( 4044, remTb );
+ createTool( 4043, remTb );
+
+ createTool( 4051, renumbTb );
+ createTool( 4052, renumbTb );
+
+
+ createTool( 4061, transformTb );
+ createTool( 4062, transformTb );
+ createTool( 4063, transformTb );
+ createTool( 4068, transformTb );
+ createTool( 4064, transformTb );
+ createTool( 4065, transformTb );
+ createTool( 4066, transformTb );
+ createTool( 4069, transformTb );
createTool( 4067,modifyTb );
createTool( 407, modifyTb );
createTool( 417, modifyTb );
createTool( 418, modifyTb );
+ createTool( 501, measuremTb );
+
createTool( 214, dispModeTb );
QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality();
QString OB = "'ObjectBrowser'",
View = "'" + SVTK_Viewer::Type() + "'",
pat = "'%1'",
- mesh = pat.arg( SMESHGUI_Selection::typeName( MESH ) ),
- group = pat.arg( SMESHGUI_Selection::typeName( GROUP ) ),
- hypo = pat.arg( SMESHGUI_Selection::typeName( HYPOTHESIS ) ),
- algo = pat.arg( SMESHGUI_Selection::typeName( ALGORITHM ) ),
+ mesh = pat.arg( SMESHGUI_Selection::typeName( SMESH::MESH ) ),
+ group = pat.arg( SMESHGUI_Selection::typeName( SMESH::GROUP ) ),
+ hypo = pat.arg( SMESHGUI_Selection::typeName( SMESH::HYPOTHESIS ) ),
+ algo = pat.arg( SMESHGUI_Selection::typeName( SMESH::ALGORITHM ) ),
elems = QString( "'%1' '%2' '%3' '%4' '%5' '%6'" ).
- arg( SMESHGUI_Selection::typeName( SUBMESH_VERTEX ) ).
- arg( SMESHGUI_Selection::typeName( SUBMESH_EDGE ) ).
- arg( SMESHGUI_Selection::typeName( SUBMESH_FACE ) ).
- arg( SMESHGUI_Selection::typeName( SUBMESH_SOLID ) ).
- arg( SMESHGUI_Selection::typeName( SUBMESH_COMPOUND ) ).
- arg( SMESHGUI_Selection::typeName( SUBMESH ) ),
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_VERTEX ) ).
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_EDGE ) ).
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_FACE ) ).
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_SOLID ) ).
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_COMPOUND ) ).
+ arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH ) ),
subMesh = elems,
mesh_part = mesh + " " + subMesh + " " + group,
mesh_group = mesh + " " + group,
createPopupItem( 214, OB, mesh_part ); // UPDATE
createPopupItem( 900, OB, mesh_part ); // ADV_INFO
createPopupItem( 904, OB, mesh_group ); // FIND_ELEM
+ createPopupItem( 6032, OB, mesh_part ); // CTRL_INFO
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 801, OB, mesh ); // CREATE_GROUP
createPopupItem( 806, OB, mesh ); // CREATE_GEO_GROUP
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_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
+ int anId = popupMgr()->insert( tr( "MEN_EXPORT" ), -1, -1 ); // EXPORT submenu
+ createPopupItem( 125, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_MED
+ createPopupItem( 126, OB, mesh_group, only_one_non_empty, anId ); // EXPORT_UNV
+ createPopupItem( 141, OB, mesh_group, only_one_2D, anId ); // EXPORT_STL
#ifdef WITH_CGNS
- createPopupItem( 143, OB, mesh_group, multiple_non_empty ); // EXPORT_CGNS
+ createPopupItem( 143, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_CGNS
#endif
- createPopupItem( 145, OB, mesh_group, multiple_non_empty ); // EXPORT_SAUV
+ createPopupItem( 145, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_SAUV
+ createPopupItem( 147, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_GMF
+ createPopupItem( 124, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_DAT
createPopupItem( 33, OB, mesh_part + " " + hyp_alg ); // DELETE
createPopupItem( 813, OB, group ); // DEL_GROUP with contents
popupMgr()->insert( separator(), -1, 0 );
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 214, View, mesh_part ); // UPDATE
createPopupItem( 900, View, mesh_part ); // ADV_INFO
+ createPopupItem( 6032,View, mesh_part ); // CTRL_INFO
createPopupItem( 904, View, mesh ); // FIND_ELEM
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 1137, OB + " " + View, mesh, "&& isAutoColor" ); // DISABLE_AUTO_COLOR
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_part );
popupMgr()->insert( separator(), -1, -1 );
+ popupMgr()->insert( action( 41 ), -1, -1 );
+ popupMgr()->setRule( action( 41 ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule );
+ popupMgr()->insert( separator(), -1, -1 );
+
connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ),
this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) );
// 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_ImportModuleNoBlock((char*)"salome_pluginsmanager");
- if(pluginsmanager==NULL)
+ PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
+ if ( !pluginsmanager ) {
PyErr_Print();
- else
- {
- PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toStdString().c_str(),tr("SMESH_PLUGINS_OTHER").toStdString().c_str());
- if(result==NULL)
- PyErr_Print();
- Py_XDECREF(result);
- }
+ }
+ else {
+ PyObjWrapper result = PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toStdString().c_str(),tr("SMESH_PLUGINS_OTHER").toStdString().c_str());
+ if ( !result )
+ PyErr_Print();
+ }
PyGILState_Release(gstate);
- // end of GEOM plugins loading
+ // end of SMESH plugins loading
// Reset actions accelerator keys
- action(111)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); // Import DAT
+ //action(111)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); // Import DAT
action(112)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_U)); // Import UNV
action(113)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); // Import MED
EmitSignalCloseAllDialogs();
// Unset actions accelerator keys
- action(111)->setShortcut(QKeySequence()); // Import DAT
+ //action(111)->setShortcut(QKeySequence()); // Import DAT
action(112)->setShortcut(QKeySequence()); // Import UNV
action(113)->setShortcut(QKeySequence()); // Import MED
int genTab = addPreference( tr( "PREF_TAB_GENERAL" ) );
int autoUpdate = addPreference( tr( "PREF_AUTO_UPDATE" ), genTab, LightApp_Preferences::Auto, "SMESH", "auto_update" );
+ setPreferenceProperty( autoUpdate, "columns", 2 );
int lim = addPreference( tr( "PREF_UPDATE_LIMIT" ), autoUpdate, LightApp_Preferences::IntSpin, "SMESH", "update_limit" );
setPreferenceProperty( lim, "min", 0 );
setPreferenceProperty( lim, "max", 100000000 );
setPreferenceProperty( lim, "step", 1000 );
setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
+ addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" );
int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab );
setPreferenceProperty( qaGroup, "columns", 2 );
int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab );
setPreferenceProperty( exportgroup, "columns", 2 );
addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" );
- addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" );
+ //addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" );
int computeGroup = addPreference( tr( "PREF_GROUP_COMPUTE" ), genTab );
setPreferenceProperty( computeGroup, "columns", 2 );
setPreferenceProperty( notifyMode, "indexes", indices );
int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab );
- setPreferenceProperty( infoGroup, "columns", 4 );
+ setPreferenceProperty( infoGroup, "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" ) );
setPreferenceProperty( nodesLim, "max", 10000000 );
setPreferenceProperty( nodesLim, "step", 10000 );
setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
+ int ctrlLim = addPreference( tr( "PREF_CTRL_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_controls_limit" );
+ setPreferenceProperty( ctrlLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
+ setPreferenceProperty( ctrlLim, "min", 0 );
+ setPreferenceProperty( ctrlLim, "max", 10000000 );
+ setPreferenceProperty( ctrlLim, "step", 1000 );
+ addPreference( tr( "PREF_ELEM_INFO_GRP_DETAILS" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "elem_info_grp_details" );
+ addPreference( tr( "PREF_DUMP_BASE_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_base" );
+ addPreference( tr( "PREF_DUMP_ELEM_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_elem" );
+ addPreference( tr( "PREF_DUMP_ADD_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_add" );
+ addPreference( tr( "PREF_DUMP_CTRL_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_ctrl" );
int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab );
setPreferenceProperty( segGroup, "columns", 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, "min", 1 );
setPreferenceProperty( chunkSize, "max", 1000 );
setPreferenceProperty( chunkSize, "step", 50 );
setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab );
- setPreferenceProperty( elemGroup, "columns", 2 );
+ //setPreferenceProperty( elemGroup, "columns", 2 );
- int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" );
+ int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" );
+ setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") );
+ ColorId = addPreference( tr( "PREF_VOLUME" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "volume_color" );
+ setPreferenceProperty( ColorId, "text", tr("PREF_REVERSEDVOLUME") );
addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" );
addPreference( tr( "PREF_BALL_COLOR" ), elemGroup, LightApp_Preferences::Color, "SMESH", "ball_elem_color" );
addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" );
addPreference( tr( "PREF_WIREFRAME" ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" );
+ addPreference( tr( "PREF_PREVIEW_COLOR" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "preview_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" );
+ addPreference( tr( "PREF_GRP_DEF_COLOR" ), grpGroup, LightApp_Preferences::Color, "SMESH", "default_grp_color" );
int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "elem0d_size");
LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size");
int elemW = addPreference(tr("PREF_WIDTH"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "element_width");
+ int outW = addPreference(tr("PREF_OUTLINE_WIDTH"), elemGroup,
+ LightApp_Preferences::IntSpin, "SMESH", "outline_width");
int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "shrink_coeff");
setPreferenceProperty( elemW, "min", 1 );
setPreferenceProperty( elemW, "max", 5 );
+ setPreferenceProperty( outW, "min", 1 );
+ setPreferenceProperty( outW, "max", 5 );
+
setPreferenceProperty( shrink, "min", 0 );
setPreferenceProperty( shrink, "max", 100 );
+ int numGroup = addPreference( tr( "PREF_GROUP_NUMBERING" ), meshTab );
+ setPreferenceProperty( numGroup, "columns", 2 );
+
+ addPreference( tr( "PREF_NUMBERING_NODE" ), numGroup, LightApp_Preferences::Color, "SMESH", "numbering_node_color" );
+ addVtkFontPref( tr( "PREF_NUMBERING_FONT" ), numGroup, "numbering_node_font", true );
+
+ addPreference( tr( "PREF_NUMBERING_ELEM" ), numGroup, LightApp_Preferences::Color, "SMESH", "numbering_elem_color" );
+ addVtkFontPref( tr( "PREF_NUMBERING_FONT" ), numGroup, "numbering_elem_font", true );
+
int orientGroup = addPreference( tr( "PREF_GROUP_FACES_ORIENTATION" ), meshTab );
setPreferenceProperty( orientGroup, "columns", 1 );
QString val = aResourceMgr->stringValue( "SMESH", name );
myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() );
}
+ else if ( name == QString( "numbering_node_color" ) || name == QString( "numbering_node_font" ) ) {
+ SMESH::UpdateFontProp( this );
+ }
+ else if ( name == QString( "numbering_elem_color" ) || name == QString( "numbering_elem_font" ) ) {
+ SMESH::UpdateFontProp( this );
+ }
if(aWarning.size() != 0){
aWarning += "The default values are applied instead.";
case 904: // Find element
op = new SMESHGUI_FindElemByPointOp();
break;
- case 4067: // make mesh pass through point
+ case 4067: // Make mesh pass through point
op = new SMESHGUI_MakeNodeAtPointOp();
break;
+ case 4070: // Create 0D elements on all nodes
+ op = new SMESHGUI_Add0DElemsOnAllNodesOp();
+ break;
default:
break;
}
aColor.setHsv( aHue, 255, 255 );
SALOMEDS::Color aSColor;
- aSColor.R = (double)aColor.red() / 255.0;
- aSColor.G = (double)aColor.green() / 255.0;
- aSColor.B = (double)aColor.blue() / 255.0;
+ aSColor.R = aColor.redF();
+ aSColor.G = aColor.greenF();
+ aSColor.B = aColor.blueF();
return aSColor;
}
-const char gSeparator = '_'; // character used to separate parameter names
-const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
-const char gPathSep = '|'; // character used to separate paths
+const char* gSeparator = "_"; // character used to separate parameter names
+const char* gDigitsSep = ":"; // character used to separate numeric parameter values (color = r:g:b)
+const char* gPathSep = "|"; // character used to separate paths
/*!
* \brief Store visual parameters
*/
void SMESHGUI::storeVisualParameters (int savePoint)
{
+ // localizing
+ Kernel_Utils::Localizer loc;
+
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
if (!appStudy || !appStudy->studyDS())
return;
aPropertyName += gSeparator;
aPropertyName += QString::number( anId );
- QString aPropertyValue = QString::number( (int)aPlane->GetOrientation() ).toLatin1().constData();
+ QString aPropertyValue = QString::number( (int)aPlane->PlaneMode ).toLatin1().constData();
aPropertyValue += gDigitsSep;
- aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData();
+ aPropertyValue += QString::number( aPlane->IsOpenGLClipping ).toLatin1().constData();
aPropertyValue += gDigitsSep;
- aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData();
- aPropertyValue += gDigitsSep;
- aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData();
+ if ( aPlane->PlaneMode == SMESH::Absolute ) {
+ aPropertyValue += QString::number( aPlane->myAbsoluteOrientation ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->X ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->Y ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->Z ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->Dx ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->Dy ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->Dz ).toLatin1().constData();
+ }
+ else if ( aPlane->PlaneMode == SMESH::Relative ) {
+ aPropertyValue += QString::number( (int)aPlane->myRelativeOrientation ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData();
+ aPropertyValue += gDigitsSep;
+ aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData();
+ }
ip->setProperty( aPropertyName.toStdString(), aPropertyValue.toStdString() );
}
// Displayed entities
unsigned int aMode = aSmeshActor->GetEntityMode();
- bool isE = aMode & SMESH_Actor::eEdges;
- bool isF = aMode & SMESH_Actor::eFaces;
- bool isV = aMode & SMESH_Actor::eVolumes;
+ bool isE = aMode & SMESH_Actor::eEdges;
+ bool isF = aMode & SMESH_Actor::eFaces;
+ bool isV = aMode & SMESH_Actor::eVolumes;
+ bool is0d = aMode & SMESH_Actor::e0DElements;
+ bool isB = aMode & SMESH_Actor::eBallElem;
QString modeStr ("e");
modeStr += gDigitsSep; modeStr += QString::number(isE);
modeStr += gDigitsSep; modeStr += QString::number(isF);
modeStr += gDigitsSep; modeStr += "v";
modeStr += gDigitsSep; modeStr += QString::number(isV);
+ modeStr += gDigitsSep; modeStr += "0d";
+ modeStr += gDigitsSep; modeStr += QString::number(is0d);
+ modeStr += gDigitsSep; modeStr += "b";
+ modeStr += gDigitsSep; modeStr += QString::number(isB);
param = vtkParam + "Entities";
ip->setParameter(entry, param, modeStr.toLatin1().data());
- // Colors (surface:edge:)
- vtkFloatingPointType r, g, b;
+ // Colors
+ double r, g, b;
int delta;
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);
-
- colorStr += gDigitsSep; colorStr += "backsurface";
- colorStr += gDigitsSep; colorStr += QString::number(delta);
-
+ QStringList colorStr;
+ colorStr << "surface";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
+
+ colorStr << "backsurface";
+ colorStr << QString::number(delta);
+
+ aSmeshActor->GetVolumeColor(r, g, b, delta);
+ colorStr << "volume";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
+ colorStr << QString::number(delta);
aSmeshActor->GetEdgeColor(r, g, b);
- colorStr += gDigitsSep; colorStr += "edge";
- colorStr += gDigitsSep; colorStr += QString::number(r);
- colorStr += gDigitsSep; colorStr += QString::number(g);
- colorStr += gDigitsSep; colorStr += QString::number(b);
+ colorStr << "edge";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
aSmeshActor->GetNodeColor(r, g, b);
- colorStr += gDigitsSep; colorStr += "node";
- colorStr += gDigitsSep; colorStr += QString::number(r);
- colorStr += gDigitsSep; colorStr += QString::number(g);
- colorStr += gDigitsSep; colorStr += QString::number(b);
+ colorStr << "node";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ 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);
+ colorStr << "outline";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
+
+ aSmeshActor->Get0DColor(r, g, b);
+ colorStr << "elem0d";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
+
+ aSmeshActor->GetBallColor(r, g, b);
+ colorStr << "ball";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
+
+ aSmeshActor->GetFacesOrientationColor(r, g, b);
+ colorStr << "orientation";
+ colorStr << QString::number(r);
+ colorStr << QString::number(g);
+ colorStr << QString::number(b);
param = vtkParam + "Colors";
- ip->setParameter(entry, param, colorStr.toLatin1().data());
-
- // Sizes of lines and points
- QString sizeStr ("line");
- sizeStr += gDigitsSep; sizeStr += QString::number((int)aSmeshActor->GetLineWidth());
- sizeStr += gDigitsSep; sizeStr += "shrink";
- sizeStr += gDigitsSep; sizeStr += QString::number(aSmeshActor->GetShrinkFactor());
+ ip->setParameter(entry, param, qPrintable(colorStr.join(gDigitsSep)));
+
+ // Sizes
+ QStringList sizeStr;
+ sizeStr << "line";
+ sizeStr << QString::number((int)aSmeshActor->GetLineWidth());
+ sizeStr << "outline";
+ sizeStr << QString::number((int)aSmeshActor->GetOutlineWidth());
+ sizeStr << "elem0d";
+ sizeStr << QString::number((int)aSmeshActor->Get0DSize());
+ sizeStr << "ball";
+ sizeStr << QString::number((int)aSmeshActor->GetBallSize());
+ sizeStr << "shrink";
+ sizeStr << QString::number(aSmeshActor->GetShrinkFactor());
+ sizeStr << "orientation";
+ sizeStr << QString::number(aSmeshActor->GetFacesOrientationScale());
+ sizeStr << QString::number(aSmeshActor->GetFacesOrientation3DVectors());
param = vtkParam + "Sizes";
- ip->setParameter(entry, param, sizeStr.toLatin1().data());
+ ip->setParameter(entry, param, qPrintable(sizeStr.join(gDigitsSep)));
// Point marker
QString markerStr;
// data structures for clipping planes processing
typedef struct {
int Id;
- vtkIdType Orientation;
- vtkFloatingPointType Distance;
- vtkFloatingPointType Angle[2];
+ int Mode;
+ bool isOpenGLClipping;
+ vtkIdType RelativeOrientation;
+ double Distance;
+ double Angle[2];
+ int AbsoluteOrientation;
+ double X, Y, Z, Dx, Dy, Dz;
} TPlaneData;
typedef std::list<TPlaneData> TPlaneDataList;
typedef std::map<int, TPlaneDataList> TPlaneDataMap;
*/
void SMESHGUI::restoreVisualParameters (int savePoint)
{
+ // localizing
+ Kernel_Utils::Localizer loc;
+
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
if (!appStudy || !appStudy->studyDS())
return;
continue;
QStringList aPropertyValueList = aPropertyValue.split( gDigitsSep, QString::SkipEmptyParts );
- if( aPropertyValueList.size() != 4 )
+ if( aPropertyValueList.size() != 6 && aPropertyValueList.size() != 9 )
continue;
TPlaneData aPlaneData;
aPlaneData.Id = aClippingPlaneId;
ok = false;
- aPlaneData.Orientation = aPropertyValueList[0].toInt( &ok );
+ aPlaneData.Mode = aPropertyValueList[0].toInt( &ok );
if( !ok )
continue;
-
+
ok = false;
- aPlaneData.Distance = aPropertyValueList[1].toDouble( &ok );
+ aPlaneData.isOpenGLClipping = aPropertyValueList[1].toInt( &ok );
if( !ok )
continue;
- ok = false;
- aPlaneData.Angle[0] = aPropertyValueList[2].toDouble( &ok );
- if( !ok )
- continue;
+ if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Absolute )
+ {
+ ok = false;
+ aPlaneData.AbsoluteOrientation = aPropertyValueList[2].toInt( &ok );
+ if( !ok )
+ continue;
- ok = false;
- aPlaneData.Angle[1] = aPropertyValueList[3].toDouble( &ok );
- if( !ok )
- continue;
+ ok = false;
+ aPlaneData.X = aPropertyValueList[3].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Y = aPropertyValueList[4].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Z = aPropertyValueList[5].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Dx = aPropertyValueList[6].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Dy = aPropertyValueList[7].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Dz = aPropertyValueList[8].toDouble( &ok );
+ if( !ok )
+ continue;
+ }
+ else if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Relative ) {
+ ok = false;
+ aPlaneData.RelativeOrientation = aPropertyValueList[2].toInt( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Distance = aPropertyValueList[3].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Angle[0] = aPropertyValueList[4].toDouble( &ok );
+ if( !ok )
+ continue;
+
+ ok = false;
+ aPlaneData.Angle[1] = aPropertyValueList[5].toDouble( &ok );
+ if( !ok )
+ continue;
+ }
TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ];
aPlaneDataList.push_back( aPlaneData );
// Displayed entities
else if (paramNameStr == "Entities") {
QStringList mode = val.split(gDigitsSep, QString::SkipEmptyParts);
- if (mode.count() == 6) {
- if (mode[0] != "e" || mode[2] != "f" || mode[4] != "v") {
- MESSAGE("Invalid order of data in Entities, must be: "
- "e:0/1:f:0/1:v:0/1");
- }
- else {
- unsigned int aMode = aSmeshActor->GetEntityMode();
- unsigned int aNewMode =
- (int(SMESH_Actor::eEdges ) * mode[1].toInt()) |
- (int(SMESH_Actor::eFaces ) * mode[3].toInt()) |
- (int(SMESH_Actor::eVolumes) * mode[5].toInt());
- if (aNewMode != aMode)
- aSmeshActor->SetEntityMode(aNewMode);
+ int aEntityMode = SMESH_Actor::eAllEntity;
+ for ( int i = 0; i < mode.count(); i+=2 ) {
+ if ( i < mode.count()-1 ) {
+ QString type = mode[i];
+ bool val = mode[i+1].toInt();
+ if ( type == "e" && !val )
+ aEntityMode = aEntityMode & ~SMESH_Actor::eEdges;
+ else if ( type == "f" && !val )
+ aEntityMode = aEntityMode & ~SMESH_Actor::eFaces;
+ else if ( type == "v" && !val )
+ aEntityMode = aEntityMode & ~SMESH_Actor::eVolumes;
+ else if ( type == "0d" && !val )
+ aEntityMode = aEntityMode & ~SMESH_Actor::e0DElements;
+ else if ( type == "b" && !val )
+ aEntityMode = aEntityMode & ~SMESH_Actor::eBallElem;
}
}
+ aSmeshActor->SetEntityMode( aEntityMode );
}
// Colors
else if (paramNameStr == "Colors") {
QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts);
- if (colors.count() == 16 || colors.count() == 18 ) {
- if (colors[0] != "surface" || colors[4] != "backsurface" ||
- (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 or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b");
+ QColor nodeColor;
+ QColor edgeColor;
+ QColor faceColor;
+ QColor volumeColor;
+ QColor elem0dColor;
+ QColor ballColor;
+ QColor outlineColor;
+ QColor orientationColor;
+ int deltaF;
+ int deltaV;
+ QColor c;
+ double r, g, b;
+ bool bOk;
+ // below lines are required to get default values for delta coefficients
+ // of backface color for faces and color of reversed volumes
+ SMESH::GetColor( "SMESH", "fill_color", c, deltaF, "0,170,255|-100" );
+ SMESH::GetColor( "SMESH", "volume_color", c, deltaV, "255,0,170|-100" );
+ for ( int i = 0; i < colors.count(); i++ ) {
+ QString type = colors[i];
+ if ( type == "surface" ) {
+ // face color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ faceColor.setRgbF( r, g, b );
+ i += 3;
}
- else {
- 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);
+ else if ( type == "backsurface" ) {
+ // backface color can be defined in several ways
+ // - in old versions, it is set as rgb triple r:g:b - this was is unsupported now
+ // - in latest versions, it is set as delta coefficient
+ bool rgbOk = false, deltaOk;
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ int delta = colors[i+1].toInt( &deltaOk );
+ i++; // shift index
+ if ( i+1 < colors.count() ) // index is shifted to 1
+ g = colors[i+1].toDouble( &rgbOk );
+ if ( rgbOk ) i++; // shift index
+ if ( rgbOk && i+1 < colors.count() ) // index is shifted to 2
+ b = colors[i+1].toDouble( &rgbOk );
+ if ( rgbOk ) i++;
+ // - as currently there's no way to set directly backsurface color as it was before,
+ // we ignore old dump where r,g,b triple was set
+ // - also we check that delta parameter is set properly
+ if ( !rgbOk && deltaOk )
+ deltaF = delta;
+ }
+ else if ( type == "volume" ) {
+ // volume color is set by 4 values r:g:b:delta, where
+ // - r,g,b - is a normal volume rgb color components
+ // - delta - is a reversed volume color delta coefficient
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+4 >= colors.count() ) break; // format error
+ int delta = colors[i+4].toInt( &bOk );
+ if ( !bOk ) break; // format error
+ volumeColor.setRgbF( r, g, b );
+ deltaV = delta;
+ i += 4;
+ }
+ else if ( type == "edge" ) {
+ // edge color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ edgeColor.setRgbF( r, g, b );
+ i += 3;
+ }
+ else if ( type == "node" ) {
+ // node color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ nodeColor.setRgbF( r, g, b );
+ i += 3;
+ }
+ else if ( type == "elem0d" ) {
+ // 0d element color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ elem0dColor.setRgbF( r, g, b );
+ i += 3;
+ }
+ else if ( type == "ball" ) {
+ // ball color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ ballColor.setRgbF( r, g, b );
+ i += 3;
+ }
+ else if ( type == "outline" ) {
+ // outline color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ outlineColor.setRgbF( r, g, b );
+ i += 3;
+ }
+ else if ( type == "orientation" ) {
+ // orientation color is set by 3 values r:g:b, where
+ // - r,g,b - is rgb color components
+ if ( i+1 >= colors.count() ) break; // format error
+ r = colors[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= colors.count() ) break; // format error
+ g = colors[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+3 >= colors.count() ) break; // format error
+ b = colors[i+3].toDouble( &bOk ); if ( !bOk ) break; // format error
+ orientationColor.setRgbF( r, g, b );
+ i += 3;
}
}
+ // node color
+ if ( nodeColor.isValid() )
+ aSmeshActor->SetNodeColor( nodeColor.redF(), nodeColor.greenF(), nodeColor.blueF() );
+ // edge color
+ if ( edgeColor.isValid() )
+ aSmeshActor->SetEdgeColor( edgeColor.redF(), edgeColor.greenF(), edgeColor.blueF() );
+ // face color
+ if ( faceColor.isValid() )
+ aSmeshActor->SetSufaceColor( faceColor.redF(), faceColor.greenF(), faceColor.blueF(), deltaF );
+ // volume color
+ if ( volumeColor.isValid() )
+ aSmeshActor->SetVolumeColor( volumeColor.redF(), volumeColor.greenF(), volumeColor.blueF(), deltaV );
+ else if ( faceColor.isValid() ) // backward compatibility (no separate color for volumes)
+ aSmeshActor->SetVolumeColor( faceColor.redF(), faceColor.greenF(), faceColor.blueF(), deltaF );
+ // 0d element color
+ if ( elem0dColor.isValid() )
+ aSmeshActor->Set0DColor( elem0dColor.redF(), elem0dColor.greenF(), elem0dColor.blueF() );
+ // ball color
+ if ( ballColor.isValid() )
+ aSmeshActor->SetBallColor( ballColor.redF(), ballColor.greenF(), ballColor.blueF() );
+ // outline color
+ if ( outlineColor.isValid() )
+ aSmeshActor->SetOutlineColor( outlineColor.redF(), outlineColor.greenF(), outlineColor.blueF() );
+ // orientation color
+ if ( orientationColor.isValid() )
+ aSmeshActor->SetFacesOrientationColor( orientationColor.redF(), orientationColor.greenF(), orientationColor.blueF() );
}
- // Sizes of lines and points
+ // Sizes
else if (paramNameStr == "Sizes") {
QStringList sizes = val.split(gDigitsSep, QString::SkipEmptyParts);
- if (sizes.count() == 4) {
- if (sizes[0] != "line" || sizes[2] != "shrink") {
- MESSAGE("Invalid order of data in Sizes, must be: "
- "line:int:shrink:float");
+ bool bOk;
+ int lineWidth = -1;
+ int outlineWidth = -1;
+ int elem0dSize = -1;
+ int ballSize = -1;
+ double shrinkSize = -1;
+ double orientationSize = -1;
+ bool orientation3d = false;
+ for ( int i = 0; i < sizes.count(); i++ ) {
+ QString type = sizes[i];
+ if ( type == "line" ) {
+ // line (wireframe) width is given as single integer value
+ if ( i+1 >= sizes.count() ) break; // format error
+ int v = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error
+ lineWidth = v;
+ i++;
}
- else {
- aSmeshActor->SetLineWidth(sizes[1].toInt());
- aSmeshActor->SetShrinkFactor(sizes[3].toFloat());
+ if ( type == "outline" ) {
+ // outline width is given as single integer value
+ if ( i+1 >= sizes.count() ) break; // format error
+ int v = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error
+ outlineWidth = v;
+ i++;
}
- }
- else if (sizes.count() == 6) { // just to support old format
- if (sizes[0] != "line" || sizes[2] != "node" || sizes[4] != "shrink") {
- MESSAGE("Invalid order of data in Sizes, must be: "
- "line:int:node:int:shrink:float");
+ else if ( type == "elem0d" ) {
+ // 0d element size is given as single integer value
+ if ( i+1 >= sizes.count() ) break; // format error
+ int v = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error
+ elem0dSize = v;
+ i++;
+ }
+ else if ( type == "ball" ) {
+ // ball size is given as single integer value
+ if ( i+1 >= sizes.count() ) break; // format error
+ int v = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error
+ ballSize = v;
+ i++;
}
- else {
- aSmeshActor->SetLineWidth(sizes[1].toInt());
- //aSmeshActor->SetNodeSize(sizes[3].toInt()); // made obsolete
- aSmeshActor->SetShrinkFactor(sizes[5].toFloat());
+ else if ( type == "shrink" ) {
+ // shrink factor is given as single floating point value
+ if ( i+1 >= sizes.count() ) break; // format error
+ double v = sizes[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ shrinkSize = v;
+ i++;
}
+ else if ( type == "orientation" ) {
+ // orientation vectors are specified by two values size:3d, where
+ // - size - is a floating point value specifying scale factor
+ // - 3d - is a boolean
+ if ( i+1 >= sizes.count() ) break; // format error
+ double v1 = sizes[i+1].toDouble( &bOk ); if ( !bOk ) break; // format error
+ if ( i+2 >= sizes.count() ) break; // format error
+ int v2 = sizes[i+2].toInt( &bOk ); if ( !bOk ) break; // format error
+ orientationSize = v1;
+ orientation3d = (bool)v2;
+ i += 2;
+ }
+ }
+ // line (wireframe) width
+ if ( lineWidth > 0 )
+ aSmeshActor->SetLineWidth( lineWidth );
+ // outline width
+ if ( outlineWidth > 0 )
+ aSmeshActor->SetOutlineWidth( outlineWidth );
+ else if ( lineWidth > 0 ) // backward compatibility (no separate width for outlines)
+ aSmeshActor->SetOutlineWidth( lineWidth );
+ // 0d element size
+ if ( elem0dSize > 0 )
+ aSmeshActor->Set0DSize( elem0dSize );
+ // ball size
+ if ( ballSize > 0 )
+ aSmeshActor->SetBallSize( ballSize );
+ // shrink factor
+ if ( shrinkSize > 0 )
+ aSmeshActor->SetShrinkFactor( shrinkSize );
+ // orientation vectors
+ if ( orientationSize > 0 ) {
+ aSmeshActor->SetFacesOrientationScale( orientationSize );
+ aSmeshActor->SetFacesOrientation3DVectors( orientation3d );
}
}
// Point marker
// Clipping
else if (paramNameStr.startsWith("ClippingPlane")) {
QStringList vals = val.split(gDigitsSep, QString::SkipEmptyParts);
- // old format - val looks like "Off" or "0:0.5:0:0" (orientation, distance, two angles)
+ // old format - val looks like "Off" or "1:0:0:0.5:0:0"
+ // (mode(relative), is OpenGL clipping plane, orientation, distance, two angles)
+ // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0"
+ // (mode(absolute), is OpenGL clipping plane, orientation, base point(x, y, z), direction (dx, dy, dz))
// new format - val looks like "Off" or "0" (plane id)
// (note: in new format "Off" value is used only for consistency,
// so it is processed together with values in old format)
- bool anIsOldFormat = ( vals.count() == 4 || val == "Off" );
+ bool anIsOldFormat = ( vals.count() == 6 || vals.count() == 9 || val == "Off" );
if( anIsOldFormat ) {
if (paramNameStr == "ClippingPlane1" || val == "Off")
aSmeshActor->RemoveAllClippingPlanes();
if (val != "Off") {
- SMESH::Orientation anOrientation = (SMESH::Orientation)vals[0].toInt();
- double aDistance = vals[1].toFloat();
- vtkFloatingPointType anAngle[2];
- anAngle[0] = vals[2].toFloat();
- anAngle[1] = vals[3].toFloat();
-
QList<SUIT_ViewManager*> lst;
getApp()->viewManagers(viewerTypStr, lst);
// SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager
SMESH::TActorList anActorList;
anActorList.push_back( aSmeshActor );
- SMESH::OrientedPlane* aPlane =
- SMESHGUI_ClippingDlg::AddPlane(anActorList, vtkView, anOrientation, aDistance, anAngle);
+ SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( vtkView );
+ aPlane->myViewWindow = vtkView;
+ SMESH::Mode aMode = ( SMESH::Mode )vals[0].toInt();
+ aPlane->PlaneMode = aMode;
+ bool isOpenGLClipping = ( bool )vals[1].toInt();
+ aPlane->IsOpenGLClipping = isOpenGLClipping;
+ if ( aMode == SMESH::Absolute ) {
+ aPlane->myAbsoluteOrientation = vals[2].toInt();
+ aPlane->X = vals[3].toFloat();
+ aPlane->Y = vals[4].toFloat();
+ aPlane->Z = vals[5].toFloat();
+ aPlane->Dx = vals[6].toFloat();
+ aPlane->Dy = vals[7].toFloat();
+ aPlane->Dz = vals[8].toFloat();
+ }
+ else if ( aMode == SMESH::Relative ) {
+ aPlane->myRelativeOrientation = (SMESH::Orientation)vals[2].toInt();
+ aPlane->myDistance = vals[3].toFloat();
+ aPlane->myAngle[0] = vals[4].toFloat();
+ aPlane->myAngle[1] = vals[5].toFloat();
+ }
+
if( aPlane ) {
- SMESH::ClippingPlaneInfo aClippingPlaneInfo;
- aClippingPlaneInfo.Plane = aPlane;
- aClippingPlaneInfo.ActorList = anActorList;
- aClippingPlaneInfoList.push_back( aClippingPlaneInfo );
+ if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) {
+ SMESH::ClippingPlaneInfo aClippingPlaneInfo;
+ aClippingPlaneInfo.Plane = aPlane;
+ aClippingPlaneInfo.ActorList = anActorList;
+ aClippingPlaneInfoList.push_back( aClippingPlaneInfo );
+ }
}
}
}
for( ; anIter4 != aPlaneDataList.end(); anIter4++ ) {
const TPlaneData& aPlaneData = *anIter4;
if( aPlaneData.Id == aPlaneId ) {
- SMESH::OrientedPlane* aPlane =
- SMESHGUI_ClippingDlg::AddPlane( anActorList,
- aViewWindow,
- (SMESH::Orientation)aPlaneData.Orientation,
- aPlaneData.Distance,
- aPlaneData.Angle );
+ SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( aViewWindow );
+ aPlane->myViewWindow = aViewWindow;
+ aPlane->PlaneMode = (SMESH::Mode)aPlaneData.Mode;
+ aPlane->IsOpenGLClipping = aPlaneData.isOpenGLClipping;
+ if ( aPlane->PlaneMode == SMESH::Absolute ) {
+ aPlane->myAbsoluteOrientation = aPlaneData.AbsoluteOrientation;
+ aPlane->X = aPlaneData.X;
+ aPlane->Y = aPlaneData.Y;
+ aPlane->Z = aPlaneData.Z;
+ aPlane->Dx = aPlaneData.Dx;
+ aPlane->Dy = aPlaneData.Dy;
+ aPlane->Dz = aPlaneData.Dz;
+ }
+ else if ( aPlane->PlaneMode == SMESH::Relative ) {
+ aPlane->myRelativeOrientation = (SMESH::Orientation)aPlaneData.RelativeOrientation;
+ aPlane->myDistance = aPlaneData.Distance;
+ aPlane->myAngle[0] = aPlaneData.Angle[0];
+ aPlane->myAngle[1] = aPlaneData.Angle[1];
+ }
if( aPlane ) {
- SMESH::ClippingPlaneInfo aClippingPlaneInfo;
- aClippingPlaneInfo.Plane = aPlane;
- aClippingPlaneInfo.ActorList = anActorList;
- aClippingPlaneInfoList.push_back( aClippingPlaneInfo );
+ if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) {
+ SMESH::ClippingPlaneInfo aClippingPlaneInfo;
+ aClippingPlaneInfo.Plane = aPlane;
+ aClippingPlaneInfo.ActorList = anActorList;
+ aClippingPlaneInfoList.push_back( aClippingPlaneInfo );
+ }
}
break;
}
}
+
}
}
+
// update all VTK views
QList<SUIT_ViewManager*> lst;
SUIT_ViewModel* vmodel = (*it)->getViewModel();
if (vmodel && vmodel->getType() == SVTK_Viewer::Type()) {
SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
+ // set OpenGL clipping planes
+ VTK::ActorCollectionCopy aCopy( vtkView->getRenderer()->GetActors() );
+ vtkActorCollection* anAllActors = aCopy.GetActors();
+ anAllActors->InitTraversal();
+ while( vtkActor* aVTKActor = anAllActors->GetNextActor() )
+ if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) )
+ anActor->SetOpenGLClippingPlane();
+
vtkView->getRenderer()->ResetCameraClippingRange();
vtkView->Repaint();
}
\param param parameter
\return identifier of preferences
*/
-int SMESHGUI::addVtkFontPref( const QString& label, const int pId, const QString& param )
+int SMESHGUI::addVtkFontPref( const QString& label, const int pId, const QString& param, const bool needSize )
{
int tfont = addPreference( label, pId, LightApp_Preferences::Font, "SMESH", param );
setPreferenceProperty( tfont, "fonts", fam );
int f = QtxFontEdit::Family | QtxFontEdit::Bold | QtxFontEdit::Italic | QtxFontEdit::Shadow;
+ if ( needSize ) f = f | QtxFontEdit::Size;
setPreferenceProperty( tfont, "features", f );
return tfont;
// 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 (aType == SMESH::MESH || aType == SMESH::GROUP ||
+ aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND ||
+ aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE ||
+ aType == SMESH::SUBMESH_EDGE || aType == SMESH::SUBMESH_VERTEX ||
+ aType == SMESH::HYPOTHESIS || aType == SMESH::ALGORITHM)
return true;
return false;
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 (aType == SMESH::MESH || aType == SMESH::GROUP ||
+ aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND ||
+ aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE ||
+ aType == SMESH::SUBMESH_EDGE || aType == SMESH::SUBMESH_VERTEX ||
+ aType == SMESH::HYPOTHESIS || aType == SMESH::ALGORITHM) {
if ( !name.isEmpty() ) {
SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qPrintable(name) );
}
return false;
}
+
+SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor()
+{
+ static QList<QColor> colors;
+
+ if ( colors.isEmpty() ) {
+
+ for (int s = 0; s < 2 ; s++)
+ {
+ for (int v = 100; v >= 40; v = v - 20)
+ {
+ for (int h = 0; h < 359 ; h = h + 60)
+ {
+ colors.append(QColor::fromHsv(h, 255 - s * 127, v * 255 / 100));
+ }
+ }
+ }
+ }
+ static int currentColor = 0;
+
+ SALOMEDS::Color color;
+ color.R = (double)colors[currentColor].red() / 255.0;
+ color.G = (double)colors[currentColor].green() / 255.0;
+ color.B = (double)colors[currentColor].blue() / 255.0;
+
+ currentColor = (currentColor+1) % colors.count();
+
+ return color;
+}