2015-02-13 13:38:35 +05:00
// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
2003-07-10 18:28:26 +06:00
//
2012-08-09 16:03:55 +06:00
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
2005-09-22 20:34:08 +06:00
//
2012-08-09 16:03:55 +06:00
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
2014-02-20 18:25:37 +06:00
// version 2.1 of the License, or (at your option) any later version.
2005-09-22 20:34:08 +06:00
//
2012-08-09 16:03:55 +06:00
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
2005-06-07 19:22:20 +06:00
//
2012-08-09 16:03:55 +06:00
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2005-09-22 20:34:08 +06:00
//
2012-08-09 16:03:55 +06:00
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// File : SMESHGUI.cxx
// Author : Nicolas REJNERI, Open CASCADE S.A.S.
# include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
# ifdef HAVE_FINITE
# undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
# endif
# include "Python.h"
2012-12-13 17:41:29 +06:00
2012-08-09 16:03:55 +06:00
// SMESH includes
2003-05-19 20:07:00 +06:00
# include "SMESHGUI.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_Add0DElemsOnAllNodesDlg.h"
2004-12-01 15:48:31 +05:00
# include "SMESHGUI_AddMeshElementDlg.h"
2006-03-13 20:29:49 +05:00
# include "SMESHGUI_AddQuadraticElementDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_BuildCompoundDlg.h"
# include "SMESHGUI_ClippingDlg.h"
# include "SMESHGUI_ComputeDlg.h"
# include "SMESHGUI_ConvToQuadOp.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_CopyMeshDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_CreatePolyhedralVolumeDlg.h"
# include "SMESHGUI_DeleteGroupDlg.h"
# include "SMESHGUI_Displayer.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_DuplicateNodesDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_ExtrusionAlongPathDlg.h"
# include "SMESHGUI_ExtrusionDlg.h"
2014-03-05 19:42:42 +06:00
# include "SMESHGUI_FieldSelectorWdg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_FileInfoDlg.h"
# include "SMESHGUI_FileValidator.h"
2004-06-18 14:34:31 +06:00
# include "SMESHGUI_FilterDlg.h"
2004-12-01 15:48:31 +05:00
# include "SMESHGUI_FilterLibraryDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_FindElemByPointDlg.h"
# include "SMESHGUI_GroupDlg.h"
2009-02-17 10:27:49 +05:00
# include "SMESHGUI_GroupOnShapeDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_GroupOpDlg.h"
# include "SMESHGUI_Hypotheses.h"
# include "SMESHGUI_Make2DFrom3DOp.h"
# include "SMESHGUI_MakeNodeAtPointDlg.h"
# include "SMESHGUI_Measurements.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_MergeDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_MeshInfo.h"
# include "SMESHGUI_MeshOp.h"
# include "SMESHGUI_MeshOrderOp.h"
# include "SMESHGUI_MeshPatternDlg.h"
# include "SMESHGUI_MultiEditDlg.h"
# include "SMESHGUI_NodesDlg.h"
2014-07-23 16:30:09 +06:00
# include "SMESHGUI_Operations.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_Preferences_ScalarBarDlg.h"
2012-10-08 17:56:59 +06:00
# include "SMESHGUI_PropertiesDlg.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_RemoveElementsDlg.h"
# include "SMESHGUI_RemoveNodesDlg.h"
2004-12-01 15:48:31 +05:00
# include "SMESHGUI_RenumberingDlg.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_ReorientFacesDlg.h"
2004-12-01 15:48:31 +05:00
# include "SMESHGUI_RevolutionDlg.h"
# include "SMESHGUI_RotationDlg.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_ScaleDlg.h"
2005-06-07 19:22:20 +06:00
# include "SMESHGUI_Selection.h"
2012-08-09 16:03:55 +06:00
# include "SMESHGUI_SewingDlg.h"
# include "SMESHGUI_SingleEditDlg.h"
# include "SMESHGUI_SmoothingDlg.h"
# include "SMESHGUI_SymmetryDlg.h"
# include "SMESHGUI_TranslationDlg.h"
# include "SMESHGUI_TransparencyDlg.h"
2014-09-08 18:36:41 +06:00
# include "SMESHGUI_DisplayEntitiesDlg.h"
2004-12-01 15:48:31 +05:00
2005-08-11 14:06:39 +06:00
# include "SMESHGUI_FilterUtils.h"
2014-07-25 20:06:05 +06:00
# include "SMESHGUI_GEOMGenUtils.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_GroupUtils.h"
# include "SMESHGUI_HypothesesUtils.h"
# include "SMESHGUI_MeshUtils.h"
2005-08-11 14:06:39 +06:00
# include "SMESHGUI_PatternUtils.h"
2012-12-13 17:41:29 +06:00
# include "SMESHGUI_Utils.h"
2005-08-11 14:06:39 +06:00
# include "SMESHGUI_VTKUtils.h"
2003-05-19 20:07:00 +06:00
2014-11-19 18:18:58 +05:00
# include "SMESH_version.h"
2012-08-09 16:03:55 +06:00
2012-12-13 17:41:29 +06:00
# include "SMESH_ControlsDef.hxx"
2014-11-19 18:18:58 +05:00
# include "SMESH_Actor.h"
# include "SMESH_ActorUtils.h"
# include "SMESH_Client.hxx"
# include "SMESH_ScalarBarActor.h"
# include "SMESH_TypeFilter.hxx"
2005-06-07 19:22:20 +06:00
2009-02-17 10:27:49 +05:00
// SALOME GUI includes
# include <SalomeApp_Application.h>
# include <SalomeApp_CheckFileDlg.h>
2012-08-09 16:03:55 +06:00
# include <SalomeApp_DataObject.h>
2012-12-13 17:41:29 +06:00
# include <SalomeApp_Study.h>
# include <SalomeApp_Tools.h>
2006-03-13 20:29:49 +05:00
2009-02-17 10:27:49 +05:00
# include <LightApp_DataOwner.h>
2012-12-13 17:41:29 +06:00
# include <LightApp_NameDlg.h>
2009-02-17 10:27:49 +05:00
# include <LightApp_Preferences.h>
# include <LightApp_SelectionMgr.h>
# include <LightApp_UpdateFlags.h>
2005-06-27 17:29:58 +06:00
2005-10-05 12:32:47 +06:00
# include <SVTK_ViewManager.h>
2012-12-13 17:41:29 +06:00
# include <SVTK_ViewModel.h>
# include <SVTK_ViewWindow.h>
2005-06-14 12:25:33 +06:00
2012-08-09 16:03:55 +06:00
# include <VTKViewer_Algorithm.h>
2013-09-12 20:18:54 +06:00
# include <PyInterp_Interp.h>
2009-02-17 10:27:49 +05:00
# include <SUIT_Desktop.h>
2012-12-13 17:41:29 +06:00
# include <SUIT_FileDlg.h>
# include <SUIT_MessageBox.h>
2009-02-17 10:27:49 +05:00
# include <SUIT_OverrideCursor.h>
2012-12-13 17:41:29 +06:00
# include <SUIT_ResourceMgr.h>
2009-02-17 10:27:49 +05:00
# include <SUIT_Session.h>
2005-08-11 14:06:39 +06:00
2009-02-17 10:27:49 +05:00
# include <QtxPopupMgr.h>
# include <QtxFontEdit.h>
2005-08-11 14:06:39 +06:00
2009-02-17 10:27:49 +05:00
# include <SALOME_ListIO.hxx>
2005-08-11 14:06:39 +06:00
2012-08-09 16:03:55 +06:00
# ifndef DISABLE_PLOT2DVIEWER
# include <SPlot2d_ViewModel.h>
# include <SPlot2d_Histogram.h>
# endif
2009-02-17 10:27:49 +05:00
// IDL includes
# include <SALOMEconfig.h>
2004-12-01 15:48:31 +05:00
# include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
2009-02-17 10:27:49 +05:00
# include CORBA_CLIENT_HEADER(SMESH_MeshEditor)
2012-08-09 16:03:55 +06:00
# include CORBA_CLIENT_HEADER(SMESH_Measurements)
2003-05-19 20:07:00 +06:00
2009-02-17 10:27:49 +05:00
// Qt includes
2012-08-09 16:03:55 +06:00
// #define INCLUDE_MENUITEM_DEF // VSR commented ????????
# include <QApplication>
2009-02-17 10:27:49 +05:00
# include <QMenu>
2012-08-09 16:03:55 +06:00
# include <QTextStream>
2015-04-21 12:18:10 +05:00
# include <QListView>
# include <QTreeView>
2003-05-19 20:07:00 +06:00
2009-02-17 10:27:49 +05:00
// BOOST includes
2004-12-01 15:48:31 +05:00
# include <boost/shared_ptr.hpp>
2004-06-18 14:34:31 +06:00
2009-02-17 10:27:49 +05:00
// VTK includes
2012-08-09 16:03:55 +06:00
# include <vtkCallbackCommand.h>
2012-12-13 17:41:29 +06:00
# include <vtkCamera.h>
2012-08-09 16:03:55 +06:00
# include <vtkLookupTable.h>
2012-12-13 17:41:29 +06:00
# include <vtkPlane.h>
# include <vtkRenderer.h>
2003-05-19 20:07:00 +06:00
2009-02-17 10:27:49 +05:00
// SALOME KERNEL includes
# include <SALOMEDSClient_ClientFactory.hxx>
# include <SALOMEDSClient_IParameters.hxx>
2012-12-13 17:41:29 +06:00
# include <SALOMEDSClient_SComponent.hxx>
# include <SALOMEDSClient_StudyBuilder.hxx>
# include <SALOMEDS_Study.hxx>
2013-07-09 14:32:08 +06:00
# include <SALOMEDS_SObject.hxx>
2014-11-19 21:07:28 +05:00
# include "utilities.h"
2005-06-07 19:22:20 +06:00
2009-02-17 10:27:49 +05:00
// OCCT includes
2008-03-07 12:47:05 +05:00
# include <Standard_ErrorHandler.hxx>
2009-02-17 10:27:49 +05:00
# include <NCollection_DataMap.hxx>
2004-06-18 14:34:31 +06:00
2012-12-13 17:41:29 +06:00
# include <Basics_Utils.hxx>
2012-08-09 16:03:55 +06:00
//To disable automatic genericobj management, the following line should be commented.
2012-12-13 17:41:29 +06:00
//Otherwise, it should be uncommented.
//Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
2012-08-09 16:03:55 +06:00
# define WITHGENERICOBJ
2013-05-21 20:57:30 +06:00
// Below macro, when uncommented, switches on simplified (more performant) algorithm
// of auto-color picking up
# define SIMPLE_AUTOCOLOR
2014-02-05 15:13:00 +06:00
namespace
{
2006-03-13 20:29:49 +05:00
// Declarations
2004-12-01 15:48:31 +05:00
//=============================================================
2005-06-07 19:22:20 +06:00
void ImportMeshesFromFile ( SMESH : : SMESH_Gen_ptr theComponentMesh ,
2012-08-09 16:03:55 +06:00
int theCommandID ) ;
2003-05-19 20:07:00 +06:00
2005-06-07 19:22:20 +06:00
void ExportMeshToFile ( int theCommandID ) ;
2004-06-18 14:34:31 +06:00
2012-08-09 16:03:55 +06:00
void SetDisplayMode ( int theCommandID , SMESHGUI_StudyId2MarkerMap & theMarkerMap ) ;
2005-01-20 11:25:54 +05:00
void SetDisplayEntity ( int theCommandID ) ;
2004-12-01 15:48:31 +05:00
void Control ( int theCommandID ) ;
// Definitions
2014-03-05 19:42:42 +06:00
//================================================================================
/*!
* \ brief Reads meshes from file
*/
//================================================================================
2009-02-17 10:27:49 +05:00
void ImportMeshesFromFile ( SMESH : : SMESH_Gen_ptr theComponentMesh ,
2012-08-09 16:03:55 +06:00
int theCommandID )
2004-12-01 15:48:31 +05:00
{
2005-01-20 11:25:54 +05:00
QStringList filter ;
2009-02-17 10:27:49 +05:00
std : : string myExtension ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpImportMED ) {
2012-12-13 17:41:29 +06:00
filter . append ( QObject : : tr ( " MED_FILES_FILTER " ) + " (*.*med) " ) ;
2012-08-09 16:03:55 +06:00
filter . append ( QObject : : tr ( " ALL_FILES_FILTER " ) + " (*) " ) ;
2009-02-17 10:27:49 +05:00
}
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpImportUNV ) {
2012-08-09 16:03:55 +06:00
filter . append ( QObject : : tr ( " IDEAS_FILES_FILTER " ) + " (*.unv) " ) ;
2009-02-17 10:27:49 +05:00
}
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpImportDAT ) {
2012-08-09 16:03:55 +06:00
filter . append ( QObject : : tr ( " DAT_FILES_FILTER " ) + " (*.dat) " ) ;
}
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpImportSTL ) {
2012-12-13 17:41:29 +06:00
filter . append ( QObject : : tr ( " STL_FILES_FILTER " ) + " (*.stl) " ) ;
2012-08-09 16:03:55 +06:00
}
2014-07-23 16:30:09 +06:00
# ifdef WITH_CGNS
else if ( theCommandID = = SMESHOp : : OpImportCGNS ) {
2012-08-09 16:03:55 +06:00
filter . append ( QObject : : tr ( " CGNS_FILES_FILTER " ) + " (*.cgns) " ) ;
}
2014-07-23 16:30:09 +06:00
# endif
else if ( theCommandID = = SMESHOp : : OpImportSAUV ) {
2012-08-09 16:03:55 +06:00
filter . append ( QObject : : tr ( " SAUV files (*.sauv*) " ) ) ;
filter . append ( QObject : : tr ( " All files (*) " ) ) ;
2009-02-17 10:27:49 +05:00
}
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpImportGMF ) {
2012-10-08 17:56:59 +06:00
filter . append ( QObject : : tr ( " GMF_ASCII_FILES_FILTER " ) + " (*.mesh) " ) ;
filter . append ( QObject : : tr ( " GMF_BINARY_FILES_FILTER " ) + " (*.meshb) " ) ;
}
2009-02-17 10:27:49 +05:00
QString anInitialPath = " " ;
if ( SUIT_FileDlg : : getLastVisitedPath ( ) . isEmpty ( ) )
anInitialPath = QDir : : currentPath ( ) ;
2012-12-13 17:41:29 +06:00
QStringList filenames ;
bool toCreateGroups = true ;
2014-07-23 16:30:09 +06:00
// if ( theCommandID == SMESHOp::OpImportGMF ) { // GMF
2012-12-13 17:41:29 +06:00
// 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 " ) ) ;
}
2009-02-17 10:27:49 +05:00
if ( filenames . count ( ) > 0 ) {
2005-06-07 19:22:20 +06:00
SUIT_OverrideCursor wc ;
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ;
2004-12-01 15:48:31 +05:00
2009-02-17 10:27:49 +05:00
QStringList errors ;
2012-08-09 16:03:55 +06:00
QStringList anEntryList ;
2009-02-17 10:27:49 +05:00
bool isEmpty = false ;
for ( QStringList : : ConstIterator it = filenames . begin ( ) ; it ! = filenames . end ( ) ; + + it ) {
2012-08-09 16:03:55 +06:00
QString filename = * it ;
SMESH : : mesh_array_var aMeshes = new SMESH : : mesh_array ;
try {
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportDAT :
2012-08-09 16:03:55 +06:00
{
// DAT format (currently unsupported)
errors . append ( QString ( " %1 : \n \t %2 " ) . arg ( filename ) .
arg ( QObject : : tr ( " SMESH_ERR_NOT_SUPPORTED_FORMAT " ) ) ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportUNV :
2012-08-09 16:03:55 +06:00
{
// UNV format
aMeshes - > length ( 1 ) ;
2013-09-03 16:58:47 +06:00
aMeshes [ 0 ] = theComponentMesh - > CreateMeshesFromUNV ( filename . toUtf8 ( ) . constData ( ) ) ;
2012-08-09 16:03:55 +06:00
if ( aMeshes [ 0 ] - > _is_nil ( ) )
errors . append ( QString ( " %1 : \n \t %2 " ) . arg ( filename ) .
arg ( QObject : : tr ( " SMESH_ERR_UNKNOWN_IMPORT_ERROR " ) ) ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportMED :
2012-08-09 16:03:55 +06:00
{
// MED format
SMESH : : DriverMED_ReadStatus res ;
2013-09-03 16:58:47 +06:00
aMeshes = theComponentMesh - > CreateMeshesFromMED ( filename . toUtf8 ( ) . constData ( ) , res ) ;
2012-08-09 16:03:55 +06:00
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 ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportSTL :
2012-08-09 16:03:55 +06:00
{
// STL format
aMeshes - > length ( 1 ) ;
2013-09-03 16:58:47 +06:00
aMeshes [ 0 ] = theComponentMesh - > CreateMeshesFromSTL ( filename . toUtf8 ( ) . constData ( ) ) ;
2012-08-09 16:03:55 +06:00
if ( aMeshes [ 0 ] - > _is_nil ( ) ) {
errors . append ( QString ( " %1 : \n \t %2 " ) . arg ( filename ) .
arg ( QObject : : tr ( " SMESH_ERR_UNKNOWN_IMPORT_ERROR " ) ) ) ;
}
break ;
}
2014-07-23 16:30:09 +06:00
# ifdef WITH_CGNS
case SMESHOp : : OpImportCGNS :
2012-08-09 16:03:55 +06:00
{
// CGNS format
SMESH : : DriverMED_ReadStatus res ;
2013-09-03 16:58:47 +06:00
aMeshes = theComponentMesh - > CreateMeshesFromCGNS ( filename . toUtf8 ( ) . constData ( ) , res ) ;
2012-08-09 16:03:55 +06:00
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 ;
}
2014-07-23 16:30:09 +06:00
# endif
case SMESHOp : : OpImportSAUV :
2012-08-09 16:03:55 +06:00
{
// SAUV format
SMESH : : DriverMED_ReadStatus res ;
2013-09-03 16:58:47 +06:00
aMeshes = theComponentMesh - > CreateMeshesFromSAUV ( filename . toUtf8 ( ) . constData ( ) , res ) ;
2012-08-09 16:03:55 +06:00
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 ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportGMF :
2012-10-08 17:56:59 +06:00
{
// GMF format
SMESH : : ComputeError_var res ;
aMeshes - > length ( 1 ) ;
2013-09-03 16:58:47 +06:00
aMeshes [ 0 ] = theComponentMesh - > CreateMeshesFromGMF ( filename . toUtf8 ( ) . constData ( ) ,
2012-12-13 17:41:29 +06:00
toCreateGroups ,
res . out ( ) ) ;
2012-10-08 17:56:59 +06:00
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 ;
}
2012-08-09 16:03:55 +06:00
}
}
catch ( const SALOME : : SALOME_Exception & S_ex ) {
errors . append ( QString ( " %1 : \n \t %2 " ) . arg ( filename ) .
arg ( QObject : : tr ( " SMESH_ERR_UNKNOWN_IMPORT_ERROR " ) ) ) ;
}
for ( int i = 0 , iEnd = aMeshes - > length ( ) ; i < iEnd ; i + + ) {
_PTR ( SObject ) aMeshSO = SMESH : : FindSObject ( aMeshes [ i ] ) ;
if ( aMeshSO ) {
_PTR ( StudyBuilder ) aBuilder = aStudy - > NewBuilder ( ) ;
_PTR ( AttributePixMap ) aPixmap = aBuilder - > FindOrCreateAttribute ( aMeshSO , " AttributePixMap " ) ;
aPixmap - > SetPixMap ( " ICON_SMESH_TREE_MESH_IMPORTED " ) ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpImportUNV ) // mesh names aren't taken from the file for UNV import
2012-08-09 16:03:55 +06:00
SMESH : : SetName ( aMeshSO , QFileInfo ( filename ) . fileName ( ) ) ;
anEntryList . append ( aMeshSO - > GetID ( ) . c_str ( ) ) ;
}
else {
isEmpty = true ;
}
}
2009-02-17 10:27:49 +05:00
}
2004-12-01 15:48:31 +05:00
2009-02-17 10:27:49 +05:00
// update Object browser
SMESHGUI : : GetSMESHGUI ( ) - > updateObjBrowser ( ) ;
2005-06-17 13:15:14 +06:00
2012-08-09 16:03:55 +06:00
// browse to the published meshes
if ( LightApp_Application * anApp =
dynamic_cast < LightApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) )
anApp - > browseObjects ( anEntryList ) ;
2009-02-17 10:27:49 +05:00
// show Error message box if there were errors
if ( errors . count ( ) > 0 ) {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : critical ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_ERROR " ) ,
QObject : : tr ( " SMESH_IMPORT_ERRORS " ) + " \n " + errors . join ( " \n " ) ) ;
2004-12-01 15:48:31 +05:00
}
2009-02-17 10:27:49 +05:00
// show warning message box, if some imported mesh is empty
if ( isEmpty ) {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_DRS_SOME_EMPTY " ) ) ;
2004-06-18 14:34:31 +06:00
}
}
}
2012-08-09 16:03:55 +06:00
//================================================================================
/*!
* \ brief Export selected meshes or groups into a file
*/
//================================================================================
2005-06-07 19:22:20 +06:00
void ExportMeshToFile ( int theCommandID )
2004-12-01 15:48:31 +05:00
{
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
2014-07-23 16:30:09 +06:00
const bool isDAT = ( theCommandID = = SMESHOp : : OpExportDAT | | theCommandID = = SMESHOp : : OpPopupExportDAT ) ;
const bool isMED = ( theCommandID = = SMESHOp : : OpExportMED | | theCommandID = = SMESHOp : : OpPopupExportMED ) ;
const bool isUNV = ( theCommandID = = SMESHOp : : OpExportUNV | | theCommandID = = SMESHOp : : OpPopupExportUNV ) ;
const bool isSTL = ( theCommandID = = SMESHOp : : OpExportSTL | | theCommandID = = SMESHOp : : OpPopupExportSTL ) ;
# ifdef WITH_CGNS
const bool isCGNS = ( theCommandID = = SMESHOp : : OpExportCGNS | | theCommandID = = SMESHOp : : OpPopupExportCGNS ) ;
# else
const bool isCGNS = false ;
# endif
const bool isSAUV = ( theCommandID = = SMESHOp : : OpExportSAUV | | theCommandID = = SMESHOp : : OpPopupExportSAUV ) ;
const bool isGMF = ( theCommandID = = SMESHOp : : OpExportGMF | | theCommandID = = SMESHOp : : OpPopupExportGMF ) ;
2012-08-09 16:03:55 +06:00
// actually, the following condition can't be met (added for insurance)
if ( selected . Extent ( ) = = 0 | |
( selected . Extent ( ) > 1 & & ! isMED & & ! isSTL ) )
2009-02-17 10:27:49 +05:00
return ;
2008-03-07 12:47:05 +05:00
2012-08-09 16:03:55 +06:00
// get mesh object from selection and check duplication of their names
bool hasDuplicatedMeshNames = false ;
QList < QPair < SMESH : : SMESH_IDSource_var , QString > > aMeshList ;
QList < QPair < SMESH : : SMESH_IDSource_var , QString > > : : iterator aMeshIter ;
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; It . More ( ) ; It . Next ( ) )
{
Handle ( SALOME_InteractiveObject ) anIObject = It . Value ( ) ;
SMESH : : SMESH_IDSource_var aMeshItem = SMESH : : IObjectToInterface < SMESH : : SMESH_IDSource > ( anIObject ) ;
if ( aMeshItem - > _is_nil ( ) ) {
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_BAD_MESH_SELECTION " ) ) ;
return ;
2009-02-17 10:27:49 +05:00
}
2012-08-09 16:03:55 +06:00
QString aMeshName = anIObject - > getName ( ) ;
// check for name duplications
if ( ! hasDuplicatedMeshNames )
for ( aMeshIter = aMeshList . begin ( ) ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + ) {
if ( aMeshName = = ( * aMeshIter ) . second ) {
hasDuplicatedMeshNames = true ;
break ;
}
2009-02-17 10:27:49 +05:00
}
2012-08-09 16:03:55 +06:00
aMeshList . append ( QPair < SMESH : : SMESH_IDSource_var , QString > ( aMeshItem , aMeshName ) ) ;
}
if ( hasDuplicatedMeshNames & & isMED ) {
int aRet = SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_EXPORT_MED_DUPLICATED_MESH_NAMES " ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) , 0 , 1 ) ;
if ( aRet ! = 0 )
return ;
}
aMeshIter = aMeshList . begin ( ) ;
SMESH : : SMESH_IDSource_var aMeshOrGroup = ( * aMeshIter ) . first ;
2012-10-08 17:56:59 +06:00
SMESH : : SMESH_Mesh_var aMesh = aMeshOrGroup - > GetMesh ( ) ;
QString aMeshName = ( * aMeshIter ) . second ;
2012-08-09 16:03:55 +06:00
2012-10-08 17:56:59 +06:00
if ( isMED | | isCGNS | | isSAUV ) // formats where group names must be unique
2012-08-09 16:03:55 +06:00
{
// check for equal group names within each mesh
for ( aMeshIter = aMeshList . begin ( ) ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + ) {
SMESH : : SMESH_Mesh_var aMeshItem = SMESH : : SMESH_Mesh : : _narrow ( ( * aMeshIter ) . first ) ;
if ( ! aMeshItem - > _is_nil ( ) & & aMeshItem - > HasDuplicatedGroupNamesMED ( ) ) {
2009-02-17 10:27:49 +05:00
int aRet = SUIT_MessageBox : : warning
( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
QObject : : tr ( " SMESH_EXPORT_MED_DUPLICATED_GRP " ) . arg ( ( * aMeshIter ) . second ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) , 0 , 1 ) ;
if ( aRet ! = 0 )
2009-02-17 10:27:49 +05:00
return ;
}
}
2012-08-09 16:03:55 +06:00
}
// Warn the user about presence of not supported elements
QString format ;
std : : vector < SMESH : : EntityType > notSupportedElemTypes , presentNotSupported ;
if ( isDAT )
{
format = " DAT " ;
notSupportedElemTypes . push_back ( SMESH : : Entity_0D ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Ball ) ;
}
else if ( isUNV )
{
format = " UNV " ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Polygon ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Quad_Polygon ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Polyhedra ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Quad_Polyhedra ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Pyramid ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Hexagonal_Prism ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_0D ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Ball ) ;
}
else if ( isSTL )
{
format = " STL " ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Edge ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Quad_Edge ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_0D ) ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Ball ) ;
}
else if ( isCGNS )
{
format = " CGNS " ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Ball ) ;
2013-05-16 23:15:56 +06:00
notSupportedElemTypes . push_back ( SMESH : : Entity_BiQuad_Triangle ) ;
2012-08-09 16:03:55 +06:00
}
else if ( isSAUV )
{
format = " SAUV " ;
notSupportedElemTypes . push_back ( SMESH : : Entity_Ball ) ;
2013-05-16 23:15:56 +06:00
notSupportedElemTypes . push_back ( SMESH : : Entity_BiQuad_Triangle ) ;
2012-08-09 16:03:55 +06:00
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 ) ;
}
2012-10-08 17:56:59 +06:00
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 ) ;
}
2012-08-09 16:03:55 +06:00
if ( ! notSupportedElemTypes . empty ( ) )
{
SMESH : : long_array_var nbElems = aMeshOrGroup - > GetMeshInfo ( ) ;
for ( size_t iType = 0 ; iType < notSupportedElemTypes . size ( ) ; + + iType )
if ( nbElems [ notSupportedElemTypes [ iType ] ] > 0 )
presentNotSupported . push_back ( notSupportedElemTypes [ iType ] ) ;
}
if ( ! presentNotSupported . empty ( ) )
{
QString typeNames ;
2013-05-16 23:15:56 +06:00
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 " ,
2012-08-09 16:03:55 +06:00
" SMESH_TETRAHEDRA " , " SMESH_QUADRATIC_TETRAHEDRONS " , " SMESH_PYRAMIDS " ,
" SMESH_QUADRATIC_PYRAMIDS " , " SMESH_HEXAHEDRA " , " SMESH_QUADRATIC_HEXAHEDRONS " ,
" SMESH_TRIQUADRATIC_HEXAHEDRONS " , " SMESH_PENTAHEDRA " , " SMESH_QUADRATIC_PENTAHEDRONS " ,
" SMESH_OCTAHEDRA " , " SMESH_POLYEDRONS " , " SMESH_QUADRATIC_POLYEDRONS " , " SMESH_BALLS "
} ;
QString andStr = " " + QObject : : tr ( " SMESH_AND " ) + " " , comma ( " , " ) ;
for ( size_t iType = 0 ; iType < presentNotSupported . size ( ) ; + + iType ) {
typeNames + = QObject : : tr ( typeMsg [ presentNotSupported [ iType ] ] ) ;
if ( iType ! = presentNotSupported . size ( ) - 1 )
typeNames + = ( iType = = presentNotSupported . size ( ) - 2 ) ? andStr : comma ;
}
int aRet = SUIT_MessageBox : : warning
( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " EXPORT_NOT_SUPPORTED " ) . arg ( aMeshName ) . arg ( format ) . arg ( typeNames ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) , 0 , 1 ) ;
if ( aRet ! = 0 )
return ;
2009-02-17 10:27:49 +05:00
}
2012-08-09 16:03:55 +06:00
// Get parameters of export operation
2012-10-08 17:56:59 +06:00
QString aFilename ;
2009-02-17 10:27:49 +05:00
SMESH : : MED_VERSION aFormat ;
2012-08-09 16:03:55 +06:00
// Init the parameters with the default values
2012-10-08 17:56:59 +06:00
bool aIsASCII_STL = true ;
2009-02-17 10:27:49 +05:00
bool toCreateGroups = false ;
SUIT_ResourceMgr * resMgr = SUIT_Session : : session ( ) - > resourceMgr ( ) ;
if ( resMgr )
toCreateGroups = resMgr - > booleanValue ( " SMESH " , " auto_groups " , false ) ;
2012-08-09 16:03:55 +06:00
bool toOverwrite = true ;
2013-06-05 21:13:53 +06:00
bool toFindOutDim = true ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
QString aFilter , aTitle = QObject : : tr ( " SMESH_EXPORT_MESH " ) ;
2009-02-17 10:27:49 +05:00
QString anInitialPath = " " ;
if ( SUIT_FileDlg : : getLastVisitedPath ( ) . isEmpty ( ) )
anInitialPath = QDir : : currentPath ( ) ;
2014-03-05 19:42:42 +06:00
QList < QPair < GEOM : : ListOfFields_var , QString > > aFieldList ;
2012-10-08 17:56:59 +06:00
// Get a file name to write in and additional otions
if ( isUNV | | isDAT | | isGMF ) // Export w/o options
2012-08-09 16:03:55 +06:00
{
if ( isUNV )
aFilter = QObject : : tr ( " IDEAS_FILES_FILTER " ) + " (*.unv) " ;
2012-10-08 17:56:59 +06:00
else if ( isDAT )
2012-08-09 16:03:55 +06:00
aFilter = QObject : : tr ( " DAT_FILES_FILTER " ) + " (*.dat) " ;
2012-10-08 17:56:59 +06:00
else if ( isGMF )
aFilter = QObject : : tr ( " GMF_ASCII_FILES_FILTER " ) + " (*.mesh) " +
" ;; " + QObject : : tr ( " GMF_BINARY_FILES_FILTER " ) + " (*.meshb) " ;
2012-12-13 17:41:29 +06:00
if ( anInitialPath . isEmpty ( ) ) anInitialPath = SUIT_FileDlg : : getLastVisitedPath ( ) ;
2012-08-09 16:03:55 +06:00
aFilename = SUIT_FileDlg : : getFileName ( SMESHGUI : : desktop ( ) ,
anInitialPath + QString ( " / " ) + aMeshName ,
2009-02-17 10:27:49 +05:00
aFilter , aTitle , false ) ;
}
2012-08-09 16:03:55 +06:00
else if ( isCGNS ) // Export to CGNS
{
SUIT_FileDlg * fd = new SUIT_FileDlg ( SMESHGUI : : desktop ( ) , false , true , true ) ;
fd - > setWindowTitle ( aTitle ) ;
fd - > setNameFilter ( QObject : : tr ( " CGNS_FILES_FILTER " ) + " (*.cgns) " ) ;
if ( ! anInitialPath . isEmpty ( ) )
fd - > setDirectory ( anInitialPath ) ;
fd - > selectFile ( aMeshName ) ;
SMESHGUI_FileValidator * fv = new SMESHGUI_FileValidator ( fd ) ;
fd - > setValidator ( fv ) ;
if ( fd - > exec ( ) )
aFilename = fd - > selectedFile ( ) ;
toOverwrite = fv - > isOverwrite ( ) ;
delete fd ;
}
else if ( isSTL ) // Export to STL
{
QMap < QString , int > aFilterMap ;
aFilterMap . insert ( QObject : : tr ( " STL_ASCII_FILES_FILTER " ) + " (*.stl) " , 1 ) ;
aFilterMap . insert ( QObject : : tr ( " STL_BIN_FILES_FILTER " ) + " (*.stl) " , 0 ) ;
2009-02-17 10:27:49 +05:00
QStringList filters ;
2012-08-09 16:03:55 +06:00
QMap < QString , int > : : const_iterator it = aFilterMap . begin ( ) ;
for ( ; it ! = aFilterMap . end ( ) ; + + it )
2009-02-17 10:27:49 +05:00
filters . push_back ( it . key ( ) ) ;
SUIT_FileDlg * fd = new SUIT_FileDlg ( SMESHGUI : : desktop ( ) , false , true , true ) ;
fd - > setWindowTitle ( aTitle ) ;
2012-08-09 16:03:55 +06:00
fd - > setNameFilters ( filters ) ;
fd - > selectNameFilter ( QObject : : tr ( " STL_ASCII_FILES_FILTER " ) + " (*.stl) " ) ;
2009-02-17 10:27:49 +05:00
if ( ! anInitialPath . isEmpty ( ) )
fd - > setDirectory ( anInitialPath ) ;
2012-08-09 16:03:55 +06:00
fd - > selectFile ( aMeshName ) ;
2009-02-17 10:27:49 +05:00
bool is_ok = false ;
while ( ! is_ok ) {
if ( fd - > exec ( ) )
aFilename = fd - > selectedFile ( ) ;
2012-08-09 16:03:55 +06:00
aIsASCII_STL = ( aFilterMap [ fd - > selectedNameFilter ( ) ] ) = = 1 ? true : false ;
2009-02-17 10:27:49 +05:00
is_ok = true ;
}
delete fd ;
}
2012-08-09 16:03:55 +06:00
else if ( isMED | | isSAUV ) // Export to MED or SAUV
{
QMap < QString , SMESH : : MED_VERSION > aFilterMap ;
//QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
if ( isMED ) {
QString v22 ( aMesh - > GetVersionString ( SMESH : : MED_V2_2 , 2 ) ) ;
//aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
aFilterMap . insert ( QObject : : tr ( " MED_VX_FILES_FILTER " ) . arg ( v22 ) + " (*.med) " , SMESH : : MED_V2_2 ) ;
}
else { // isSAUV
aFilterMap . insert ( " All files (*) " , SMESH : : MED_V2_1 ) ;
aFilterMap . insert ( " SAUV files (*.sauv) " , SMESH : : MED_V2_2 ) ;
aFilterMap . insert ( " SAUV files (*.sauve) " , SMESH : : MED_V2_1 ) ;
}
2009-02-17 10:27:49 +05:00
QStringList filters ;
QString aDefaultFilter ;
QMap < QString , SMESH : : MED_VERSION > : : const_iterator it = aFilterMap . begin ( ) ;
for ( ; it ! = aFilterMap . end ( ) ; + + it ) {
filters . push_back ( it . key ( ) ) ;
if ( it . value ( ) = = SMESH : : MED_V2_2 )
aDefaultFilter = it . key ( ) ;
}
2013-06-05 21:13:53 +06:00
QStringList checkBoxes ;
checkBoxes < < QObject : : tr ( " SMESH_AUTO_GROUPS " ) < < QObject : : tr ( " SMESH_AUTO_DIM " ) ;
2009-02-17 10:27:49 +05:00
2014-03-05 19:42:42 +06:00
SMESHGUI_FieldSelectorWdg * fieldSelWdg = new SMESHGUI_FieldSelectorWdg ( ) ;
QList < QWidget * > wdgList ;
if ( fieldSelWdg - > GetAllFeilds ( aMeshList , aFieldList ) )
wdgList . append ( fieldSelWdg ) ;
2013-06-05 21:13:53 +06:00
SalomeApp_CheckFileDlg * fd =
2014-03-05 19:42:42 +06:00
new SalomeApp_CheckFileDlg ( SMESHGUI : : desktop ( ) , false , checkBoxes , true , true , wdgList ) ;
2009-02-17 10:27:49 +05:00
fd - > setWindowTitle ( aTitle ) ;
2012-08-09 16:03:55 +06:00
fd - > setNameFilters ( filters ) ;
2013-12-18 21:08:18 +06:00
fd - > selectNameFilter ( aDefaultFilter ) ;
fd - > SetChecked ( toCreateGroups , 0 ) ;
fd - > SetChecked ( toFindOutDim , 1 ) ;
2009-02-17 10:27:49 +05:00
if ( ! anInitialPath . isEmpty ( ) )
fd - > setDirectory ( anInitialPath ) ;
2012-08-09 16:03:55 +06:00
fd - > selectFile ( aMeshName ) ;
2015-04-21 12:18:10 +05:00
QListView * lview = fd - > findChild < QListView * > ( " listView " ) ;
if ( lview ) {
lview - > setMinimumHeight ( 200 ) ;
}
QTreeView * tview = fd - > findChild < QTreeView * > ( " treeView " ) ;
if ( tview ) {
tview - > setMinimumHeight ( 200 ) ;
}
2012-08-09 16:03:55 +06:00
SMESHGUI_FileValidator * fv = new SMESHGUI_FileValidator ( fd ) ;
fd - > setValidator ( fv ) ;
2009-02-17 10:27:49 +05:00
bool is_ok = false ;
while ( ! is_ok ) {
if ( fd - > exec ( ) )
aFilename = fd - > selectedFile ( ) ;
2012-08-09 16:03:55 +06:00
else {
aFilename = QString : : null ;
break ;
}
aFormat = aFilterMap [ fd - > selectedNameFilter ( ) ] ;
toOverwrite = fv - > isOverwrite ( ) ;
2009-02-17 10:27:49 +05:00
is_ok = true ;
2012-08-09 16:03:55 +06:00
if ( ! aFilename . isEmpty ( ) ) {
// med-2.1 does not support poly elements
if ( aFormat = = SMESH : : MED_V2_1 )
for ( aMeshIter = aMeshList . begin ( ) ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + ) {
SMESH : : SMESH_IDSource_var aMeshItem = ( * aMeshIter ) . first ;
SMESH : : long_array_var nbElems = aMeshItem - > GetMeshInfo ( ) ;
if ( nbElems [ SMESH : : Entity_Polygon ] + nbElems [ SMESH : : Entity_Quad_Polygon ] +
nbElems [ SMESH : : Entity_Polyhedra ] + nbElems [ SMESH : : Entity_Quad_Polyhedra ] )
{
int aRet = SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_EXPORT_MED_V2_1 " ) . arg ( ( * aMeshIter ) . second ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) , 0 , 1 ) ;
if ( aRet ! = 0 ) {
is_ok = false ;
break ;
}
}
}
if ( ! toOverwrite ) {
// can't append to an existing using other format
SMESH : : MED_VERSION aVersion = SMESH : : MED_V2_1 ;
2013-09-03 16:58:47 +06:00
bool isVersionOk = SMESHGUI : : GetSMESHGen ( ) - > GetMEDVersion ( aFilename . toUtf8 ( ) . constData ( ) , aVersion ) ;
2012-08-09 16:03:55 +06:00
if ( ! isVersionOk | | aVersion ! = aFormat ) {
int aRet = SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_EXPORT_MED_VERSION_COLLISION " ) . arg ( aFilename ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) , 0 , 1 ) ;
if ( aRet = = 0 )
toOverwrite = true ;
else
is_ok = false ;
}
QStringList aMeshNamesCollisionList ;
2013-09-03 16:58:47 +06:00
SMESH : : string_array_var aMeshNames = SMESHGUI : : GetSMESHGen ( ) - > GetMeshNames ( aFilename . toUtf8 ( ) . constData ( ) ) ;
2012-08-09 16:03:55 +06:00
for ( int i = 0 , n = aMeshNames - > length ( ) ; i < n ; i + + ) {
QString anExistingMeshName ( aMeshNames [ i ] ) ;
for ( aMeshIter = aMeshList . begin ( ) ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + ) {
QString anExportMeshName = ( * aMeshIter ) . second ;
if ( anExportMeshName = = anExistingMeshName ) {
aMeshNamesCollisionList . append ( anExportMeshName ) ;
break ;
}
}
}
if ( ! aMeshNamesCollisionList . isEmpty ( ) ) {
QString aMeshNamesCollisionString = aMeshNamesCollisionList . join ( " , " ) ;
int aRet = SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_EXPORT_MED_MESH_NAMES_COLLISION " ) . arg ( aMeshNamesCollisionString ) ,
QObject : : tr ( " SMESH_BUT_YES " ) ,
QObject : : tr ( " SMESH_BUT_NO " ) ,
QObject : : tr ( " SMESH_BUT_CANCEL " ) , 0 , 2 ) ;
if ( aRet = = 0 )
toOverwrite = true ;
else if ( aRet = = 2 )
is_ok = false ;
}
2006-03-13 20:29:49 +05:00
}
}
2009-02-17 10:27:49 +05:00
}
2013-06-05 21:13:53 +06:00
toCreateGroups = fd - > IsChecked ( 0 ) ;
toFindOutDim = fd - > IsChecked ( 1 ) ;
2014-03-05 19:42:42 +06:00
fieldSelWdg - > GetSelectedFeilds ( ) ;
if ( ! fieldSelWdg - > parent ( ) )
delete fieldSelWdg ;
2009-02-17 10:27:49 +05:00
delete fd ;
}
2012-08-09 16:03:55 +06:00
else
{
return ;
}
// Perform export
2009-02-17 10:27:49 +05:00
if ( ! aFilename . isEmpty ( ) ) {
// Check whether the file already exists and delete it if yes
QFile aFile ( aFilename ) ;
2012-08-09 16:03:55 +06:00
if ( aFile . exists ( ) & & toOverwrite )
2009-02-17 10:27:49 +05:00
aFile . remove ( ) ;
SUIT_OverrideCursor wc ;
try {
2012-08-09 16:03:55 +06:00
// Renumbering is not needed since SMDS redesign in V6.2.0 (Nov 2010)
// bool Renumber = false;
// // PAL 14172 : Check of we have to renumber or not from the preferences before export
// if (resMgr)
// Renumber= resMgr->booleanValue("renumbering");
// if (Renumber){
// SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
// aMeshEditor->RenumberNodes();
// aMeshEditor->RenumberElements();
// if ( SMESHGUI::automaticUpdate() )
// SMESH::UpdateView();
// }
if ( isMED )
{
aMeshIter = aMeshList . begin ( ) ;
for ( int aMeshIndex = 0 ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + , aMeshIndex + + )
{
SMESH : : SMESH_IDSource_var aMeshOrGroup = ( * aMeshIter ) . first ;
SMESH : : SMESH_Mesh_var aMeshItem = aMeshOrGroup - > GetMesh ( ) ;
2014-03-05 19:42:42 +06:00
const GEOM : : ListOfFields & fields = aFieldList [ aMeshIndex ] . first . in ( ) ;
const QString & geoAssFields = aFieldList [ aMeshIndex ] . second ;
const bool hasFields = ( fields . length ( ) | | ! geoAssFields . isEmpty ( ) ) ;
if ( ! hasFields & & aMeshOrGroup - > _is_equivalent ( aMeshItem ) )
2013-09-03 16:58:47 +06:00
aMeshItem - > ExportToMEDX ( aFilename . toUtf8 ( ) . data ( ) , toCreateGroups ,
2013-06-05 21:13:53 +06:00
aFormat , toOverwrite & & aMeshIndex = = 0 , toFindOutDim ) ;
2012-08-09 16:03:55 +06:00
else
2013-09-03 16:58:47 +06:00
aMeshItem - > ExportPartToMED ( aMeshOrGroup , aFilename . toUtf8 ( ) . data ( ) , toCreateGroups ,
2014-03-05 19:42:42 +06:00
aFormat , toOverwrite & & aMeshIndex = = 0 , toFindOutDim ,
fields , geoAssFields . toLatin1 ( ) . data ( ) ) ;
2012-08-09 16:03:55 +06:00
}
2009-02-17 10:27:49 +05:00
}
2012-08-09 16:03:55 +06:00
else if ( isSAUV )
{
for ( aMeshIter = aMeshList . begin ( ) ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + )
{
SMESH : : SMESH_Mesh_var aMeshItem = SMESH : : SMESH_Mesh : : _narrow ( ( * aMeshIter ) . first ) ;
if ( ! aMeshItem - > _is_nil ( ) )
2013-09-03 16:58:47 +06:00
aMeshItem - > ExportSAUV ( aFilename . toUtf8 ( ) . data ( ) , toCreateGroups ) ;
2012-08-09 16:03:55 +06:00
}
}
else if ( isDAT )
{
if ( aMeshOrGroup - > _is_equivalent ( aMesh ) )
2013-09-03 16:58:47 +06:00
aMesh - > ExportDAT ( aFilename . toUtf8 ( ) . data ( ) ) ;
2012-08-09 16:03:55 +06:00
else
2013-09-03 16:58:47 +06:00
aMesh - > ExportPartToDAT ( aMeshOrGroup , aFilename . toUtf8 ( ) . data ( ) ) ;
2012-08-09 16:03:55 +06:00
}
else if ( isUNV )
{
if ( aMeshOrGroup - > _is_equivalent ( aMesh ) )
2013-09-03 16:58:47 +06:00
aMesh - > ExportUNV ( aFilename . toUtf8 ( ) . data ( ) ) ;
2012-08-09 16:03:55 +06:00
else
2013-09-03 16:58:47 +06:00
aMesh - > ExportPartToUNV ( aMeshOrGroup , aFilename . toUtf8 ( ) . data ( ) ) ;
2012-08-09 16:03:55 +06:00
}
else if ( isSTL )
{
if ( aMeshOrGroup - > _is_equivalent ( aMesh ) )
2013-09-03 16:58:47 +06:00
aMesh - > ExportSTL ( aFilename . toUtf8 ( ) . data ( ) , aIsASCII_STL ) ;
2012-08-09 16:03:55 +06:00
else
2013-09-03 16:58:47 +06:00
aMesh - > ExportPartToSTL ( aMeshOrGroup , aFilename . toUtf8 ( ) . data ( ) , aIsASCII_STL ) ;
2012-08-09 16:03:55 +06:00
}
else if ( isCGNS )
{
aMeshIter = aMeshList . begin ( ) ;
for ( int aMeshIndex = 0 ; aMeshIter ! = aMeshList . end ( ) ; aMeshIter + + , aMeshIndex + + )
{
SMESH : : SMESH_IDSource_var aMeshOrGroup = ( * aMeshIter ) . first ;
SMESH : : SMESH_Mesh_var aMeshItem = aMeshOrGroup - > GetMesh ( ) ;
aMeshItem - > ExportCGNS ( aMeshOrGroup ,
2013-09-03 16:58:47 +06:00
aFilename . toUtf8 ( ) . data ( ) ,
2012-08-09 16:03:55 +06:00
toOverwrite & & aMeshIndex = = 0 ) ;
}
2009-02-17 10:27:49 +05:00
}
2012-10-08 17:56:59 +06:00
else if ( isGMF )
{
2012-12-13 17:41:29 +06:00
toCreateGroups = true ;
2013-09-03 16:58:47 +06:00
aMesh - > ExportGMF ( aMeshOrGroup , aFilename . toUtf8 ( ) . data ( ) , toCreateGroups ) ;
2012-10-08 17:56:59 +06:00
}
2009-02-17 10:27:49 +05:00
}
catch ( const SALOME : : SALOME_Exception & S_ex ) {
wc . suspend ( ) ;
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_EXPORT_FAILED " ) ) ;
wc . resume ( ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
}
2005-06-07 19:22:20 +06:00
}
2005-01-20 11:25:54 +05:00
inline void InverseEntityMode ( unsigned int & theOutputMode ,
2012-08-09 16:03:55 +06:00
unsigned int theMode )
2005-01-20 11:25:54 +05:00
{
bool anIsNotPresent = ~ theOutputMode & theMode ;
if ( anIsNotPresent )
theOutputMode | = theMode ;
else
theOutputMode & = ~ theMode ;
}
void SetDisplayEntity ( int theCommandID ) {
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) > = 1 ) {
SALOME_ListIteratorOfListIO It ( selected ) ;
2009-02-17 10:27:49 +05:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
if ( IObject - > hasEntry ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( IObject - > getEntry ( ) ) ) {
unsigned int aMode = anActor - > GetEntityMode ( ) ;
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDE0DElements :
2012-08-09 16:03:55 +06:00
InverseEntityMode ( aMode , SMESH_Actor : : e0DElements ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDEEdges :
2012-08-09 16:03:55 +06:00
InverseEntityMode ( aMode , SMESH_Actor : : eEdges ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDEFaces :
2012-08-09 16:03:55 +06:00
InverseEntityMode ( aMode , SMESH_Actor : : eFaces ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDEVolumes :
2012-08-09 16:03:55 +06:00
InverseEntityMode ( aMode , SMESH_Actor : : eVolumes ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDEBalls :
InverseEntityMode ( aMode , SMESH_Actor : : eBallElem ) ;
break ;
case SMESHOp : : OpDEAllEntity :
2012-08-09 16:03:55 +06:00
aMode = SMESH_Actor : : eAllEntity ;
break ;
}
if ( aMode )
anActor - > SetEntityMode ( aMode ) ;
}
}
2005-01-20 11:25:54 +05:00
}
}
}
2013-07-29 18:21:40 +06:00
void AutoColor ( )
{
2008-03-07 12:47:05 +05:00
SALOME_ListIO selected ;
SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( ! app )
return ;
LightApp_SelectionMgr * aSel = app - > selectionMgr ( ) ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( app - > activeStudy ( ) ) ;
if ( ! aSel | | ! appStudy )
return ;
aSel - > selectedObjects ( selected ) ;
if ( selected . IsEmpty ( ) )
return ;
Handle ( SALOME_InteractiveObject ) anIObject = selected . First ( ) ;
_PTR ( Study ) aStudy = appStudy - > studyDS ( ) ;
_PTR ( SObject ) aMainSObject ( aStudy - > FindObjectID ( anIObject - > getEntry ( ) ) ) ;
SMESH : : SMESH_Mesh_var aMainObject = SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( anIObject ) ;
if ( aMainObject - > _is_nil ( ) )
return ;
2013-07-29 18:21:40 +06:00
SUIT_OverrideCursor wc ;
2012-08-09 16:03:55 +06:00
aMainObject - > SetAutoColor ( true ) ; // mesh groups are re-colored here
2008-03-07 12:47:05 +05:00
2013-05-21 20:57:30 +06:00
QList < SALOMEDS : : Color > aReservedColors ;
2008-03-07 12:47:05 +05:00
SMESH : : ListOfGroups aListOfGroups = * aMainObject - > GetGroups ( ) ;
for ( int i = 0 , n = aListOfGroups . length ( ) ; i < n ; i + + )
{
SMESH : : SMESH_GroupBase_var aGroupObject = aListOfGroups [ i ] ;
2013-05-21 20:57:30 +06:00
//SALOMEDS::Color aColor = aGroupObject->GetColor();
2013-10-16 18:56:06 +06:00
2013-05-21 20:57:30 +06:00
# 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
2013-07-29 18:21:40 +06:00
aGroupObject - > SetColor ( aColor ) ;
2013-05-21 20:57:30 +06:00
2008-03-07 12:47:05 +05:00
_PTR ( SObject ) aGroupSObject = SMESH : : FindSObject ( aGroupObject ) ;
2012-08-09 16:03:55 +06:00
if ( aGroupSObject ) {
2012-10-08 17:56:59 +06:00
QColor c ;
int delta ;
2012-08-09 16:03:55 +06:00
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( aGroupSObject - > GetID ( ) . c_str ( ) ) ) {
switch ( aGroupObject - > GetType ( ) ) {
case SMESH : : NODE :
anActor - > SetNodeColor ( aColor . R , aColor . G , aColor . B ) ; break ;
case SMESH : : EDGE :
anActor - > SetEdgeColor ( aColor . R , aColor . G , aColor . B ) ; break ;
case SMESH : : ELEM0D :
anActor - > Set0DColor ( aColor . R , aColor . G , aColor . B ) ; break ;
case SMESH : : BALL :
anActor - > SetBallColor ( aColor . R , aColor . G , aColor . B ) ; break ;
2012-10-08 17:56:59 +06:00
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 :
2012-08-09 16:03:55 +06:00
default :
SMESH : : GetColor ( " SMESH " , " fill_color " , c , delta , " 0,170,255|-100 " ) ;
anActor - > SetSufaceColor ( aColor . R , aColor . G , aColor . B , delta ) ;
}
}
2008-03-07 12:47:05 +05:00
}
}
SMESH : : RepaintCurrentView ( ) ;
}
2013-06-19 13:46:33 +06:00
void OverallMeshQuality ( ) {
SMESHGUI : : GetSMESHGUI ( ) - > EmitSignalDeactivateDialog ( ) ;
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
2013-10-16 18:56:06 +06:00
2013-06-19 13:46:33 +06:00
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 ( ) ;
}
}
2012-08-09 16:03:55 +06:00
QString functorToString ( SMESH : : Controls : : FunctorPtr f )
{
QString type = QObject : : tr ( " UNKNOWN_CONTROL " ) ;
if ( dynamic_cast < SMESH : : Controls : : Volume * > ( f . get ( ) ) )
type = QObject : : tr ( " VOLUME_3D_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : MaxElementLength2D * > ( f . get ( ) ) )
type = QObject : : tr ( " MAX_ELEMENT_LENGTH_2D " ) ;
else if ( dynamic_cast < SMESH : : Controls : : MaxElementLength3D * > ( f . get ( ) ) )
type = QObject : : tr ( " MAX_ELEMENT_LENGTH_3D " ) ;
else if ( dynamic_cast < SMESH : : Controls : : MinimumAngle * > ( f . get ( ) ) )
type = QObject : : tr ( " MINIMUMANGLE_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : AspectRatio * > ( f . get ( ) ) )
type = QObject : : tr ( " ASPECTRATIO_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : AspectRatio3D * > ( f . get ( ) ) )
type = QObject : : tr ( " ASPECTRATIO_3D_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Warping * > ( f . get ( ) ) )
type = QObject : : tr ( " WARP_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Taper * > ( f . get ( ) ) )
type = QObject : : tr ( " TAPER_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Skew * > ( f . get ( ) ) )
type = QObject : : tr ( " SKEW_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Area * > ( f . get ( ) ) )
type = QObject : : tr ( " AREA_ELEMENTS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Length * > ( f . get ( ) ) )
type = QObject : : tr ( " LENGTH_EDGES " ) ;
else if ( dynamic_cast < SMESH : : Controls : : Length2D * > ( f . get ( ) ) )
type = QObject : : tr ( " LENGTH2D_EDGES " ) ;
else if ( dynamic_cast < SMESH : : Controls : : MultiConnection * > ( f . get ( ) ) )
type = QObject : : tr ( " MULTI_BORDERS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : MultiConnection2D * > ( f . get ( ) ) )
type = QObject : : tr ( " MULTI2D_BORDERS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : FreeNodes * > ( f . get ( ) ) )
type = QObject : : tr ( " FREE_NODES " ) ;
else if ( dynamic_cast < SMESH : : Controls : : FreeEdges * > ( f . get ( ) ) )
type = QObject : : tr ( " FREE_EDGES " ) ;
else if ( dynamic_cast < SMESH : : Controls : : FreeBorders * > ( f . get ( ) ) )
type = QObject : : tr ( " FREE_BORDERS " ) ;
else if ( dynamic_cast < SMESH : : Controls : : FreeFaces * > ( f . get ( ) ) )
type = QObject : : tr ( " FREE_FACES " ) ;
else if ( dynamic_cast < SMESH : : Controls : : BareBorderVolume * > ( f . get ( ) ) )
type = QObject : : tr ( " BARE_BORDER_VOLUME " ) ;
else if ( dynamic_cast < SMESH : : Controls : : BareBorderFace * > ( f . get ( ) ) )
type = QObject : : tr ( " BARE_BORDER_FACE " ) ;
else if ( dynamic_cast < SMESH : : Controls : : OverConstrainedVolume * > ( f . get ( ) ) )
type = QObject : : tr ( " OVER_CONSTRAINED_VOLUME " ) ;
else if ( dynamic_cast < SMESH : : Controls : : OverConstrainedFace * > ( f . get ( ) ) )
type = QObject : : tr ( " OVER_CONSTRAINED_FACE " ) ;
else if ( dynamic_cast < SMESH : : Controls : : CoincidentNodes * > ( f . get ( ) ) )
type = QObject : : tr ( " EQUAL_NODE " ) ;
else if ( dynamic_cast < SMESH : : Controls : : CoincidentElements1D * > ( f . get ( ) ) )
type = QObject : : tr ( " EQUAL_EDGE " ) ;
else if ( dynamic_cast < SMESH : : Controls : : CoincidentElements2D * > ( f . get ( ) ) )
type = QObject : : tr ( " EQUAL_FACE " ) ;
else if ( dynamic_cast < SMESH : : Controls : : CoincidentElements3D * > ( f . get ( ) ) )
type = QObject : : tr ( " EQUAL_VOLUME " ) ;
return type ;
}
void SaveDistribution ( )
{
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) = = 1 ) {
Handle ( SALOME_InteractiveObject ) anIO = selected . First ( ) ;
if ( anIO - > hasEntry ( ) ) {
SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIO - > getEntry ( ) ) ;
if ( anActor & & anActor - > GetScalarBarActor ( ) & & anActor - > GetControlMode ( ) ! = SMESH_Actor : : eNone ) {
SMESH_ScalarBarActor * aScalarBarActor = anActor - > GetScalarBarActor ( ) ;
SMESH : : Controls : : FunctorPtr aFunctor = anActor - > GetFunctor ( ) ;
if ( aScalarBarActor & & aFunctor ) {
SMESH : : Controls : : NumericalFunctor * aNumFun = dynamic_cast < SMESH : : Controls : : NumericalFunctor * > ( aFunctor . get ( ) ) ;
if ( aNumFun ) {
std : : vector < int > elements ;
SMESH : : SMESH_Mesh_var mesh = SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( anIO ) ;
if ( mesh - > _is_nil ( ) ) {
SMESH : : SMESH_IDSource_var idSource =
SMESH : : IObjectToInterface < SMESH : : SMESH_IDSource > ( anIO ) ;
if ( ! idSource - > _is_nil ( ) )
{
SMESH : : long_array_var ids = idSource - > GetIDs ( ) ;
elements . resize ( ids - > length ( ) ) ;
for ( unsigned i = 0 ; i < elements . size ( ) ; + + i )
elements [ i ] = ids [ i ] ;
}
}
int nbIntervals = aScalarBarActor - > GetMaximumNumberOfColors ( ) ;
vtkLookupTable * lookupTable =
static_cast < vtkLookupTable * > ( aScalarBarActor - > GetLookupTable ( ) ) ;
double * minmax = lookupTable - > GetRange ( ) ;
2013-02-12 20:37:44 +06:00
bool isLogarithmic = lookupTable - > GetScale ( ) = = VTK_SCALE_LOG10 ;
2012-08-09 16:03:55 +06:00
std : : vector < int > nbEvents ;
std : : vector < double > funValues ;
2013-02-12 20:37:44 +06:00
aNumFun - > GetHistogram ( nbIntervals , nbEvents , funValues , elements , minmax , isLogarithmic ) ;
2012-08-09 16:03:55 +06:00
QString anInitialPath = " " ;
if ( SUIT_FileDlg : : getLastVisitedPath ( ) . isEmpty ( ) )
anInitialPath = QDir : : currentPath ( ) ;
QString aMeshName = anIO - > getName ( ) ;
QStringList filter ;
filter . append ( QObject : : tr ( " TEXT_FILES_FILTER " ) + " (*.txt) " ) ;
filter . append ( QObject : : tr ( " ALL_FILES_FILTER " ) + " (*) " ) ;
QString aFilename = anInitialPath + " / " + aMeshName + " _ " +
functorToString ( aFunctor ) . toLower ( ) . simplified ( ) . replace ( QRegExp ( " |- " ) , " _ " ) + " .txt " ;
aFilename = SUIT_FileDlg : : getFileName ( SMESHGUI : : desktop ( ) ,
aFilename ,
filter ,
QObject : : tr ( " SMESH_SAVE_DISTRIBUTION " ) ,
false ) ;
if ( ! aFilename . isEmpty ( ) ) {
QFile f ( aFilename ) ;
if ( f . open ( QFile : : WriteOnly | QFile : : Truncate ) ) {
QTextStream out ( & f ) ;
out < < " # Mesh: " < < aMeshName < < endl ;
out < < " # Control: " < < functorToString ( aFunctor ) < < endl ;
out < < " # " < < endl ;
out . setFieldWidth ( 10 ) ;
for ( int i = 0 ; i < qMin ( nbEvents . size ( ) , funValues . size ( ) - 1 ) ; i + + )
out < < funValues [ i ] < < " \t " < < funValues [ i + 1 ] < < " \t " < < nbEvents [ i ] < < endl ;
f . close ( ) ;
}
}
}
}
}
}
}
}
2015-04-21 12:37:02 +05:00
void ShowElement ( int theCommandID ) {
2012-08-09 16:03:55 +06:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) = = 1 ) {
Handle ( SALOME_InteractiveObject ) anIO = selected . First ( ) ;
if ( anIO - > hasEntry ( ) ) {
SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIO - > getEntry ( ) ) ;
if ( anActor & & anActor - > GetScalarBarActor ( ) & & anActor - > GetControlMode ( ) ! = SMESH_Actor : : eNone ) {
SMESH_ScalarBarActor * aScalarBarActor = anActor - > GetScalarBarActor ( ) ;
2015-04-21 12:37:02 +05:00
if ( theCommandID = = SMESHOp : : OpShowDistribution ) {
aScalarBarActor - > SetDistributionVisibility ( ! aScalarBarActor - > GetDistributionVisibility ( ) ) ;
}
else if ( theCommandID = = SMESHOp : : OpShowScalarBar ) {
aScalarBarActor - > SetVisibility ( ! aScalarBarActor - > GetVisibility ( ) ) ;
}
2012-08-09 16:03:55 +06:00
}
}
}
}
# ifndef DISABLE_PLOT2DVIEWER
void PlotDistribution ( ) {
SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( ! app )
return ;
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) = = 1 ) {
Handle ( SALOME_InteractiveObject ) anIO = selected . First ( ) ;
if ( anIO - > hasEntry ( ) ) {
//Find Actor by entry before getting Plot2d viewer,
//because after call getViewManager( Plot2d_Viewer::Type(), true ) active window is Plot2d Viewer
SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIO - > getEntry ( ) ) ;
SUIT_ViewManager * aViewManager = app - > getViewManager ( Plot2d_Viewer : : Type ( ) , true ) ; // create if necessary
if ( ! aViewManager )
return ;
SPlot2d_Viewer * aView = dynamic_cast < SPlot2d_Viewer * > ( aViewManager - > getViewModel ( ) ) ;
if ( ! aView )
return ;
Plot2d_ViewFrame * aPlot = aView - > getActiveViewFrame ( ) ;
if ( ! aPlot )
return ;
if ( anActor & & anActor - > GetControlMode ( ) ! = SMESH_Actor : : eNone ) {
SPlot2d_Histogram * aHistogram = anActor - > UpdatePlot2Histogram ( ) ;
QString functorName = functorToString ( anActor - > GetFunctor ( ) ) ;
QString aHistogramName ( " %1 : %2 " ) ;
aHistogramName = aHistogramName . arg ( anIO - > getName ( ) ) . arg ( functorName ) ;
aHistogram - > setName ( aHistogramName ) ;
aHistogram - > setHorTitle ( functorName ) ;
aHistogram - > setVerTitle ( QObject : : tr ( " DISTRIBUTION_NB_ENT " ) ) ;
aPlot - > displayObject ( aHistogram , true ) ;
}
}
}
}
# endif //DISABLE_PLOT2DVIEWER
2008-03-07 12:47:05 +05:00
void DisableAutoColor ( ) {
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
2008-03-07 12:47:05 +05:00
if ( selected . Extent ( ) ) {
Handle ( SALOME_InteractiveObject ) anIObject = selected . First ( ) ;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( anIObject ) ;
if ( ! aMesh - > _is_nil ( ) ) {
2012-08-09 16:03:55 +06:00
aMesh - > SetAutoColor ( false ) ;
2008-03-07 12:47:05 +05:00
}
}
}
2013-07-09 14:32:08 +06:00
void sortChildren ( ) {
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel ) {
aSel - > selectedObjects ( selected ) ;
2013-10-16 18:56:06 +06:00
2013-07-09 14:32:08 +06:00
if ( selected . Extent ( ) ) {
2013-07-17 20:53:51 +06:00
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 ( ) ;
}
}
2013-07-09 14:32:08 +06:00
}
}
}
2012-08-09 16:03:55 +06:00
void SetDisplayMode ( int theCommandID , SMESHGUI_StudyId2MarkerMap & theMarkerMap )
{
2008-03-07 12:47:05 +05:00
SALOME_ListIO selected ;
SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( ! app )
return ;
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( app - > activeStudy ( ) ) ;
if ( ! aSel | | ! appStudy )
return ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpClipping ) { // Clipping dialog can be activated without selection
2012-08-09 16:03:55 +06:00
if ( SMESHGUI * aModule = SMESHGUI : : GetSMESHGUI ( ) ) {
aModule - > EmitSignalDeactivateDialog ( ) ;
if ( SVTK_ViewWindow * aViewWindow = SMESH : : GetViewWindow ( aModule ) )
( new SMESHGUI_ClippingDlg ( aModule , aViewWindow ) ) - > show ( ) ;
}
return ;
}
2008-03-07 12:47:05 +05:00
_PTR ( Study ) aStudy = appStudy - > studyDS ( ) ;
aSel - > selectedObjects ( selected ) ;
2005-06-07 19:22:20 +06:00
if ( selected . Extent ( ) > = 1 ) {
2004-12-01 15:48:31 +05:00
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpTransparency : {
2012-08-09 16:03:55 +06:00
SMESHGUI : : GetSMESHGUI ( ) - > EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_TransparencyDlg ( SMESHGUI : : GetSMESHGUI ( ) ) ) - > show ( ) ;
return ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpProperties : {
2013-03-01 19:13:25 +06:00
double color [ 3 ] ;
2012-10-08 17:56:59 +06:00
QColor faceColor , edgeColor , nodeColor , elem0dColor , ballColor ;
QColor orientationColor , outlineColor , volumeColor ;
int deltaF = 0 , deltaV = 0 ;
int elem0dSize = 1 ;
2015-04-21 12:37:02 +05:00
//int ballSize = 1;
2014-04-02 12:09:25 +06:00
double ballScale = 1.0 ;
2012-10-08 17:56:59 +06:00
int edgeWidth = 1 ;
int outlineWidth = 1 ;
2013-03-01 19:13:25 +06:00
double shrinkCoef = 0.0 ;
double orientationScale = 0.0 ;
2012-10-08 17:56:59 +06:00
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 ;
2012-08-09 16:03:55 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
2012-10-08 17:56:59 +06:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
2012-10-08 17:56:59 +06:00
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 ] ) ;
2015-04-21 12:37:02 +05:00
//ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1
2014-04-02 12:09:25 +06:00
ballScale = qMax ( ( double ) anActor - > GetBallScale ( ) , 1e-2 ) ; // minimum allowed scale is 1e-2
2012-10-08 17:56:59 +06:00
// 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 ( ) ;
2012-08-09 16:03:55 +06:00
}
2012-10-08 17:56:59 +06:00
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 ;
2012-08-09 16:03:55 +06:00
}
2012-10-08 17:56:59 +06:00
SMESHGUI_PropertiesDlg dlg ( theMarkerMap [ aStudy - > StudyId ( ) ] , SMESHGUI : : desktop ( ) ) ;
// nodes: color, marker
dlg . setNodeColor ( nodeColor ) ;
if ( markerType ! = VTK : : MT_USER )
dlg . setNodeMarker ( markerType , markerScale ) ;
2012-08-09 16:03:55 +06:00
else
2012-10-08 17:56:59 +06:00
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 ) ;
2015-04-21 12:37:02 +05:00
//dlg.setBallSize( ballSize );
2014-03-24 13:29:24 +06:00
dlg . setBallScale ( ballScale ) ;
2012-10-08 17:56:59 +06:00
// 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 ( ) ;
2015-04-21 12:37:02 +05:00
// ballSize = dlg.ballSize();
2014-03-24 13:29:24 +06:00
ballScale = dlg . ballScale ( ) ;
2012-10-08 17:56:59 +06:00
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
2012-08-09 16:03:55 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
2012-10-08 17:56:59 +06:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
2012-10-08 17:56:59 +06:00
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 ) ;
2012-08-09 16:03:55 +06:00
}
2012-10-08 17:56:59 +06:00
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 ( ) ) ;
2015-04-21 12:37:02 +05:00
// anActor->SetBallSize( ballSize );
2014-03-24 13:29:24 +06:00
anActor - > SetBallScale ( ballScale ) ;
2012-10-08 17:56:59 +06:00
// 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() )
2012-08-09 16:03:55 +06:00
SMESH : : RepaintCurrentView ( ) ;
2012-10-08 17:56:59 +06:00
} // if ( dlg.exec() )
2012-08-09 16:03:55 +06:00
return ;
2014-07-23 16:30:09 +06:00
} // case SMESHOp::OpProperties:
2012-10-08 17:56:59 +06:00
} // switch(theCommandID)
2005-06-07 19:22:20 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
2009-02-17 10:27:49 +05:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
if ( IObject - > hasEntry ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( IObject - > getEntry ( ) ) ) {
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDMWireframe :
2012-08-09 16:03:55 +06:00
anActor - > SetRepresentation ( SMESH_Actor : : eEdge ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDMShading :
2012-08-09 16:03:55 +06:00
anActor - > SetRepresentation ( SMESH_Actor : : eSurface ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDMShrink :
2012-08-09 16:03:55 +06:00
if ( anActor - > IsShrunk ( ) )
anActor - > UnShrink ( ) ;
else
anActor - > SetShrink ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDMNodes :
2012-08-09 16:03:55 +06:00
anActor - > SetRepresentation ( SMESH_Actor : : ePoint ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRepresentationLines :
2012-08-09 16:03:55 +06:00
if ( anActor - > GetQuadratic2DRepresentation ( ) ! = SMESH_Actor : : eLines )
anActor - > SetQuadratic2DRepresentation ( SMESH_Actor : : eLines ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRepresentationArcs :
2012-08-09 16:03:55 +06:00
if ( anActor - > GetQuadratic2DRepresentation ( ) ! = SMESH_Actor : : eArcs )
anActor - > SetQuadratic2DRepresentation ( SMESH_Actor : : eArcs ) ;
break ;
}
}
}
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
SMESH : : RepaintCurrentView ( ) ;
2004-06-18 14:34:31 +06:00
}
}
2005-09-22 20:34:08 +06:00
2004-12-01 15:48:31 +05:00
void Control ( int theCommandID )
{
2014-09-08 12:30:44 +06:00
SMESH_Actor : : eControl aControl = SMESH_Actor : : eNone ;
switch ( theCommandID ) {
case SMESHOp : : OpFreeNode :
aControl = SMESH_Actor : : eFreeNodes ;
break ;
case SMESHOp : : OpEqualNode :
aControl = SMESH_Actor : : eCoincidentNodes ;
break ;
case SMESHOp : : OpFreeEdge :
aControl = SMESH_Actor : : eFreeEdges ;
break ;
case SMESHOp : : OpFreeBorder :
aControl = SMESH_Actor : : eFreeBorders ;
break ;
case SMESHOp : : OpLength :
aControl = SMESH_Actor : : eLength ;
break ;
case SMESHOp : : OpConnection :
aControl = SMESH_Actor : : eMultiConnection ;
break ;
case SMESHOp : : OpEqualEdge :
aControl = SMESH_Actor : : eCoincidentElems1D ;
break ;
case SMESHOp : : OpFreeFace :
aControl = SMESH_Actor : : eFreeFaces ;
break ;
case SMESHOp : : OpBareBorderFace :
aControl = SMESH_Actor : : eBareBorderFace ;
break ;
case SMESHOp : : OpOverConstrainedFace :
aControl = SMESH_Actor : : eOverConstrainedFace ;
break ;
case SMESHOp : : OpLength2D :
aControl = SMESH_Actor : : eLength2D ;
break ;
case SMESHOp : : OpConnection2D :
aControl = SMESH_Actor : : eMultiConnection2D ;
break ;
case SMESHOp : : OpArea :
aControl = SMESH_Actor : : eArea ;
break ;
case SMESHOp : : OpTaper :
aControl = SMESH_Actor : : eTaper ;
break ;
case SMESHOp : : OpAspectRatio :
aControl = SMESH_Actor : : eAspectRatio ;
break ;
case SMESHOp : : OpMinimumAngle :
aControl = SMESH_Actor : : eMinimumAngle ;
break ;
case SMESHOp : : OpWarpingAngle :
aControl = SMESH_Actor : : eWarping ;
break ;
case SMESHOp : : OpSkew :
aControl = SMESH_Actor : : eSkew ;
break ;
case SMESHOp : : OpMaxElementLength2D :
aControl = SMESH_Actor : : eMaxElementLength2D ;
break ;
case SMESHOp : : OpEqualFace :
aControl = SMESH_Actor : : eCoincidentElems2D ;
break ;
case SMESHOp : : OpAspectRatio3D :
aControl = SMESH_Actor : : eAspectRatio3D ;
break ;
case SMESHOp : : OpVolume :
aControl = SMESH_Actor : : eVolume3D ;
break ;
case SMESHOp : : OpMaxElementLength3D :
aControl = SMESH_Actor : : eMaxElementLength3D ;
break ;
case SMESHOp : : OpBareBorderVolume :
aControl = SMESH_Actor : : eBareBorderVolume ;
break ;
case SMESHOp : : OpOverConstrainedVolume :
aControl = SMESH_Actor : : eOverConstrainedVolume ;
break ;
case SMESHOp : : OpEqualVolume :
aControl = SMESH_Actor : : eCoincidentElems3D ;
break ;
}
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( ! selected . IsEmpty ( ) ) {
2014-09-08 12:30:44 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; It . More ( ) ; It . Next ( ) )
{
Handle ( SALOME_InteractiveObject ) anIO = It . Value ( ) ;
if ( ! anIO . IsNull ( ) ) {
_PTR ( SObject ) SO = aStudy - > FindObjectID ( It . Value ( ) - > getEntry ( ) ) ;
if ( SO ) {
CORBA : : Object_var aObject = SMESH : : SObjectToObject ( SO ) ;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : SMESH_Mesh : : _narrow ( aObject ) ;
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 ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIO - > getEntry ( ) ) ) {
anActor - > SetControlMode ( aControl ) ;
anActor - > GetScalarBarActor ( ) - > SetTitle ( functorToString ( anActor - > GetFunctor ( ) ) . toLatin1 ( ) . constData ( ) ) ;
SMESH : : RepaintCurrentView ( ) ;
2012-08-09 16:03:55 +06:00
# ifndef DISABLE_PLOT2DVIEWER
2014-09-08 12:30:44 +06:00
if ( anActor - > GetPlot2Histogram ( ) ) {
SPlot2d_Histogram * aHistogram = anActor - > UpdatePlot2Histogram ( ) ;
QString functorName = functorToString ( anActor - > GetFunctor ( ) ) ;
QString aHistogramName ( " %1 : %2 " ) ;
aHistogramName = aHistogramName . arg ( anIO - > getName ( ) ) . arg ( functorName ) ;
aHistogram - > setName ( aHistogramName ) ;
aHistogram - > setHorTitle ( functorName ) ;
SMESH : : ProcessIn2DViewers ( anActor ) ;
}
2012-08-09 16:03:55 +06:00
# endif
2014-09-08 12:30:44 +06:00
}
}
}
2012-08-09 16:03:55 +06:00
}
2004-06-18 14:34:31 +06:00
}
}
}
2005-06-07 19:22:20 +06:00
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
bool CheckOIType ( const Handle ( SALOME_InteractiveObject ) & theIO ,
2012-12-13 17:41:29 +06:00
SMESH : : MeshObjectType theType ,
2012-08-09 16:03:55 +06:00
const QString theInTypeName ,
QString & theOutTypeName )
2004-12-01 15:48:31 +05:00
{
SMESH_TypeFilter aTypeFilter ( theType ) ;
2005-06-07 19:22:20 +06:00
QString entry ;
if ( ! theIO . IsNull ( ) )
{
entry = theIO - > getEntry ( ) ;
2005-11-03 13:38:17 +05:00
LightApp_DataOwner owner ( entry ) ;
2005-06-07 19:22:20 +06:00
if ( aTypeFilter . isOk ( & owner ) ) {
theOutTypeName = theInTypeName ;
return true ;
}
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
return false ;
2004-06-18 14:34:31 +06:00
}
2005-06-07 19:22:20 +06:00
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
QString CheckTypeObject ( const Handle ( SALOME_InteractiveObject ) & theIO )
{
2005-06-07 19:22:20 +06:00
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ;
_PTR ( SObject ) aSObj = aStudy - > FindObjectID ( theIO - > getEntry ( ) ) ;
if ( aSObj ) {
_PTR ( SComponent ) aSComp = aSObj - > GetFatherComponent ( ) ;
CORBA : : String_var anID = aSComp - > GetID ( ) . c_str ( ) ;
2004-12-01 15:48:31 +05:00
if ( ! strcmp ( anID . in ( ) , theIO - > getEntry ( ) ) )
2012-08-09 16:03:55 +06:00
return " Component " ;
2004-12-01 15:48:31 +05:00
}
2005-06-07 19:22:20 +06:00
2004-12-01 15:48:31 +05:00
QString aTypeName ;
if (
2012-12-13 17:41:29 +06:00
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 )
2012-08-09 16:03:55 +06:00
)
2004-12-01 15:48:31 +05:00
return aTypeName ;
2005-06-07 19:22:20 +06:00
2004-12-01 15:48:31 +05:00
return " NoType " ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
QString CheckHomogeneousSelection ( )
{
2005-06-07 19:22:20 +06:00
//SUIT_Study* aStudy = SMESH::GetActiveStudy();
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
QString RefType = CheckTypeObject ( selected . First ( ) ) ;
SALOME_ListIteratorOfListIO It ( selected ) ;
2009-02-17 10:27:49 +05:00
for ( ; It . More ( ) ; It . Next ( ) )
2014-02-05 15:13:00 +06:00
{
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
QString Type = CheckTypeObject ( IObject ) ;
if ( Type . compare ( RefType ) ! = 0 )
return " Heterogeneous Selection " ;
}
2005-06-07 19:22:20 +06:00
2004-12-01 15:48:31 +05:00
return RefType ;
2004-06-18 14:34:31 +06:00
}
2014-10-31 18:43:41 +05:00
uint randomize ( uint size )
{
static bool initialized = false ;
if ( ! initialized ) {
qsrand ( QDateTime : : currentDateTime ( ) . toTime_t ( ) ) ;
initialized = true ;
}
uint v = qrand ( ) ;
v = uint ( ( double ) ( v ) / RAND_MAX * size ) ;
v = qMax ( uint ( 0 ) , qMin ( v , size - 1 ) ) ;
return v ;
}
2014-02-05 15:13:00 +06:00
} //namespace
2005-08-17 16:44:08 +06:00
2014-02-05 15:13:00 +06:00
void SMESHGUI : : OnEditDelete ( )
{
// VSR 17/11/04: check if all objects selected belong to SMESH component --> start
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ; aSel - > selectedObjects ( selected , QString : : null , false ) ;
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ;
_PTR ( StudyBuilder ) aStudyBuilder = aStudy - > NewBuilder ( ) ;
_PTR ( GenericAttribute ) anAttr ;
_PTR ( AttributeIOR ) anIOR ;
int objectCount = 0 ;
QString aNameList ;
QString aParentComponent = QString : : null ;
Handle ( SALOME_InteractiveObject ) anIO ;
for ( SALOME_ListIteratorOfListIO anIt ( selected ) ; anIt . More ( ) ; anIt . Next ( ) )
2004-12-01 15:48:31 +05:00
{
2014-02-05 15:13:00 +06:00
anIO = anIt . Value ( ) ;
QString cur = anIO - > getComponentDataType ( ) ;
_PTR ( SObject ) aSO = aStudy - > FindObjectID ( anIO - > getEntry ( ) ) ;
if ( aSO ) {
// check if object is reference
_PTR ( SObject ) aRefSObj ;
aNameList . append ( " \n - " ) ;
if ( aSO - > ReferencedObject ( aRefSObj ) ) {
QString aRefName = QString : : fromStdString ( aRefSObj - > GetName ( ) ) ;
aNameList . append ( aRefName ) ;
cur = QString : : fromStdString ( aRefSObj - > GetFatherComponent ( ) - > ComponentDataType ( ) ) ;
2009-02-17 10:27:49 +05:00
}
2014-02-05 15:13:00 +06:00
else
aNameList . append ( anIO - > getName ( ) ) ;
objectCount + + ;
2005-06-07 19:22:20 +06:00
}
2014-02-05 15:13:00 +06:00
if ( aParentComponent . isNull ( ) )
aParentComponent = cur ;
else if ( ! aParentComponent . isEmpty ( ) & & aParentComponent ! = cur )
aParentComponent = " " ;
}
2004-06-18 14:34:31 +06:00
2014-02-05 15:13:00 +06:00
if ( objectCount = = 0 )
return ; // No Valid Objects Selected
2005-06-07 19:22:20 +06:00
2014-02-05 15:13:00 +06:00
if ( aParentComponent ! = SMESHGUI : : GetSMESHGUI ( ) - > name ( ) ) {
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " ERR_ERROR " ) ,
QObject : : tr ( " NON_SMESH_OBJECTS_SELECTED " ) . arg ( SMESHGUI : : GetSMESHGUI ( ) - > moduleName ( ) ) ) ;
return ;
}
// VSR 17/11/04: check if all objects selected belong to SMESH component <-- finish
if ( SUIT_MessageBox : : warning
( SMESHGUI : : desktop ( ) ,
QObject : : tr ( " SMESH_WRN_WARNING " ) ,
QObject : : tr ( " SMESH_REALLY_DELETE " ) . arg ( objectCount ) . arg ( aNameList ) ,
SUIT_MessageBox : : Yes | SUIT_MessageBox : : No ,
SUIT_MessageBox : : Yes ) ! = SUIT_MessageBox : : Yes )
return ;
SalomeApp_Application * anApp = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
// Put the whole hierarchy of sub-objects of the selected SO's into a list and
// then treat them all starting from the deepest objects (at list back)
std : : list < _PTR ( SObject ) > listSO ;
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; It . More ( ) ; It . Next ( ) ) // loop on selected IO's
{
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
if ( IObject - > hasEntry ( ) ) {
_PTR ( SObject ) aSO = aStudy - > FindObjectID ( IObject - > getEntry ( ) ) ;
// disable removal of "SMESH" component object
if ( aSO - > FindAttribute ( anAttr , " AttributeIOR " ) ) {
anIOR = anAttr ;
if ( engineIOR ( ) = = anIOR - > Value ( ) . c_str ( ) )
continue ;
}
//Check the referenced object
_PTR ( SObject ) aRefSObject ;
if ( aSO & & aSO - > ReferencedObject ( aRefSObject ) )
aSO = aRefSObject ; // Delete main Object instead of reference
listSO . push_back ( aSO ) ;
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 ( ) )
listSO . push_back ( it - > Value ( ) ) ;
2012-08-09 16:03:55 +06:00
}
}
2014-02-05 15:13:00 +06:00
}
// Check if none of objects to delete is referred from outside
std : : list < _PTR ( SObject ) > : : reverse_iterator ritSO ;
for ( ritSO = listSO . rbegin ( ) ; ritSO ! = listSO . rend ( ) ; + + ritSO )
{
_PTR ( SObject ) SO = * ritSO ;
if ( ! SO ) continue ;
std : : vector < _PTR ( SObject ) > aReferences = aStudy - > FindDependances ( * ritSO ) ;
for ( size_t i = 0 ; i < aReferences . size ( ) ; i + + ) {
_PTR ( SComponent ) aComponent = aReferences [ i ] - > GetFatherComponent ( ) ;
std : : string type = aComponent - > ComponentDataType ( ) ;
if ( type ! = " SMESH " )
{
SUIT_MessageBox : : warning ( anApp - > desktop ( ) ,
QObject : : tr ( " WRN_WARNING " ) ,
QObject : : tr ( " DEP_OBJECT " ) ) ;
return ; // outside SMESH, there is an object depending on a SMESH object
2012-08-09 16:03:55 +06:00
}
}
2014-02-05 15:13:00 +06:00
}
2006-05-06 14:51:48 +06:00
2014-02-05 15:13:00 +06:00
// 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 ( ) ;
}
2013-03-15 20:59:29 +06:00
2014-02-05 15:13:00 +06:00
// Treat SO's in the list starting from the back
aStudyBuilder - > NewCommand ( ) ; // There is a transaction
for ( ritSO = listSO . rbegin ( ) ; ritSO ! = listSO . rend ( ) ; + + ritSO )
{
_PTR ( SObject ) SO = * ritSO ;
if ( ! SO ) continue ;
std : : string anEntry = SO - > GetID ( ) ;
2012-08-09 16:03:55 +06:00
2014-02-05 15:13:00 +06:00
/** 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 ) ) ;
SMESH : : SMESH_subMesh_var aSubMesh = SMESH : : SMESH_subMesh : : _narrow ( SMESH : : SObjectToObject ( SO ) ) ;
if ( ! aGroup - > _is_nil ( ) ) { // DELETE GROUP
SMESH : : SMESH_Mesh_var aMesh = aGroup - > GetMesh ( ) ;
aMesh - > RemoveGroup ( aGroup ) ;
}
else if ( ! aSubMesh - > _is_nil ( ) ) { // DELETE SUBMESH
SMESH : : SMESH_Mesh_var aMesh = aSubMesh - > GetFather ( ) ;
aMesh - > RemoveSubMesh ( aSubMesh ) ;
2005-06-07 19:22:20 +06:00
2014-02-05 15:13:00 +06:00
_PTR ( SObject ) aMeshSO = SMESH : : FindSObject ( aMesh ) ;
if ( aMeshSO )
SMESH : : ModifiedMesh ( aMeshSO , false , aMesh - > NbNodes ( ) = = 0 ) ;
}
else {
Handle ( SALOME_InteractiveObject ) IObject = new SALOME_InteractiveObject
( anEntry . c_str ( ) , engineIOR ( ) . toLatin1 ( ) . data ( ) , SO - > GetName ( ) . c_str ( ) ) ;
QString objType = CheckTypeObject ( IObject ) ;
if ( objType = = " Hypothesis " | | objType = = " Algorithm " ) { // DELETE HYPOTHESIS
SMESH : : RemoveHypothesisOrAlgorithmOnMesh ( IObject ) ;
aStudyBuilder - > RemoveObjectWithChildren ( SO ) ;
2012-08-09 16:03:55 +06:00
}
2014-02-05 15:13:00 +06:00
else { // default action: remove SObject from the study
// san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
//SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
//op->start();
aStudyBuilder - > RemoveObjectWithChildren ( SO ) ;
//op->finish();
2012-08-09 16:03:55 +06:00
}
2014-02-05 15:13:00 +06:00
}
} /* listSO back loop */
2012-08-09 16:03:55 +06:00
2014-02-05 15:13:00 +06:00
aStudyBuilder - > CommitCommand ( ) ;
2004-06-18 14:34:31 +06:00
2014-02-05 15:13:00 +06:00
/* Clear any previous selection */
SALOME_ListIO l1 ;
aSel - > setSelectedObjects ( l1 ) ;
2004-06-18 14:34:31 +06:00
2014-02-05 15:13:00 +06:00
SMESHGUI : : GetSMESHGUI ( ) - > updateObjBrowser ( ) ;
}
2004-06-18 14:34:31 +06:00
2005-06-07 19:22:20 +06:00
extern " C " {
2008-03-07 12:47:05 +05:00
SMESHGUI_EXPORT CAM_Module * createModule ( )
2005-06-07 19:22:20 +06:00
{
2005-06-21 18:17:08 +06:00
return new SMESHGUI ( ) ;
2005-06-07 19:22:20 +06:00
}
2012-08-09 16:03:55 +06:00
SMESHGUI_EXPORT char * getModuleVersion ( ) {
return ( char * ) SMESH_VERSION_STR ;
}
2005-06-07 19:22:20 +06:00
}
SMESH : : SMESH_Gen_var SMESHGUI : : myComponentSMESH = SMESH : : SMESH_Gen : : _nil ( ) ;
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
SMESHGUI : : SMESHGUI ( ) :
2013-02-12 20:37:44 +06:00
SalomeApp_Module ( " SMESH " )
2008-03-07 12:47:05 +05:00
{
2005-06-07 19:22:20 +06:00
if ( CORBA : : is_nil ( myComponentSMESH ) )
{
2006-03-13 20:29:49 +05:00
CORBA : : Boolean anIsEmbeddedMode ;
myComponentSMESH = SMESH_Client : : GetSMESHGen ( getApp ( ) - > orb ( ) , anIsEmbeddedMode ) ;
2012-08-09 16:03:55 +06:00
MESSAGE ( " -------------------------------> anIsEmbeddedMode= " < < anIsEmbeddedMode ) ;
2009-02-17 10:27:49 +05:00
// 0019923: EDF 765 SMESH : default values of hypothesis
SUIT_ResourceMgr * aResourceMgr = SMESH : : GetResourceMgr ( this ) ;
int nbSeg = aResourceMgr - > integerValue ( " SMESH " , " segmentation " , 10 ) ;
myComponentSMESH - > SetBoundaryBoxSegmentation ( nbSeg ) ;
nbSeg = aResourceMgr - > integerValue ( " SMESH " , " nb_segments_per_edge " , 15 ) ;
myComponentSMESH - > SetDefaultNbSegments ( nbSeg ) ;
2012-08-09 16:03:55 +06:00
const char * options [ ] = { " historical_python_dump " , " forget_mesh_on_hyp_modif " } ;
for ( size_t i = 0 ; i < sizeof ( options ) / sizeof ( char * ) ; + + i )
if ( aResourceMgr - > hasValue ( " SMESH " , options [ i ] ) )
{
QString val = aResourceMgr - > stringValue ( " SMESH " , options [ i ] ) ;
myComponentSMESH - > SetOption ( options [ i ] , val . toLatin1 ( ) . constData ( ) ) ;
}
2005-06-07 19:22:20 +06:00
}
2005-10-04 13:35:48 +06:00
myActiveDialogBox = 0 ;
2006-05-06 14:51:48 +06:00
myFilterLibraryDlg = 0 ;
2005-10-04 13:35:48 +06:00
myState = - 1 ;
2005-09-27 12:33:42 +06:00
myDisplayer = 0 ;
2004-12-01 15:48:31 +05:00
2012-08-09 16:03:55 +06:00
myEventCallbackCommand = vtkCallbackCommand : : New ( ) ;
myEventCallbackCommand - > Delete ( ) ;
myEventCallbackCommand - > SetClientData ( this ) ;
myEventCallbackCommand - > SetCallback ( SMESHGUI : : ProcessEvents ) ;
myPriority = 0.0 ;
2004-12-01 15:48:31 +05:00
/* load resources for all available meshers */
SMESH : : InitAvailableHypotheses ( ) ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
SMESHGUI : : ~ SMESHGUI ( )
{
}
2005-06-07 19:22:20 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * SMESHGUI : : selectionMgr ( )
2005-06-07 19:22:20 +06:00
{
SalomeApp_Application * anApp = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( anApp )
2005-11-03 13:38:17 +05:00
return dynamic_cast < LightApp_SelectionMgr * > ( anApp - > selectionMgr ( ) ) ;
2005-06-07 19:22:20 +06:00
else
return 0 ;
}
2012-08-09 16:03:55 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
bool SMESHGUI : : automaticUpdate ( unsigned int requestedSize , bool * limitExceeded )
2005-06-27 17:29:58 +06:00
{
SUIT_ResourceMgr * resMgr = SUIT_Session : : session ( ) - > resourceMgr ( ) ;
if ( ! resMgr )
return false ;
2012-08-09 16:03:55 +06:00
bool autoUpdate = resMgr - > booleanValue ( " SMESH " , " auto_update " , false ) ;
long updateLimit = resMgr - > integerValue ( " SMESH " , " update_limit " , 500000 ) ;
bool exceeded = updateLimit > 0 & & requestedSize > updateLimit ;
if ( limitExceeded ) * limitExceeded = autoUpdate & & exceeded ;
return autoUpdate & & ! exceeded ;
2005-06-27 17:29:58 +06:00
}
2013-06-21 11:33:07 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2014-04-08 15:20:55 +06:00
bool SMESHGUI : : automaticUpdate ( SMESH : : SMESH_IDSource_ptr theMesh ,
int * entities , bool * limitExceeded , int * hidden , long * nbElements )
2013-06-21 11:33:07 +06:00
{
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 ) ;
2014-04-08 15:20:55 +06:00
SMESH : : long_array_var info = theMesh - > GetMeshInfo ( ) ;
long nbOdElems = info [ SMDSEntity_0D ] ;
long nbEdges = info [ SMDSEntity_Edge ] + info [ SMDSEntity_Quad_Edge ] ;
long nbFaces = info [ SMDSEntity_Triangle ] + info [ SMDSEntity_Quad_Triangle ] + info [ SMDSEntity_BiQuad_Triangle ] +
info [ SMDSEntity_Quadrangle ] + info [ SMDSEntity_Quad_Quadrangle ] + info [ SMDSEntity_BiQuad_Quadrangle ] +
info [ SMDSEntity_Polygon ] ;
long nbVolumes = info [ SMDSEntity_Tetra ] + info [ SMDSEntity_Quad_Tetra ] +
info [ SMDSEntity_Hexa ] + info [ SMDSEntity_Quad_Hexa ] + info [ SMDSEntity_TriQuad_Hexa ] +
info [ SMDSEntity_Pyramid ] + info [ SMDSEntity_Quad_Pyramid ] +
info [ SMDSEntity_Penta ] + info [ SMDSEntity_Quad_Penta ] +
info [ SMDSEntity_Polyhedra ] +
info [ SMDSEntity_Hexagonal_Prism ] ;
long nbBalls = info [ SMDSEntity_Ball ] ;
long requestedSize = nbOdElems + nbBalls + nbEdges + nbFaces + nbVolumes ;
* nbElements = requestedSize ;
2013-06-21 11:33:07 +06:00
* entities = SMESH_Actor : : eAllEntity ;
2013-08-05 14:35:32 +06:00
* hidden = 0 ;
2013-06-21 11:33:07 +06:00
bool exceeded = updateLimit > 0 & & requestedSize > updateLimit ;
if ( limitExceeded ) * limitExceeded = autoUpdate & & exceeded ;
if ( incrementalLimit ) {
long total = 0 ;
if ( nbOdElems > 0 ) {
2013-08-05 14:35:32 +06:00
if ( total + nbOdElems > updateLimit ) {
2013-07-03 22:00:57 +06:00
* entities = * entities & ~ SMESH_Actor : : e0DElements ;
2013-09-26 14:44:08 +06:00
* hidden = * hidden | SMESH_Actor : : e0DElements ;
2013-08-05 14:35:32 +06:00
}
2013-06-21 11:33:07 +06:00
else
2013-07-03 22:00:57 +06:00
exceeded = false ;
2013-06-21 11:33:07 +06:00
}
total + = nbOdElems ;
if ( nbEdges > 0 ) {
2013-08-05 14:35:32 +06:00
if ( total + nbEdges > updateLimit ) {
2013-07-03 22:00:57 +06:00
* entities = * entities & ~ SMESH_Actor : : eEdges ;
2013-09-26 14:44:08 +06:00
* hidden = * hidden | SMESH_Actor : : eEdges ;
2013-08-05 14:35:32 +06:00
}
2013-06-21 11:33:07 +06:00
else
2013-07-03 22:00:57 +06:00
exceeded = false ;
2013-06-21 11:33:07 +06:00
}
total + = nbEdges ;
if ( nbFaces > 0 ) {
2013-08-05 14:35:32 +06:00
if ( total + nbFaces > updateLimit ) {
2013-07-03 22:00:57 +06:00
* entities = * entities & ~ SMESH_Actor : : eFaces ;
2013-09-26 14:44:08 +06:00
* hidden = * hidden | SMESH_Actor : : eFaces ;
2013-08-05 14:35:32 +06:00
}
2013-06-21 11:33:07 +06:00
else
2013-07-03 22:00:57 +06:00
exceeded = false ;
2013-06-21 11:33:07 +06:00
}
total + = nbFaces ;
if ( nbVolumes > 0 ) {
2013-08-05 14:35:32 +06:00
if ( total + nbVolumes > updateLimit ) {
2013-07-03 22:00:57 +06:00
* entities = * entities & ~ SMESH_Actor : : eVolumes ;
2013-09-26 14:44:08 +06:00
* hidden = * hidden | SMESH_Actor : : eVolumes ;
2013-08-05 14:35:32 +06:00
}
2013-06-21 11:33:07 +06:00
else
2013-07-03 22:00:57 +06:00
exceeded = false ;
2013-06-21 11:33:07 +06:00
}
total + = nbVolumes ;
if ( nbBalls > 0 ) {
2013-08-05 14:35:32 +06:00
if ( total + nbBalls > updateLimit ) {
2013-07-03 22:00:57 +06:00
* entities = * entities & ~ SMESH_Actor : : eBallElem ;
2013-09-26 14:44:08 +06:00
* hidden = * hidden | SMESH_Actor : : eBallElem ;
2013-08-05 14:35:32 +06:00
}
2013-06-21 11:33:07 +06:00
else
2013-07-03 22:00:57 +06:00
exceeded = false ;
2013-06-21 11:33:07 +06:00
}
total + = nbBalls ;
}
2013-10-16 18:56:06 +06:00
2013-06-21 11:33:07 +06:00
return autoUpdate & & ! exceeded ;
}
2005-06-07 19:22:20 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
SUIT_ResourceMgr * SMESHGUI : : resourceMgr ( )
{
return dynamic_cast < SUIT_ResourceMgr * > ( SUIT_Session : : session ( ) - > resourceMgr ( ) ) ;
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2004-06-18 14:34:31 +06:00
SMESHGUI * SMESHGUI : : GetSMESHGUI ( )
2003-05-19 20:07:00 +06:00
{
2005-06-21 18:17:08 +06:00
SMESHGUI * smeshMod = 0 ;
SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( app )
{
CAM_Module * module = app - > module ( " Mesh " ) ;
smeshMod = dynamic_cast < SMESHGUI * > ( module ) ;
}
2004-12-01 15:48:31 +05:00
2005-06-21 18:17:08 +06:00
if ( smeshMod & & smeshMod - > application ( ) & & smeshMod - > application ( ) - > activeStudy ( ) )
{
SalomeApp_Study * study = dynamic_cast < SalomeApp_Study * > ( smeshMod - > application ( ) - > activeStudy ( ) ) ;
if ( study )
{
_PTR ( Study ) aStudy = study - > studyDS ( ) ;
if ( aStudy )
2012-08-09 16:03:55 +06:00
GetSMESHGen ( ) - > SetCurrentStudy ( _CAST ( Study , aStudy ) - > GetStudy ( ) ) ;
2005-06-21 18:17:08 +06:00
}
}
2004-12-01 15:48:31 +05:00
2005-06-21 18:17:08 +06:00
return smeshMod ;
2003-05-19 20:07:00 +06:00
}
2004-06-18 14:34:31 +06:00
extern " C "
{
2005-06-21 18:17:08 +06:00
Standard_EXPORT SMESHGUI * GetComponentGUI ( )
{
2004-06-18 14:34:31 +06:00
return SMESHGUI : : GetSMESHGUI ( ) ;
}
}
2004-12-01 15:48:31 +05:00
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI : : SetState ( int aState )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
myState = aState ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI : : ResetState ( )
2003-12-10 21:05:04 +05:00
{
2005-06-07 19:22:20 +06:00
myState = - 1 ;
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI : : EmitSignalDeactivateDialog ( )
2003-12-10 21:05:04 +05:00
{
2005-06-07 19:22:20 +06:00
emit SignalDeactivateActiveDialog ( ) ;
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI : : EmitSignalStudyFrameChanged ( )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
emit SignalStudyFrameChanged ( ) ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
void SMESHGUI : : EmitSignalCloseAllDialogs ( )
{
2004-06-18 14:34:31 +06:00
emit SignalCloseAllDialogs ( ) ;
2003-05-19 20:07:00 +06:00
}
2012-08-09 16:03:55 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
void SMESHGUI : : EmitSignalVisibilityChanged ( )
{
emit SignalVisibilityChanged ( ) ;
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2003-12-10 21:05:04 +05:00
QDialog * SMESHGUI : : GetActiveDialogBox ( )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
return myActiveDialogBox ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2003-12-10 21:05:04 +05:00
void SMESHGUI : : SetActiveDialogBox ( QDialog * aDlg )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
myActiveDialogBox = ( QDialog * ) aDlg ;
2004-06-18 14:34:31 +06:00
return ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
SUIT_Desktop * SMESHGUI : : desktop ( )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ;
if ( app )
return app - > desktop ( ) ;
else
return 0 ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
SalomeApp_Study * SMESHGUI : : activeStudy ( )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
SUIT_Application * app = SUIT_Session : : session ( ) - > activeApplication ( ) ;
if ( app )
return dynamic_cast < SalomeApp_Study * > ( app - > activeStudy ( ) ) ;
else
return NULL ;
2003-05-19 20:07:00 +06:00
}
2009-02-17 10:27:49 +05:00
//=============================================================================
/*!
*
*/
//=============================================================================
2012-08-09 16:03:55 +06:00
void SMESHGUI : : Modified ( bool theIsUpdateActions )
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
if ( SalomeApp_Application * app = dynamic_cast < SalomeApp_Application * > ( SUIT_Session : : session ( ) - > activeApplication ( ) ) ) {
if ( SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( app - > activeStudy ( ) ) ) {
appStudy - > Modified ( ) ;
if ( theIsUpdateActions )
app - > updateActions ( ) ;
}
}
2009-02-17 10:27:49 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2004-06-18 14:34:31 +06:00
bool SMESHGUI : : DefineDlgPosition ( QWidget * aDlg , int & x , int & y )
2003-05-19 20:07:00 +06:00
{
2004-06-18 14:34:31 +06:00
/* Here the position is on the bottom right corner - 10 */
// aDlg->resize(QSize().expandedTo(aDlg->minimumSizeHint()));
aDlg - > adjustSize ( ) ;
2005-06-07 19:22:20 +06:00
SUIT_Desktop * PP = desktop ( ) ;
2004-06-18 14:34:31 +06:00
x = abs ( PP - > x ( ) + PP - > size ( ) . width ( ) - aDlg - > size ( ) . width ( ) - 10 ) ;
y = abs ( PP - > y ( ) + PP - > size ( ) . height ( ) - aDlg - > size ( ) . height ( ) - 10 ) ;
return true ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
static int isStudyLocked ( _PTR ( Study ) theStudy ) {
2004-12-01 15:48:31 +05:00
return theStudy - > GetProperties ( ) - > IsLocked ( ) ;
}
2005-06-07 19:22:20 +06:00
static bool checkLock ( _PTR ( Study ) theStudy ) {
2004-12-01 15:48:31 +05:00
if ( isStudyLocked ( theStudy ) ) {
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
2012-08-09 16:03:55 +06:00
QObject : : tr ( " WRN_WARNING " ) ,
QObject : : tr ( " WRN_STUDY_LOCKED " ) ) ;
2004-12-01 15:48:31 +05:00
return true ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
return false ;
2003-05-19 20:07:00 +06:00
}
2004-12-01 15:48:31 +05:00
//=======================================================================
//function : CheckActiveStudyLocked
2005-06-07 19:22:20 +06:00
//purpose :
2004-12-01 15:48:31 +05:00
//=======================================================================
2003-05-19 20:07:00 +06:00
2005-06-07 19:22:20 +06:00
bool SMESHGUI : : isActiveStudyLocked ( )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
_PTR ( Study ) aStudy = activeStudy ( ) - > studyDS ( ) ;
2004-12-01 15:48:31 +05:00
return checkLock ( aStudy ) ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
bool SMESHGUI : : OnGUIEvent ( int theCommandID )
2004-06-18 14:34:31 +06:00
{
2005-06-07 19:22:20 +06:00
SalomeApp_Application * anApp = dynamic_cast < SalomeApp_Application * > ( application ( ) ) ;
if ( ! anApp )
return false ;
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ; //Document OCAF de l'etude active
SUIT_ResourceMgr * mgr = resourceMgr ( ) ;
if ( ! mgr )
return false ;
2006-02-07 20:01:11 +05:00
if ( CORBA : : is_nil ( GetSMESHGen ( ) - > GetCurrentStudy ( ) ) ) {
GetSMESHGen ( ) - > SetCurrentStudy ( _CAST ( Study , aStudy ) - > GetStudy ( ) ) ;
}
2005-06-16 16:25:13 +06:00
SUIT_ViewWindow * view = application ( ) - > desktop ( ) - > activeWindow ( ) ;
2005-06-07 19:22:20 +06:00
SVTK_ViewWindow * vtkwnd = dynamic_cast < SVTK_ViewWindow * > ( view ) ;
2005-08-09 17:31:29 +06:00
//QAction* act = action( theCommandID );
2003-05-19 20:07:00 +06:00
2012-08-09 16:03:55 +06:00
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDelete :
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-08-17 16:44:08 +06:00
OnEditDelete ( ) ;
2004-12-01 15:48:31 +05:00
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpImportDAT :
case SMESHOp : : OpImportUNV :
case SMESHOp : : OpImportMED :
case SMESHOp : : OpImportSTL :
# ifdef WITH_CGNS
case SMESHOp : : OpImportCGNS :
# endif
case SMESHOp : : OpImportSAUV :
case SMESHOp : : OpImportGMF :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
: : ImportMeshesFromFile ( GetSMESHGen ( ) , theCommandID ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpFileInformation :
2009-02-17 10:27:49 +05:00
{
SALOME_ListIO selected ;
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) )
{
Handle ( SALOME_InteractiveObject ) anIObject = selected . First ( ) ;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( anIObject ) ;
if ( ! aMesh - > _is_nil ( ) )
{
SMESHGUI_FileInfoDlg dlg ( desktop ( ) , aMesh - > GetMEDFileInfo ( ) ) ;
dlg . exec ( ) ;
}
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpExportDAT :
case SMESHOp : : OpExportMED :
case SMESHOp : : OpExportUNV :
case SMESHOp : : OpExportSTL :
# ifdef WITH_CGNS
case SMESHOp : : OpExportCGNS :
# endif
case SMESHOp : : OpExportSAUV :
case SMESHOp : : OpExportGMF :
case SMESHOp : : OpPopupExportDAT :
case SMESHOp : : OpPopupExportMED :
case SMESHOp : : OpPopupExportUNV :
case SMESHOp : : OpPopupExportSTL :
# ifdef WITH_CGNS
case SMESHOp : : OpPopupExportCGNS :
# endif
case SMESHOp : : OpPopupExportSAUV :
case SMESHOp : : OpPopupExportGMF :
2004-06-18 14:34:31 +06:00
{
2005-06-07 19:22:20 +06:00
: : ExportMeshToFile ( theCommandID ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpReset : // SCALAR BAR
2004-06-18 14:34:31 +06:00
{
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) anIO = selected . First ( ) ;
if ( anIO - > hasEntry ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIO - > getEntry ( ) ) ) {
anActor - > SetControlMode ( SMESH_Actor : : eNone ) ;
# ifndef DISABLE_PLOT2DVIEWER
SMESH : : ProcessIn2DViewers ( anActor , SMESH : : RemoveFrom2dViewer ) ;
# endif
}
}
2004-12-01 15:48:31 +05:00
}
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpScalarBarProperties :
2004-06-18 14:34:31 +06:00
{
2005-06-08 16:45:19 +06:00
SMESHGUI_Preferences_ScalarBarDlg : : ScalarBarProperties ( this ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2015-04-21 12:37:02 +05:00
case SMESHOp : : OpShowScalarBar :
{
// show/hide scalar bar
: : ShowElement ( theCommandID ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpSaveDistribution :
2012-08-09 16:03:55 +06:00
{
// dump control distribution data to the text file
: : SaveDistribution ( ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpShowDistribution :
2012-08-09 16:03:55 +06:00
{
2015-04-21 12:37:02 +05:00
// show/hide distribution
: : ShowElement ( theCommandID ) ;
2012-08-09 16:03:55 +06:00
break ;
}
# ifndef DISABLE_PLOT2DVIEWER
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpPlotDistribution :
2012-08-09 16:03:55 +06:00
{
// plot distribution
: : PlotDistribution ( ) ;
break ;
}
# endif
2004-06-18 14:34:31 +06:00
2008-03-07 12:47:05 +05:00
// Auto-color
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpAutoColor :
2008-03-07 12:47:05 +05:00
: : AutoColor ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDisableAutoColor :
2008-03-07 12:47:05 +05:00
: : DisableAutoColor ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpClipping :
case SMESHOp : : OpTransparency :
case SMESHOp : : OpProperties : // Display preferences (colors, shrink size, line width, ...)
2005-01-20 11:25:54 +05:00
// Display Mode
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDMWireframe :
case SMESHOp : : OpDMShading :
case SMESHOp : : OpDMNodes :
case SMESHOp : : OpDMShrink :
2012-08-09 16:03:55 +06:00
: : SetDisplayMode ( theCommandID , myMarkerMap ) ;
2005-01-20 11:25:54 +05:00
break ;
2012-08-09 16:03:55 +06:00
//2D quadratic representation
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRepresentationLines :
case SMESHOp : : OpRepresentationArcs :
2012-08-09 16:03:55 +06:00
: : SetDisplayMode ( theCommandID , myMarkerMap ) ;
break ;
// Display Entity
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDE0DElements :
case SMESHOp : : OpDEEdges :
case SMESHOp : : OpDEFaces :
case SMESHOp : : OpDEVolumes :
case SMESHOp : : OpDEBalls :
case SMESHOp : : OpDEAllEntity :
2005-01-20 11:25:54 +05:00
: : SetDisplayEntity ( theCommandID ) ;
break ;
2004-06-18 14:34:31 +06:00
2014-09-08 18:36:41 +06:00
// Choose entities to be displayed
case SMESHOp : : OpDEChoose :
{
( new SMESHGUI_DisplayEntitiesDlg ( SMESHGUI : : desktop ( ) ) ) - > exec ( ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpOrientationOnFaces :
2009-02-17 10:27:49 +05:00
{
LightApp_SelectionMgr * mgr = selectionMgr ( ) ;
SALOME_ListIO selected ; mgr - > selectedObjects ( selected ) ;
SALOME_ListIteratorOfListIO it ( selected ) ;
for ( ; it . More ( ) ; it . Next ( ) ) {
Handle ( SALOME_InteractiveObject ) anIObject = it . Value ( ) ;
2012-08-09 16:03:55 +06:00
if ( anIObject - > hasEntry ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIObject - > getEntry ( ) ) ) {
anActor - > SetFacesOriented ( ! anActor - > GetFacesOriented ( ) ) ;
}
}
2009-02-17 10:27:49 +05:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpUpdate :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2013-06-20 19:05:03 +06:00
SUIT_OverrideCursor wc ;
2008-03-07 12:47:05 +05:00
try {
# if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS ;
# endif
SMESH : : UpdateView ( ) ;
}
catch ( std : : bad_alloc ) { // PAL16774 (Crash after display of many groups)
SMESH : : OnVisuException ( ) ;
}
catch ( . . . ) { // PAL16774 (Crash after display of many groups)
SMESH : : OnVisuException ( ) ;
}
2005-06-16 16:25:13 +06:00
SALOME_ListIO l ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-11-30 17:39:44 +05:00
aSel - > selectedObjects ( l ) ;
2005-06-16 16:25:13 +06:00
aSel - > setSelectedObjects ( l ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpHide :
case SMESHOp : : OpShow :
case SMESHOp : : OpShowOnly :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
SMESH : : EDisplaing anAction ;
2005-08-09 17:31:29 +06:00
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpHide : anAction = SMESH : : eErase ; break ;
case SMESHOp : : OpShow : anAction = SMESH : : eDisplay ; break ;
case SMESHOp : : OpShowOnly : anAction = SMESH : : eDisplayOnly ; break ;
2004-06-18 14:34:31 +06:00
}
2005-06-07 19:22:20 +06:00
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-09-29 13:00:14 +06:00
SALOME_ListIO sel_objects , to_process ;
2005-08-09 17:31:29 +06:00
if ( aSel )
2005-09-29 13:00:14 +06:00
aSel - > selectedObjects ( sel_objects ) ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpShowOnly )
2012-08-09 16:03:55 +06:00
{
MESSAGE ( " anAction = SMESH::eDisplayOnly " ) ;
startOperation ( myEraseAll ) ;
}
2005-11-09 16:10:51 +05:00
2005-12-14 11:44:19 +05:00
extractContainers ( sel_objects , to_process ) ;
2005-06-07 19:22:20 +06:00
2008-03-07 12:47:05 +05:00
try {
# if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS ;
# endif
if ( vtkwnd ) {
SALOME_ListIteratorOfListIO It ( to_process ) ;
2009-02-17 10:27:49 +05:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2013-07-22 20:27:40 +06:00
MESSAGE ( " --- " ) ;
2008-03-07 12:47:05 +05:00
Handle ( SALOME_InteractiveObject ) IOS = It . Value ( ) ;
if ( IOS - > hasEntry ( ) ) {
2013-07-22 20:27:40 +06:00
MESSAGE ( " --- " ) ;
2012-08-09 16:03:55 +06:00
if ( ! SMESH : : UpdateView ( anAction , IOS - > getEntry ( ) ) ) {
SMESHGUI : : GetSMESHGUI ( ) - > EmitSignalVisibilityChanged ( ) ;
2008-03-07 12:47:05 +05:00
break ; // PAL16774 (Crash after display of many groups)
2012-08-09 16:03:55 +06:00
}
2008-03-07 12:47:05 +05:00
if ( anAction = = SMESH : : eDisplayOnly )
2012-08-09 16:03:55 +06:00
{
MESSAGE ( " anAction = SMESH::eDisplayOnly " ) ;
2008-03-07 12:47:05 +05:00
anAction = SMESH : : eDisplay ;
2012-08-09 16:03:55 +06:00
}
2008-03-07 12:47:05 +05:00
}
}
}
// PAL13338 + PAL15161 -->
2014-07-23 16:30:09 +06:00
if ( ( theCommandID = = SMESHOp : : OpShow | | theCommandID = = SMESHOp : : OpShowOnly ) & & ! checkLock ( aStudy ) ) {
2013-07-22 20:27:40 +06:00
MESSAGE ( " anAction = SMESH::eDisplayOnly " ) ;
2008-03-07 12:47:05 +05:00
SMESH : : UpdateView ( ) ;
2012-08-09 16:03:55 +06:00
SMESHGUI : : GetSMESHGUI ( ) - > EmitSignalVisibilityChanged ( ) ;
}
2008-03-07 12:47:05 +05:00
// PAL13338 + PAL15161 <--
}
catch ( . . . ) { // PAL16774 (Crash after display of many groups)
SMESH : : OnVisuException ( ) ;
2004-06-18 14:34:31 +06:00
}
2005-09-22 20:34:08 +06:00
2005-09-02 14:18:36 +06:00
if ( anAction = = SMESH : : eErase ) {
2012-08-09 16:03:55 +06:00
MESSAGE ( " anAction == SMESH::eErase " ) ;
SALOME_ListIO l1 ;
aSel - > setSelectedObjects ( l1 ) ;
2005-09-02 14:18:36 +06:00
}
else
2012-08-09 16:03:55 +06:00
aSel - > setSelectedObjects ( to_process ) ;
2008-03-07 12:47:05 +05:00
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpNode :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
( new SMESHGUI_NodesDlg ( this ) ) - > show ( ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) ,
tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateMesh :
case SMESHOp : : OpCreateSubMesh :
case SMESHOp : : OpEditMeshOrSubMesh :
case SMESHOp : : OpCompute :
case SMESHOp : : OpPreCompute :
case SMESHOp : : OpEvaluate :
case SMESHOp : : OpMeshOrder :
2009-02-17 10:27:49 +05:00
startOperation ( theCommandID ) ;
2005-08-23 14:47:31 +06:00
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCopyMesh :
2012-08-09 16:03:55 +06:00
{
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_CopyMeshDlg ( this ) ) - > show ( ) ;
}
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpBuildCompoundMesh :
2008-03-07 12:47:05 +05:00
{
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
2009-02-17 10:27:49 +05:00
( new SMESHGUI_BuildCompoundDlg ( this ) ) - > show ( ) ;
2008-03-07 12:47:05 +05:00
}
break ;
2009-02-17 10:27:49 +05:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDiagonalInversion :
case SMESHOp : : OpUnionOfTwoTriangle :
2004-06-18 14:34:31 +06:00
{
2005-06-07 19:22:20 +06:00
if ( ! vtkwnd )
2004-06-18 14:34:31 +06:00
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2004-12-01 15:48:31 +05:00
break ;
}
if ( checkLock ( aStudy ) )
break ;
2005-06-07 19:22:20 +06:00
2004-12-01 15:48:31 +05:00
/*Standard_Boolean aRes;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( IObject ) ;
if ( aMesh - > _is_nil ( ) )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( GetDesktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
tr ( " SMESH_BAD_SELECTION " ) ) ;
2004-12-01 15:48:31 +05:00
break ;
}
*/
EmitSignalDeactivateDialog ( ) ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpDiagonalInversion )
2009-02-17 10:27:49 +05:00
( new SMESHGUI_TrianglesInversionDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
else
2009-02-17 10:27:49 +05:00
( new SMESHGUI_UnionOfTwoTrianglesDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpOrientation :
case SMESHOp : : OpUnionOfTriangles :
case SMESHOp : : OpCuttingOfQuadrangles :
case SMESHOp : : OpSplitVolumes :
2004-06-18 14:34:31 +06:00
{
2005-06-07 19:22:20 +06:00
if ( ! vtkwnd )
2004-06-18 14:34:31 +06:00
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) )
break ;
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
EmitSignalDeactivateDialog ( ) ;
2005-06-07 19:22:20 +06:00
SMESHGUI_MultiEditDlg * aDlg = NULL ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpOrientation )
2005-06-07 19:22:20 +06:00
aDlg = new SMESHGUI_ChangeOrientationDlg ( this ) ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpUnionOfTriangles )
2005-06-07 19:22:20 +06:00
aDlg = new SMESHGUI_UnionOfTrianglesDlg ( this ) ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpSplitVolumes )
2014-01-20 16:31:23 +06:00
aDlg = new SMESHGUI_SplitVolumesDlg ( this ) ;
2004-12-01 15:48:31 +05:00
else
2005-06-07 19:22:20 +06:00
aDlg = new SMESHGUI_CuttingOfQuadsDlg ( this ) ;
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
aDlg - > show ( ) ;
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpSmoothing :
2004-12-01 15:48:31 +05:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_SmoothingDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpExtrusion :
2004-12-01 15:48:31 +05:00
{
2005-06-07 19:22:20 +06:00
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_ExtrusionDlg ( this ) ) - > show ( ) ;
2005-06-07 19:22:20 +06:00
} else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpExtrusionAlongAPath :
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_ExtrusionAlongPathDlg ( this ) ) - > show ( ) ;
} else {
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
break ;
}
case SMESHOp : : OpRevolution :
2004-12-01 15:48:31 +05:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RevolutionDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-12-01 15:48:31 +05:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpPatternMapping :
2004-12-01 15:48:31 +05:00
{
if ( checkLock ( aStudy ) )
break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd )
2004-12-01 15:48:31 +05:00
{
EmitSignalDeactivateDialog ( ) ;
2009-02-17 10:27:49 +05:00
( new SMESHGUI_MeshPatternDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-12-01 15:48:31 +05:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpConvertMeshToQuadratic :
case SMESHOp : : OpCreateBoundaryElements : // create 2D mesh from 3D
case SMESHOp : : OpReorientFaces :
case SMESHOp : : OpCreateGeometryGroup :
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
startOperation ( theCommandID ) ;
2009-02-17 10:27:49 +05:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateGroup :
2004-12-01 15:48:31 +05:00
{
2005-06-16 16:25:13 +06:00
if ( ! vtkwnd )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2005-06-16 16:25:13 +06:00
break ;
}
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : SMESH_Mesh : : _nil ( ) ;
2005-06-07 19:22:20 +06:00
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
int nbSel = selected . Extent ( ) ;
2004-12-01 15:48:31 +05:00
if ( nbSel = = 1 ) {
2012-08-09 16:03:55 +06:00
// check if mesh is selected
2005-06-07 19:22:20 +06:00
aMesh = SMESH : : GetMeshByIO ( selected . First ( ) ) ;
2004-12-01 15:48:31 +05:00
}
2009-02-17 10:27:49 +05:00
SMESHGUI_GroupDlg * aDlg = new SMESHGUI_GroupDlg ( this , aMesh ) ;
2004-12-01 15:48:31 +05:00
aDlg - > show ( ) ;
break ;
2004-06-18 14:34:31 +06:00
}
2003-05-19 20:07:00 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpConstructGroup :
2004-12-01 15:48:31 +05:00
{
2005-06-16 16:25:13 +06:00
if ( ! vtkwnd )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2005-06-16 16:25:13 +06:00
break ;
}
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
2005-06-07 19:22:20 +06:00
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
int nbSel = selected . Extent ( ) ;
2004-12-01 15:48:31 +05:00
if ( nbSel = = 1 ) {
2012-08-09 16:03:55 +06:00
// check if submesh is selected
Handle ( SALOME_InteractiveObject ) IObject = selected . First ( ) ;
if ( IObject - > hasEntry ( ) ) {
_PTR ( SObject ) aSObj = aStudy - > FindObjectID ( IObject - > getEntry ( ) ) ;
if ( aSObj ) {
SMESH : : SMESH_subMesh_var aSubMesh = SMESH : : SMESH_subMesh : : _narrow ( SMESH : : SObjectToObject ( aSObj ) ) ;
if ( ! aSubMesh - > _is_nil ( ) ) {
try {
SMESH : : SMESH_Mesh_var aMesh = aSubMesh - > GetFather ( ) ;
// get submesh elements list by types
SMESH : : long_array_var aNodes = aSubMesh - > GetElementsByType ( SMESH : : NODE ) ;
SMESH : : long_array_var aEdges = aSubMesh - > GetElementsByType ( SMESH : : EDGE ) ;
SMESH : : long_array_var aFaces = aSubMesh - > GetElementsByType ( SMESH : : FACE ) ;
SMESH : : long_array_var aVolumes = aSubMesh - > GetElementsByType ( SMESH : : VOLUME ) ;
// create group for each type o elements
QString aName = IObject - > getName ( ) ;
QStringList anEntryList ;
if ( aNodes - > length ( ) > 0 ) {
SMESH : : SMESH_Group_var aGroup = SMESH : : AddGroup ( aMesh , SMESH : : NODE , aName + " _Nodes " ) ;
aGroup - > Add ( aNodes . inout ( ) ) ;
if ( _PTR ( SObject ) aSObject = SMESH : : ObjectToSObject ( aGroup ) )
anEntryList . append ( aSObject - > GetID ( ) . c_str ( ) ) ;
}
if ( aEdges - > length ( ) > 0 ) {
SMESH : : SMESH_Group_var aGroup = SMESH : : AddGroup ( aMesh , SMESH : : EDGE , aName + " _Edges " ) ;
aGroup - > Add ( aEdges . inout ( ) ) ;
if ( _PTR ( SObject ) aSObject = SMESH : : ObjectToSObject ( aGroup ) )
anEntryList . append ( aSObject - > GetID ( ) . c_str ( ) ) ;
}
if ( aFaces - > length ( ) > 0 ) {
SMESH : : SMESH_Group_var aGroup = SMESH : : AddGroup ( aMesh , SMESH : : FACE , aName + " _Faces " ) ;
aGroup - > Add ( aFaces . inout ( ) ) ;
if ( _PTR ( SObject ) aSObject = SMESH : : ObjectToSObject ( aGroup ) )
anEntryList . append ( aSObject - > GetID ( ) . c_str ( ) ) ;
}
if ( aVolumes - > length ( ) > 0 ) {
SMESH : : SMESH_Group_var aGroup = SMESH : : AddGroup ( aMesh , SMESH : : VOLUME , aName + " _Volumes " ) ;
aGroup - > Add ( aVolumes . inout ( ) ) ;
if ( _PTR ( SObject ) aSObject = SMESH : : ObjectToSObject ( aGroup ) )
anEntryList . append ( aSObject - > GetID ( ) . c_str ( ) ) ;
}
updateObjBrowser ( ) ;
anApp - > browseObjects ( anEntryList ) ;
}
2008-03-07 12:47:05 +05:00
catch ( const SALOME : : SALOME_Exception & S_ex ) {
2012-08-09 16:03:55 +06:00
SalomeApp_Tools : : QtCatchCorbaException ( S_ex ) ;
}
}
}
}
2004-12-01 15:48:31 +05:00
}
2008-03-07 12:47:05 +05:00
else if ( nbSel = = 0 ) {
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) ,
2012-08-09 16:03:55 +06:00
tr ( " SMESH_WRN_WARNING " ) ,
tr ( " SMESH_WRN_NO_AVAILABLE_DATA " ) ) ;
2008-03-07 12:47:05 +05:00
}
2004-12-01 15:48:31 +05:00
break ;
}
2003-05-19 20:07:00 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpEditGroup :
2004-12-01 15:48:31 +05:00
{
2005-06-23 14:58:59 +06:00
if ( ! vtkwnd )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2005-06-23 14:58:59 +06:00
break ;
}
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
2005-06-07 19:22:20 +06:00
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
SALOME_ListIteratorOfListIO It ( selected ) ;
2004-12-01 15:48:31 +05:00
int nbSelectedGroups = 0 ;
for ( ; It . More ( ) ; It . Next ( ) )
{
2006-03-13 20:29:49 +05:00
SMESH : : SMESH_GroupBase_var aGroup =
SMESH : : IObjectToInterface < SMESH : : SMESH_GroupBase > ( It . Value ( ) ) ;
2004-12-01 15:48:31 +05:00
if ( ! aGroup - > _is_nil ( ) ) {
2012-08-09 16:03:55 +06:00
nbSelectedGroups + + ;
2009-02-17 10:27:49 +05:00
SMESHGUI_GroupDlg * aDlg = new SMESHGUI_GroupDlg ( this , aGroup ) ;
2004-12-01 15:48:31 +05:00
aDlg - > show ( ) ;
2012-08-09 16:03:55 +06:00
}
2004-12-01 15:48:31 +05:00
}
if ( nbSelectedGroups = = 0 )
2012-08-09 16:03:55 +06:00
{
SMESHGUI_GroupDlg * aDlg = new SMESHGUI_GroupDlg ( this , SMESH : : SMESH_GroupBase : : _nil ( ) ) ;
aDlg - > show ( ) ;
}
2004-12-01 15:48:31 +05:00
break ;
}
2003-05-19 20:07:00 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpAddElemGroupPopup : // Add elements to group
2004-12-01 15:48:31 +05:00
{
if ( checkLock ( aStudy ) ) break ;
if ( myState = = 800 ) {
2012-08-09 16:03:55 +06:00
SMESHGUI_GroupDlg * aDlg = ( SMESHGUI_GroupDlg * ) myActiveDialogBox ;
if ( aDlg ) aDlg - > onAdd ( ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
}
2004-06-18 14:34:31 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRemoveElemGroupPopup : // Remove elements from group
2004-12-01 15:48:31 +05:00
{
if ( checkLock ( aStudy ) ) break ;
if ( myState = = 800 ) {
2012-08-09 16:03:55 +06:00
SMESHGUI_GroupDlg * aDlg = ( SMESHGUI_GroupDlg * ) myActiveDialogBox ;
if ( aDlg ) aDlg - > onRemove ( ) ;
2004-12-01 15:48:31 +05:00
}
break ;
}
2004-06-18 14:34:31 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpEditGeomGroupAsGroup :
2009-02-17 10:27:49 +05:00
{
if ( ! vtkwnd )
{
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2009-02-17 10:27:49 +05:00
break ;
}
if ( checkLock ( aStudy ) ) break ;
EmitSignalDeactivateDialog ( ) ;
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; It . More ( ) ; It . Next ( ) )
{
SMESH : : SMESH_GroupOnGeom_var aGroup =
SMESH : : IObjectToInterface < SMESH : : SMESH_GroupOnGeom > ( It . Value ( ) ) ;
if ( ! aGroup - > _is_nil ( ) ) {
SMESHGUI_GroupDlg * aDlg = new SMESHGUI_GroupDlg ( this , aGroup , true ) ;
aDlg - > show ( ) ;
2012-08-09 16:03:55 +06:00
}
else
{
SMESH : : SMESH_GroupOnFilter_var aGroup =
SMESH : : IObjectToInterface < SMESH : : SMESH_GroupOnFilter > ( It . Value ( ) ) ;
if ( ! aGroup - > _is_nil ( ) ) {
SMESHGUI_GroupDlg * aDlg = new SMESHGUI_GroupDlg ( this , aGroup , true ) ;
aDlg - > show ( ) ;
}
}
2009-02-17 10:27:49 +05:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpUnionGroups :
case SMESHOp : : OpIntersectGroups :
case SMESHOp : : OpCutGroups :
2004-12-01 15:48:31 +05:00
{
2005-06-23 14:58:59 +06:00
if ( ! vtkwnd )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2005-06-23 14:58:59 +06:00
break ;
}
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) )
break ;
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
EmitSignalDeactivateDialog ( ) ;
2004-06-18 14:34:31 +06:00
2009-02-17 10:27:49 +05:00
SMESHGUI_GroupOpDlg * aDlg = 0 ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpUnionGroups )
2009-02-17 10:27:49 +05:00
aDlg = new SMESHGUI_UnionGroupsDlg ( this ) ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpIntersectGroups )
2009-02-17 10:27:49 +05:00
aDlg = new SMESHGUI_IntersectGroupsDlg ( this ) ;
else
aDlg = new SMESHGUI_CutGroupsDlg ( this ) ;
aDlg - > show ( ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpGroupUnderlyingElem : // Create groups of entities from existing groups of superior dimensions
2009-02-17 10:27:49 +05:00
{
if ( checkLock ( aStudy ) )
break ;
EmitSignalDeactivateDialog ( ) ;
SMESHGUI_GroupOpDlg * aDlg = new SMESHGUI_DimGroupDlg ( this ) ;
aDlg - > show ( ) ;
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
break ;
}
2004-06-18 14:34:31 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDeleteGroup : // Delete groups with their contents
2004-12-01 15:48:31 +05:00
{
2005-06-23 14:58:59 +06:00
if ( ! vtkwnd )
{
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) , tr ( " SMESH_WRN_WARNING " ) ,
2012-08-09 16:03:55 +06:00
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2005-06-23 14:58:59 +06:00
break ;
}
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) )
break ;
2004-06-18 14:34:31 +06:00
2004-12-01 15:48:31 +05:00
EmitSignalDeactivateDialog ( ) ;
2004-06-18 14:34:31 +06:00
2009-02-17 10:27:49 +05:00
( new SMESHGUI_DeleteGroupDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
break ;
}
2004-06-18 14:34:31 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMeshInformation :
case SMESHOp : : OpWhatIs :
2004-12-01 15:48:31 +05:00
{
2014-07-23 16:30:09 +06:00
int page = theCommandID = = SMESHOp : : OpMeshInformation ? SMESHGUI_MeshInfoDlg : : BaseInfo : SMESHGUI_MeshInfoDlg : : ElemInfo ;
2004-12-01 15:48:31 +05:00
EmitSignalDeactivateDialog ( ) ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) > 1 ) { // a dlg for each IO
2012-08-09 16:03:55 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
2004-12-01 15:48:31 +05:00
for ( ; It . More ( ) ; It . Next ( ) ) {
2012-08-09 16:03:55 +06:00
SMESHGUI_MeshInfoDlg * dlg = new SMESHGUI_MeshInfoDlg ( SMESHGUI : : desktop ( ) , page ) ;
dlg - > showInfo ( It . Value ( ) ) ;
dlg - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
}
2012-08-09 16:03:55 +06:00
else {
SMESHGUI_MeshInfoDlg * dlg = new SMESHGUI_MeshInfoDlg ( SMESHGUI : : desktop ( ) , page ) ;
dlg - > show ( ) ;
2004-12-17 16:07:35 +05:00
}
break ;
2005-09-22 20:34:08 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpFindElementByPoint :
2008-03-07 12:47:05 +05:00
{
2012-08-09 16:03:55 +06:00
startOperation ( theCommandID ) ;
2008-03-07 12:47:05 +05:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpEditHypothesis :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
aSel - > selectedObjects ( selected ) ;
int nbSel = selected . Extent ( ) ;
2004-12-01 15:48:31 +05:00
if ( nbSel = = 1 ) {
2008-03-07 12:47:05 +05:00
Handle ( SALOME_InteractiveObject ) anIObject = selected . First ( ) ;
2012-08-09 16:03:55 +06:00
SMESH : : SMESH_Hypothesis_var aHypothesis = SMESH : : IObjectToInterface < SMESH : : SMESH_Hypothesis > ( anIObject ) ;
2004-12-01 15:48:31 +05:00
2008-03-07 12:47:05 +05:00
if ( ! aHypothesis - > _is_nil ( ) )
2004-12-01 15:48:31 +05:00
{
2014-07-25 20:06:05 +06:00
SMESHGUI_GenericHypothesisCreator * aCreator =
SMESH : : GetHypothesisCreator ( SMESH : : toQStr ( aHypothesis - > GetName ( ) ) ) ;
if ( aCreator )
{
// set geometry of mesh and sub-mesh to aCreator
aSel - > selectedObjects ( selected , " " , /*convertReferences=*/ false ) ;
if ( selected . Extent ( ) = = 1 )
{
QString subGeomID , meshGeomID ;
Handle ( SALOME_InteractiveObject ) hypIO = selected . First ( ) ;
if ( SMESH : : GetGeomEntries ( hypIO , subGeomID , meshGeomID ) )
{
if ( subGeomID . isEmpty ( ) ) subGeomID = meshGeomID ;
aCreator - > setShapeEntry ( subGeomID ) ;
aCreator - > setMainShapeEntry ( meshGeomID ) ;
}
}
2012-08-09 16:03:55 +06:00
aCreator - > edit ( aHypothesis . in ( ) , anIObject - > getName ( ) , desktop ( ) , this , SLOT ( onHypothesisEdit ( int ) ) ) ;
}
2004-12-01 15:48:31 +05:00
else
{
// report error
}
}
}
2004-06-18 14:34:31 +06:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpUnassign : // REMOVE HYPOTHESIS / ALGORITHMS
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
SUIT_OverrideCursor wc ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ;
if ( aSel )
2005-10-25 14:19:21 +06:00
aSel - > selectedObjects ( selected , QString : : null , false ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIteratorOfListIO It ( selected ) ;
2004-12-01 15:48:31 +05:00
for ( int i = 0 ; It . More ( ) ; It . Next ( ) , i + + ) {
2012-08-09 16:03:55 +06:00
Handle ( SALOME_InteractiveObject ) IObject = It . Value ( ) ;
SMESH : : RemoveHypothesisOrAlgorithmOnMesh ( IObject ) ;
2004-12-01 15:48:31 +05:00
}
2005-06-09 10:48:24 +06:00
SALOME_ListIO l1 ;
aSel - > setSelectedObjects ( l1 ) ;
2005-06-07 19:22:20 +06:00
updateObjBrowser ( ) ;
2004-06-18 14:34:31 +06:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpElem0D :
case SMESHOp : : OpBall :
case SMESHOp : : OpEdge :
case SMESHOp : : OpTriangle :
case SMESHOp : : OpQuadrangle :
case SMESHOp : : OpPolygon :
case SMESHOp : : OpTetrahedron :
case SMESHOp : : OpHexahedron :
case SMESHOp : : OpPentahedron :
case SMESHOp : : OpPyramid :
case SMESHOp : : OpHexagonalPrism :
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
SMDSAbs_EntityType type = SMDSEntity_Edge ;
2004-12-01 15:48:31 +05:00
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpElem0D : type = SMDSEntity_0D ; break ;
case SMESHOp : : OpBall : type = SMDSEntity_Ball ; break ;
case SMESHOp : : OpTriangle : type = SMDSEntity_Triangle ; break ;
case SMESHOp : : OpQuadrangle : type = SMDSEntity_Quadrangle ; break ;
case SMESHOp : : OpTetrahedron : type = SMDSEntity_Tetra ; break ;
case SMESHOp : : OpPolygon : type = SMDSEntity_Polygon ; break ;
case SMESHOp : : OpHexahedron : type = SMDSEntity_Hexa ; break ;
case SMESHOp : : OpPentahedron : type = SMDSEntity_Penta ; break ;
case SMESHOp : : OpPyramid : type = SMDSEntity_Pyramid ; break ;
case SMESHOp : : OpHexagonalPrism : type = SMDSEntity_Hexagonal_Prism ; break ;
2004-12-01 15:48:31 +05:00
default : ;
}
2012-08-09 16:03:55 +06:00
( new SMESHGUI_AddMeshElementDlg ( this , type ) ) - > show ( ) ;
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2005-06-07 19:22:20 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpPolyhedron :
2005-06-07 19:22:20 +06:00
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_CreatePolyhedralVolumeDlg ( this ) ) - > show ( ) ;
2005-06-07 19:22:20 +06:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpQuadraticEdge :
case SMESHOp : : OpQuadraticTriangle :
case SMESHOp : : OpBiQuadraticTriangle :
case SMESHOp : : OpQuadraticQuadrangle :
case SMESHOp : : OpBiQuadraticQuadrangle :
case SMESHOp : : OpQuadraticTetrahedron :
case SMESHOp : : OpQuadraticPyramid :
case SMESHOp : : OpQuadraticPentahedron :
case SMESHOp : : OpQuadraticHexahedron :
case SMESHOp : : OpTriQuadraticHexahedron :
2006-03-13 20:29:49 +05:00
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
2012-12-13 17:41:29 +06:00
SMDSAbs_EntityType type = SMDSEntity_Last ;
2012-08-09 16:03:55 +06:00
switch ( theCommandID ) {
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpQuadraticEdge : type = SMDSEntity_Quad_Edge ; break ;
case SMESHOp : : OpQuadraticTriangle : type = SMDSEntity_Quad_Triangle ; break ;
case SMESHOp : : OpBiQuadraticTriangle : type = SMDSEntity_BiQuad_Triangle ; break ;
case SMESHOp : : OpQuadraticQuadrangle : type = SMDSEntity_Quad_Quadrangle ; break ;
case SMESHOp : : OpBiQuadraticQuadrangle : type = SMDSEntity_BiQuad_Quadrangle ; break ;
case SMESHOp : : OpQuadraticTetrahedron : type = SMDSEntity_Quad_Tetra ; break ;
case SMESHOp : : OpQuadraticPyramid : type = SMDSEntity_Quad_Pyramid ; break ;
case SMESHOp : : OpQuadraticPentahedron : type = SMDSEntity_Quad_Penta ; break ;
case SMESHOp : : OpQuadraticHexahedron : type = SMDSEntity_Quad_Hexa ; break ;
case SMESHOp : : OpTriQuadraticHexahedron : type = SMDSEntity_TriQuad_Hexa ; break ;
2012-12-13 17:41:29 +06:00
default : break ;
2012-08-09 16:03:55 +06:00
}
2012-12-13 17:41:29 +06:00
if ( type ! = SMDSEntity_Last )
( new SMESHGUI_AddQuadraticElementDlg ( this , type ) ) - > show ( ) ;
2006-03-13 20:29:49 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2006-03-13 20:29:49 +05:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRemoveNodes :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RemoveNodesDlg ( this ) ) - > show ( ) ;
2004-06-18 14:34:31 +06:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRemoveElements : // REMOVES ELEMENTS
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RemoveElementsDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else
2012-08-09 16:03:55 +06:00
{
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
2004-12-01 15:48:31 +05:00
break ;
2004-06-18 14:34:31 +06:00
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpClearMesh : {
2009-02-17 10:27:49 +05:00
if ( checkLock ( aStudy ) ) break ;
SALOME_ListIO selected ;
if ( LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) )
aSel - > selectedObjects ( selected ) ;
SUIT_OverrideCursor wc ;
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; It . More ( ) ; It . Next ( ) )
{
Handle ( SALOME_InteractiveObject ) IOS = It . Value ( ) ;
SMESH : : SMESH_Mesh_var aMesh =
SMESH : : IObjectToInterface < SMESH : : SMESH_Mesh > ( IOS ) ;
if ( aMesh - > _is_nil ( ) ) continue ;
try {
2012-08-09 16:03:55 +06:00
SMESH : : RemoveVisualObjectWithActors ( IOS - > getEntry ( ) , true ) ;
2009-02-17 10:27:49 +05:00
aMesh - > Clear ( ) ;
_PTR ( SObject ) aMeshSObj = SMESH : : FindSObject ( aMesh ) ;
SMESH : : ModifiedMesh ( aMeshSObj , false , true ) ;
// hide groups and submeshes
_PTR ( ChildIterator ) anIter =
SMESH : : GetActiveStudyDocument ( ) - > NewChildIterator ( aMeshSObj ) ;
for ( anIter - > InitEx ( true ) ; anIter - > More ( ) ; anIter - > Next ( ) )
{
_PTR ( SObject ) so = anIter - > Value ( ) ;
2012-08-09 16:03:55 +06:00
SMESH : : RemoveVisualObjectWithActors ( so - > GetID ( ) . c_str ( ) , true ) ;
2009-02-17 10:27:49 +05:00
}
}
catch ( const SALOME : : SALOME_Exception & S_ex ) {
2012-08-09 16:03:55 +06:00
wc . suspend ( ) ;
SalomeApp_Tools : : QtCatchCorbaException ( S_ex ) ;
wc . resume ( ) ;
2009-02-17 10:27:49 +05:00
}
}
SMESH : : UpdateView ( ) ;
updateObjBrowser ( ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRemoveOrphanNodes :
2012-08-09 16:03:55 +06:00
{
if ( checkLock ( aStudy ) ) break ;
SALOME_ListIO selected ;
if ( LightApp_SelectionMgr * aSel = SMESHGUI : : selectionMgr ( ) )
aSel - > selectedObjects ( selected ) ;
if ( selected . Extent ( ) = = 1 ) {
Handle ( SALOME_InteractiveObject ) anIO = selected . First ( ) ;
SMESH : : SMESH_Mesh_var aMesh = SMESH : : GetMeshByIO ( anIO ) ;
if ( ! aMesh - > _is_nil ( ) ) {
bool confirm = SUIT_MessageBox : : question ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WARNING " ) ,
tr ( " REMOVE_ORPHAN_NODES_QUESTION " ) ,
SUIT_MessageBox : : Yes |
SUIT_MessageBox : : No ,
SUIT_MessageBox : : No ) = = SUIT_MessageBox : : Yes ;
if ( confirm ) {
try {
2013-06-20 19:05:03 +06:00
SUIT_OverrideCursor wc ;
2012-08-09 16:03:55 +06:00
SMESH : : SMESH_MeshEditor_var aMeshEditor = aMesh - > GetMeshEditor ( ) ;
int removed = aMeshEditor - > RemoveOrphanNodes ( ) ;
SUIT_MessageBox : : information ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_INFORMATION " ) ,
tr ( " NB_NODES_REMOVED " ) . arg ( removed ) ) ;
if ( removed > 0 ) {
SMESH : : UpdateView ( ) ;
SMESHGUI : : Modified ( ) ;
}
}
catch ( const SALOME : : SALOME_Exception & S_ex ) {
SalomeApp_Tools : : QtCatchCorbaException ( S_ex ) ;
}
catch ( . . . ) {
}
}
}
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRenumberingNodes :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RenumberingDlg ( this , 0 ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else
2012-08-09 16:03:55 +06:00
{
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
2004-06-18 14:34:31 +06:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRenumberingElements :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RenumberingDlg ( this , 1 ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else
2012-08-09 16:03:55 +06:00
{
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
2004-06-18 14:34:31 +06:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpTranslation :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_TranslationDlg ( this ) ) - > show ( ) ;
2004-06-18 14:34:31 +06:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpRotation :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_RotationDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-12-01 15:48:31 +05:00
}
2004-06-18 14:34:31 +06:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpSymmetry :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_SymmetryDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpScale :
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_ScaleDlg ( this ) ) - > show ( ) ;
}
else {
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
break ;
}
case SMESHOp : : OpSewing :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_SewingDlg ( this ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMergeNodes :
2004-06-18 14:34:31 +06:00
{
if ( checkLock ( aStudy ) ) break ;
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_MergeDlg ( this , 0 ) ) - > show ( ) ;
2004-12-01 15:48:31 +05:00
}
else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2004-06-18 14:34:31 +06:00
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMergeElements :
2005-08-09 17:31:29 +06:00
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_MergeDlg ( this , 1 ) ) - > show ( ) ;
2005-08-09 17:31:29 +06:00
} else {
2012-08-09 16:03:55 +06:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
2005-08-09 17:31:29 +06:00
}
break ;
}
2005-09-22 20:34:08 +06:00
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMoveNode : // MAKE MESH PASS THROUGH POINT
startOperation ( SMESHOp : : OpMoveNode ) ;
2008-03-07 12:47:05 +05:00
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpDuplicateNodes :
2012-08-09 16:03:55 +06:00
{
if ( checkLock ( aStudy ) ) break ;
if ( vtkwnd ) {
EmitSignalDeactivateDialog ( ) ;
( new SMESHGUI_DuplicateNodesDlg ( this ) ) - > show ( ) ;
}
else {
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
tr ( " SMESH_WRN_WARNING " ) , tr ( " SMESH_WRN_VIEWER_VTK " ) ) ;
}
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpElem0DOnElemNodes : // 0D_ON_ALL_NODES
startOperation ( SMESHOp : : OpElem0DOnElemNodes ) ;
2012-12-13 17:41:29 +06:00
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpSelectFiltersLibrary : // Library of selection filters
2004-12-01 15:48:31 +05:00
{
2009-02-17 10:27:49 +05:00
static QList < int > aTypes ;
2004-12-01 15:48:31 +05:00
if ( aTypes . isEmpty ( ) )
2004-06-18 14:34:31 +06:00
{
2004-12-01 15:48:31 +05:00
aTypes . append ( SMESH : : NODE ) ;
aTypes . append ( SMESH : : EDGE ) ;
aTypes . append ( SMESH : : FACE ) ;
aTypes . append ( SMESH : : VOLUME ) ;
2004-06-18 14:34:31 +06:00
}
2006-05-06 14:51:48 +06:00
if ( ! myFilterLibraryDlg )
myFilterLibraryDlg = new SMESHGUI_FilterLibraryDlg ( this , SMESH : : GetDesktop ( this ) , aTypes , SMESHGUI_FilterLibraryDlg : : EDIT ) ;
else if ( myFilterLibraryDlg - > isHidden ( ) )
myFilterLibraryDlg - > Init ( aTypes , SMESHGUI_FilterLibraryDlg : : EDIT ) ;
myFilterLibraryDlg - > raise ( ) ;
2004-12-01 15:48:31 +05:00
}
break ;
2014-07-23 16:30:09 +06:00
// CONTROLS
case SMESHOp : : OpFreeNode :
case SMESHOp : : OpEqualNode :
case SMESHOp : : OpFreeEdge :
case SMESHOp : : OpFreeBorder :
case SMESHOp : : OpLength :
case SMESHOp : : OpConnection :
case SMESHOp : : OpEqualEdge :
case SMESHOp : : OpFreeFace :
case SMESHOp : : OpBareBorderFace :
case SMESHOp : : OpOverConstrainedFace :
case SMESHOp : : OpLength2D :
case SMESHOp : : OpConnection2D :
case SMESHOp : : OpArea :
case SMESHOp : : OpTaper :
case SMESHOp : : OpAspectRatio :
case SMESHOp : : OpMinimumAngle :
case SMESHOp : : OpWarpingAngle :
case SMESHOp : : OpSkew :
case SMESHOp : : OpMaxElementLength2D :
case SMESHOp : : OpEqualFace :
case SMESHOp : : OpAspectRatio3D :
case SMESHOp : : OpVolume :
case SMESHOp : : OpMaxElementLength3D :
case SMESHOp : : OpBareBorderVolume :
case SMESHOp : : OpOverConstrainedVolume :
case SMESHOp : : OpEqualVolume :
2005-06-07 19:22:20 +06:00
if ( vtkwnd ) {
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * mgr = selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ; mgr - > selectedObjects ( selected ) ;
2014-09-08 12:30:44 +06:00
if ( ! selected . IsEmpty ( ) ) {
SUIT_OverrideCursor wc ;
: : Control ( theCommandID ) ;
break ;
2004-06-18 14:34:31 +06:00
}
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) ,
2012-08-09 16:03:55 +06:00
tr ( " SMESH_WRN_WARNING " ) ,
tr ( " SMESH_BAD_SELECTION " ) ) ;
2004-06-18 14:34:31 +06:00
break ;
}
else {
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( desktop ( ) ,
2012-08-09 16:03:55 +06:00
tr ( " SMESH_WRN_WARNING " ) ,
tr ( " NOT_A_VTK_VIEWER " ) ) ;
2004-12-01 15:48:31 +05:00
}
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpOverallMeshQuality :
2013-06-19 13:46:33 +06:00
OverallMeshQuality ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpNumberingNodes :
2004-12-01 15:48:31 +05:00
{
2013-06-20 19:05:03 +06:00
SUIT_OverrideCursor wc ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * mgr = selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ; mgr - > selectedObjects ( selected ) ;
2008-03-07 12:47:05 +05:00
SALOME_ListIteratorOfListIO it ( selected ) ;
2009-02-17 10:27:49 +05:00
for ( ; it . More ( ) ; it . Next ( ) ) {
2008-03-07 12:47:05 +05:00
Handle ( SALOME_InteractiveObject ) anIObject = it . Value ( ) ;
2012-08-09 16:03:55 +06:00
if ( anIObject - > hasEntry ( ) ) {
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIObject - > getEntry ( ) ) ) {
anActor - > SetPointsLabeled ( ! anActor - > GetPointsLabeled ( ) ) ;
}
}
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpNumberingElements :
2004-12-01 15:48:31 +05:00
{
2013-06-20 19:05:03 +06:00
SUIT_OverrideCursor wc ;
2005-11-03 13:38:17 +05:00
LightApp_SelectionMgr * mgr = selectionMgr ( ) ;
2005-06-07 19:22:20 +06:00
SALOME_ListIO selected ; mgr - > selectedObjects ( selected ) ;
2012-08-09 16:03:55 +06:00
SALOME_ListIteratorOfListIO it ( selected ) ;
for ( ; it . More ( ) ; it . Next ( ) ) {
Handle ( SALOME_InteractiveObject ) anIObject = it . Value ( ) ;
if ( anIObject - > hasEntry ( ) )
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( anIObject - > getEntry ( ) ) ) {
anActor - > SetCellsLabeled ( ! anActor - > GetCellsLabeled ( ) ) ;
}
2004-06-18 14:34:31 +06:00
}
2004-12-01 15:48:31 +05:00
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpPropertiesLength :
case SMESHOp : : OpPropertiesArea :
case SMESHOp : : OpPropertiesVolume :
case SMESHOp : : OpMinimumDistance :
case SMESHOp : : OpBoundingBox :
2013-08-08 21:17:00 +06:00
{
int page = SMESHGUI_MeasureDlg : : MinDistance ;
2014-07-23 16:30:09 +06:00
if ( theCommandID = = SMESHOp : : OpBoundingBox )
2013-09-26 14:44:08 +06:00
page = SMESHGUI_MeasureDlg : : BoundingBox ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpPropertiesLength )
2013-09-26 14:44:08 +06:00
page = SMESHGUI_MeasureDlg : : Length ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpPropertiesArea )
2013-09-26 14:44:08 +06:00
page = SMESHGUI_MeasureDlg : : Area ;
2014-07-23 16:30:09 +06:00
else if ( theCommandID = = SMESHOp : : OpPropertiesVolume )
2013-09-26 14:44:08 +06:00
page = SMESHGUI_MeasureDlg : : Volume ;
2013-08-08 21:17:00 +06:00
2012-08-09 16:03:55 +06:00
EmitSignalDeactivateDialog ( ) ;
SMESHGUI_MeasureDlg * dlg = new SMESHGUI_MeasureDlg ( SMESHGUI : : desktop ( ) , page ) ;
dlg - > show ( ) ;
break ;
}
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpSortChild :
2013-07-09 14:32:08 +06:00
: : sortChildren ( ) ;
break ;
2004-06-18 14:34:31 +06:00
}
2005-08-24 12:15:17 +06:00
anApp - > updateActions ( ) ; //SRN: To update a Save button in the toolbar
2005-06-17 12:28:52 +06:00
//updateObjBrowser();
2004-12-01 15:48:31 +05:00
return true ;
2003-05-19 20:07:00 +06:00
}
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
bool SMESHGUI : : OnMousePress ( QMouseEvent * pe , SUIT_ViewWindow * wnd )
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
return false ;
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
bool SMESHGUI : : OnMouseMove ( QMouseEvent * pe , SUIT_ViewWindow * wnd )
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
return true ;
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
/*!
*
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
bool SMESHGUI : : OnKeyPress ( QKeyEvent * pe , SUIT_ViewWindow * wnd )
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
return true ;
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
//=============================================================================
2005-06-07 19:22:20 +06:00
/*! Method: BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
* Purpose : ensures that the actor for the given < theIO > exists in the active VTK view
2003-05-19 20:07:00 +06:00
*/
//=============================================================================
2005-06-07 19:22:20 +06:00
void SMESHGUI : : BuildPresentation ( const Handle ( SALOME_InteractiveObject ) & theIO ,
SUIT_ViewWindow * wnd )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
if ( theIO - > hasEntry ( ) ) {
//SUIT_ViewWindow* wnd = SMESH::GetActiveWindow();
SMESH : : UpdateView ( wnd , SMESH : : eDisplay , theIO - > getEntry ( ) ) ;
2004-06-18 14:34:31 +06:00
}
2003-12-10 21:05:04 +05:00
}
2003-05-19 20:07:00 +06:00
2005-06-07 19:22:20 +06:00
//=======================================================================
// function : createSMESHAction
// purpose :
//=======================================================================
2012-08-09 16:03:55 +06:00
void SMESHGUI : : createSMESHAction ( const int id , const QString & po_id , const QString & icon_id ,
const int key , const bool toggle , const QString & shortcutAction )
2005-06-07 19:22:20 +06:00
{
2009-02-17 10:27:49 +05:00
QIcon icon ;
2005-06-07 19:22:20 +06:00
QWidget * parent = application ( ) - > desktop ( ) ;
SUIT_ResourceMgr * resMgr = resourceMgr ( ) ;
QPixmap pix ;
2009-02-17 10:27:49 +05:00
if ( ! icon_id . isEmpty ( ) )
pix = resMgr - > loadPixmap ( " SMESH " , tr ( icon_id . toLatin1 ( ) . data ( ) ) ) ;
2005-06-07 19:22:20 +06:00
else
2009-02-17 10:27:49 +05:00
pix = resMgr - > loadPixmap ( " SMESH " , tr ( QString ( " ICO_%1 " ) . arg ( po_id ) . toLatin1 ( ) . data ( ) ) , false ) ;
2005-06-07 19:22:20 +06:00
if ( ! pix . isNull ( ) )
2009-02-17 10:27:49 +05:00
icon = QIcon ( pix ) ;
2005-06-07 19:22:20 +06:00
2009-02-17 10:27:49 +05:00
QString tooltip = tr ( QString ( " TOP_%1 " ) . arg ( po_id ) . toLatin1 ( ) . data ( ) ) ,
menu = tr ( QString ( " MEN_%1 " ) . arg ( po_id ) . toLatin1 ( ) . data ( ) ) ,
status_bar = tr ( QString ( " STB_%1 " ) . arg ( po_id ) . toLatin1 ( ) . data ( ) ) ;
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
createAction ( id , tooltip , icon , menu , status_bar , key , parent ,
toggle , this , SLOT ( OnGUIEvent ( ) ) , shortcutAction ) ;
2005-06-07 19:22:20 +06:00
}
//=======================================================================
// function : createPopupItem
// purpose :
//=======================================================================
void SMESHGUI : : createPopupItem ( const int id ,
const QString & clients ,
const QString & types ,
const QString & theRule ,
2012-08-09 16:03:55 +06:00
const int pId )
2003-12-10 21:05:04 +05:00
{
2005-06-07 19:22:20 +06:00
if ( ! popupMgr ( ) - > contains ( popupMgr ( ) - > actionId ( action ( id ) ) ) )
2012-12-13 17:41:29 +06:00
popupMgr ( ) - > insert ( action ( id ) , pId , 0 ) ;
2005-06-07 19:22:20 +06:00
2009-02-17 10:27:49 +05:00
QString lc = " $ " ; // VSR : instead of QtxPopupSelection::defEquality();
QString dc = " selcount " ; // VSR : insetad of QtxPopupSelection::defSelCountParam()
2005-06-07 19:22:20 +06:00
QString rule = " (%1) and (%2) and (%3) " ;
2009-02-17 10:27:49 +05:00
rule = rule . arg ( QString ( " %1>0 " ) . arg ( dc ) ) ;
2005-11-24 14:44:05 +05:00
if ( clients . isEmpty ( ) )
rule = rule . arg ( QString ( " true " ) ) ;
else
rule = rule . arg ( QString ( " %1client in {%2} " ) . arg ( lc ) . arg ( clients ) ) ;
2005-06-07 19:22:20 +06:00
rule = rule . arg ( QString ( " %1type in {%2} " ) . arg ( lc ) . arg ( types ) ) ;
rule + = theRule ;
bool cont = myRules . contains ( id ) ;
if ( cont )
rule = QString ( " %1 or (%2) " ) . arg ( myRules [ id ] ) . arg ( rule ) ;
2009-02-17 10:27:49 +05:00
popupMgr ( ) - > setRule ( action ( id ) , rule , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
myRules [ id ] = QString ( cont ? " %1 " : " (%1) " ) . arg ( rule ) ;
}
//=======================================================================
// function : initialize
// purpose :
//=======================================================================
void SMESHGUI : : initialize ( CAM_Application * app )
{
SalomeApp_Module : : initialize ( app ) ;
2005-06-27 17:29:58 +06:00
// SUIT_ResourceMgr* mgr = app->resourceMgr();
// if ( mgr )
2005-06-21 18:17:08 +06:00
/* Automatic Update flag */
2005-06-27 17:29:58 +06:00
// myAutomaticUpdate = mgr->booleanValue( "SMESH", "AutomaticUpdate", myAutomaticUpdate );
2005-06-21 18:17:08 +06:00
2005-06-07 19:22:20 +06:00
// ----- create actions --------------
2014-07-23 16:30:09 +06:00
//createSMESHAction( SMESHOp::OpImportDAT, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) );
2015-03-20 12:41:15 +05:00
createSMESHAction ( SMESHOp : : OpImportUNV , " IMPORT_UNV " , " " , ( Qt : : CTRL + Qt : : Key_I ) ) ;
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpImportMED , " IMPORT_MED " , " " , ( Qt : : CTRL + Qt : : Key_M ) ) ;
//createSMESHAction( 114, "NUM" );
createSMESHAction ( SMESHOp : : OpImportSTL , " IMPORT_STL " ) ;
# ifdef WITH_CGNS
createSMESHAction ( SMESHOp : : OpImportCGNS , " IMPORT_CGNS " ) ;
# endif
createSMESHAction ( SMESHOp : : OpImportSAUV , " IMPORT_SAUV " ) ;
createSMESHAction ( SMESHOp : : OpImportGMF , " IMPORT_GMF " ) ;
createSMESHAction ( SMESHOp : : OpExportDAT , " DAT " ) ;
createSMESHAction ( SMESHOp : : OpExportMED , " MED " ) ;
createSMESHAction ( SMESHOp : : OpExportUNV , " UNV " ) ;
createSMESHAction ( SMESHOp : : OpExportSTL , " STL " ) ;
# ifdef WITH_CGNS
createSMESHAction ( SMESHOp : : OpExportCGNS , " CGNS " ) ;
# endif
createSMESHAction ( SMESHOp : : OpExportSAUV , " SAUV " ) ;
createSMESHAction ( SMESHOp : : OpExportGMF , " GMF " ) ;
createSMESHAction ( SMESHOp : : OpPopupExportDAT , " DAT " ) ;
createSMESHAction ( SMESHOp : : OpPopupExportMED , " MED " ) ;
createSMESHAction ( SMESHOp : : OpPopupExportUNV , " UNV " ) ;
createSMESHAction ( SMESHOp : : OpPopupExportSTL , " STL " ) ;
# ifdef WITH_CGNS
createSMESHAction ( SMESHOp : : OpPopupExportCGNS , " CGNS " ) ;
# endif
createSMESHAction ( SMESHOp : : OpPopupExportSAUV , " SAUV " ) ;
createSMESHAction ( SMESHOp : : OpPopupExportGMF , " GMF " ) ;
createSMESHAction ( SMESHOp : : OpFileInformation , " FILE_INFO " ) ;
createSMESHAction ( SMESHOp : : OpDelete , " DELETE " , " ICON_DELETE " , Qt : : Key_Delete ) ;
createSMESHAction ( SMESHOp : : OpSelectFiltersLibrary , " SEL_FILTER_LIB " ) ;
createSMESHAction ( SMESHOp : : OpCreateMesh , " CREATE_MESH " , " ICON_DLG_INIT_MESH " ) ;
createSMESHAction ( SMESHOp : : OpCreateSubMesh , " CREATE_SUBMESH " , " ICON_DLG_ADD_SUBMESH " ) ;
createSMESHAction ( SMESHOp : : OpEditMeshOrSubMesh , " EDIT_MESHSUBMESH " , " ICON_DLG_EDIT_MESH " ) ;
createSMESHAction ( SMESHOp : : OpBuildCompoundMesh , " BUILD_COMPOUND " , " ICON_BUILD_COMPOUND " ) ;
createSMESHAction ( SMESHOp : : OpCopyMesh , " COPY_MESH " , " ICON_COPY_MESH " ) ;
createSMESHAction ( SMESHOp : : OpCompute , " COMPUTE " , " ICON_COMPUTE " ) ;
createSMESHAction ( SMESHOp : : OpPreCompute , " PRECOMPUTE " , " ICON_PRECOMPUTE " ) ;
2015-03-25 14:36:47 +05:00
createSMESHAction ( SMESHOp : : OpEvaluate , " EVALUATE " , " ICON_EVALUATE " ) ;
createSMESHAction ( SMESHOp : : OpMeshOrder , " MESH_ORDER " , " ICON_MESH_ORDER " ) ;
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpCreateGroup , " CREATE_GROUP " , " ICON_CREATE_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpCreateGeometryGroup , " CREATE_GEO_GROUP " , " ICON_CREATE_GEO_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpConstructGroup , " CONSTRUCT_GROUP " , " ICON_CONSTRUCT_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpEditGroup , " EDIT_GROUP " , " ICON_EDIT_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpEditGeomGroupAsGroup , " EDIT_GEOMGROUP_AS_GROUP " , " ICON_EDIT_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpUnionGroups , " UN_GROUP " , " ICON_UNION " ) ;
createSMESHAction ( SMESHOp : : OpIntersectGroups , " INT_GROUP " , " ICON_INTERSECT " ) ;
createSMESHAction ( SMESHOp : : OpCutGroups , " CUT_GROUP " , " ICON_CUT " ) ;
createSMESHAction ( SMESHOp : : OpGroupUnderlyingElem , " UNDERLYING_ELEMS " , " ICON_UNDERLYING_ELEMS " ) ;
createSMESHAction ( SMESHOp : : OpAddElemGroupPopup , " ADD " ) ;
createSMESHAction ( SMESHOp : : OpRemoveElemGroupPopup , " REMOVE " ) ;
createSMESHAction ( SMESHOp : : OpDeleteGroup , " DEL_GROUP " , " ICON_DEL_GROUP " ) ;
createSMESHAction ( SMESHOp : : OpMeshInformation , " ADV_INFO " , " ICON_ADV_INFO " ) ;
//createSMESHAction( SMESHOp::OpStdInfo, "STD_INFO", "ICON_STD_INFO" );
//createSMESHAction( SMESHOp::OpWhatIs, "WHAT_IS", "ICON_WHAT_IS" ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createSMESHAction ( SMESHOp : : OpFindElementByPoint , " FIND_ELEM " , " ICON_FIND_ELEM " ) ;
//update
createSMESHAction ( SMESHOp : : OpFreeNode , " FREE_NODE " , " ICON_FREE_NODE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpEqualNode , " EQUAL_NODE " , " ICON_EQUAL_NODE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpFreeEdge , " FREE_EDGE " , " ICON_FREE_EDGE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpFreeBorder , " FREE_BORDER " , " ICON_FREE_EDGE_2D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpLength , " LENGTH " , " ICON_LENGTH " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpConnection , " CONNECTION " , " ICON_CONNECTION " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpEqualEdge , " EQUAL_EDGE " , " ICON_EQUAL_EDGE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpFreeFace , " FREE_FACES " , " ICON_FREE_FACES " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpBareBorderFace , " BARE_BORDER_FACE " , " ICON_BARE_BORDER_FACE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpOverConstrainedFace , " OVER_CONSTRAINED_FACE " , " ICON_OVER_CONSTRAINED_FACE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpLength2D , " LENGTH_2D " , " ICON_LENGTH_2D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpConnection2D , " CONNECTION_2D " , " ICON_CONNECTION_2D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpArea , " AREA " , " ICON_AREA " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpTaper , " TAPER " , " ICON_TAPER " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpAspectRatio , " ASPECT " , " ICON_ASPECT " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpMinimumAngle , " MIN_ANG " , " ICON_ANGLE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpWarpingAngle , " WARP " , " ICON_WARP " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpSkew , " SKEW " , " ICON_SKEW " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpMaxElementLength2D , " MAX_ELEMENT_LENGTH_2D " , " ICON_MAX_ELEMENT_LENGTH_2D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpEqualFace , " EQUAL_FACE " , " ICON_EQUAL_FACE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpAspectRatio3D , " ASPECT_3D " , " ICON_ASPECT_3D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpVolume , " VOLUME_3D " , " ICON_VOLUME_3D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpMaxElementLength3D , " MAX_ELEMENT_LENGTH_3D " , " ICON_MAX_ELEMENT_LENGTH_3D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpBareBorderVolume , " BARE_BORDER_VOLUME " , " ICON_BARE_BORDER_VOLUME " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpOverConstrainedVolume , " OVER_CONSTRAINED_VOLUME " , " ICON_OVER_CONSTRAINED_VOLUME " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpEqualVolume , " EQUAL_VOLUME " , " ICON_EQUAL_VOLUME " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpOverallMeshQuality , " OVERALL_MESH_QUALITY " ) ;
createSMESHAction ( SMESHOp : : OpNode , " NODE " , " ICON_DLG_NODE " ) ;
createSMESHAction ( SMESHOp : : OpElem0D , " ELEM0D " , " ICON_DLG_ELEM0D " ) ;
createSMESHAction ( SMESHOp : : OpElem0DOnElemNodes , " 0D_ON_ALL_NODES " , " ICON_0D_ON_ALL_NODES " ) ;
createSMESHAction ( SMESHOp : : OpBall , " BALL " , " ICON_DLG_BALL " ) ;
createSMESHAction ( SMESHOp : : OpEdge , " EDGE " , " ICON_DLG_EDGE " ) ;
createSMESHAction ( SMESHOp : : OpTriangle , " TRIANGLE " , " ICON_DLG_TRIANGLE " ) ;
createSMESHAction ( SMESHOp : : OpQuadrangle , " QUAD " , " ICON_DLG_QUADRANGLE " ) ;
createSMESHAction ( SMESHOp : : OpPolygon , " POLYGON " , " ICON_DLG_POLYGON " ) ;
createSMESHAction ( SMESHOp : : OpTetrahedron , " TETRA " , " ICON_DLG_TETRAS " ) ;
createSMESHAction ( SMESHOp : : OpHexahedron , " HEXA " , " ICON_DLG_HEXAS " ) ;
createSMESHAction ( SMESHOp : : OpPentahedron , " PENTA " , " ICON_DLG_PENTA " ) ;
createSMESHAction ( SMESHOp : : OpPyramid , " PYRAMID " , " ICON_DLG_PYRAMID " ) ;
createSMESHAction ( SMESHOp : : OpHexagonalPrism , " OCTA " , " ICON_DLG_OCTA " ) ;
createSMESHAction ( SMESHOp : : OpPolyhedron , " POLYHEDRON " , " ICON_DLG_POLYHEDRON " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticEdge , " QUADRATIC_EDGE " , " ICON_DLG_QUADRATIC_EDGE " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticTriangle , " QUADRATIC_TRIANGLE " , " ICON_DLG_QUADRATIC_TRIANGLE " ) ;
createSMESHAction ( SMESHOp : : OpBiQuadraticTriangle , " BIQUADRATIC_TRIANGLE " , " ICON_DLG_BIQUADRATIC_TRIANGLE " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticQuadrangle , " QUADRATIC_QUADRANGLE " , " ICON_DLG_QUADRATIC_QUADRANGLE " ) ;
createSMESHAction ( SMESHOp : : OpBiQuadraticQuadrangle , " BIQUADRATIC_QUADRANGLE " , " ICON_DLG_BIQUADRATIC_QUADRANGLE " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticTetrahedron , " QUADRATIC_TETRAHEDRON " , " ICON_DLG_QUADRATIC_TETRAHEDRON " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticPyramid , " QUADRATIC_PYRAMID " , " ICON_DLG_QUADRATIC_PYRAMID " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticPentahedron , " QUADRATIC_PENTAHEDRON " , " ICON_DLG_QUADRATIC_PENTAHEDRON " ) ;
createSMESHAction ( SMESHOp : : OpQuadraticHexahedron , " QUADRATIC_HEXAHEDRON " , " ICON_DLG_QUADRATIC_HEXAHEDRON " ) ;
createSMESHAction ( SMESHOp : : OpTriQuadraticHexahedron , " TRIQUADRATIC_HEXAHEDRON " , " ICON_DLG_TRIQUADRATIC_HEXAHEDRON " ) ;
createSMESHAction ( SMESHOp : : OpRemoveNodes , " REMOVE_NODES " , " ICON_DLG_REM_NODE " ) ;
createSMESHAction ( SMESHOp : : OpRemoveElements , " REMOVE_ELEMENTS " , " ICON_DLG_REM_ELEMENT " ) ;
createSMESHAction ( SMESHOp : : OpRemoveOrphanNodes , " REMOVE_ORPHAN_NODES " , " ICON_DLG_REM_ORPHAN_NODES " ) ;
createSMESHAction ( SMESHOp : : OpClearMesh , " CLEAR_MESH " , " ICON_CLEAR_MESH " ) ;
2014-10-22 19:21:15 +06:00
//createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" );
//createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" );
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpTranslation , " TRANS " , " ICON_SMESH_TRANSLATION_VECTOR " ) ;
createSMESHAction ( SMESHOp : : OpRotation , " ROT " , " ICON_DLG_MESH_ROTATION " ) ;
createSMESHAction ( SMESHOp : : OpSymmetry , " SYM " , " ICON_SMESH_SYMMETRY_PLANE " ) ;
createSMESHAction ( SMESHOp : : OpScale , " SCALE " , " ICON_DLG_MESH_SCALE " ) ;
createSMESHAction ( SMESHOp : : OpSewing , " SEW " , " ICON_SMESH_SEWING_FREEBORDERS " ) ;
createSMESHAction ( SMESHOp : : OpMergeNodes , " MERGE " , " ICON_SMESH_MERGE_NODES " ) ;
createSMESHAction ( SMESHOp : : OpMergeElements , " MERGE_ELEMENTS " , " ICON_DLG_MERGE_ELEMENTS " ) ;
createSMESHAction ( SMESHOp : : OpMoveNode , " MESH_THROU_POINT " , " ICON_DLG_MOVE_NODE " ) ;
createSMESHAction ( SMESHOp : : OpDuplicateNodes , " DUPLICATE_NODES " , " ICON_SMESH_DUPLICATE_NODES " ) ;
createSMESHAction ( SMESHOp : : OpDiagonalInversion , " INV " , " ICON_DLG_MESH_DIAGONAL " ) ;
createSMESHAction ( SMESHOp : : OpUnionOfTwoTriangle , " UNION2 " , " ICON_UNION2TRI " ) ;
createSMESHAction ( SMESHOp : : OpOrientation , " ORIENT " , " ICON_DLG_MESH_ORIENTATION " ) ;
createSMESHAction ( SMESHOp : : OpReorientFaces , " REORIENT_2D " , " ICON_REORIENT_2D " ) ;
createSMESHAction ( SMESHOp : : OpUnionOfTriangles , " UNION " , " ICON_UNIONTRI " ) ;
createSMESHAction ( SMESHOp : : OpCuttingOfQuadrangles , " CUT " , " ICON_CUTQUAD " ) ;
createSMESHAction ( SMESHOp : : OpSplitVolumes , " SPLIT_TO_TETRA " , " ICON_SPLIT_TO_TETRA " ) ;
createSMESHAction ( SMESHOp : : OpSmoothing , " SMOOTH " , " ICON_DLG_SMOOTHING " ) ;
createSMESHAction ( SMESHOp : : OpExtrusion , " EXTRUSION " , " ICON_EXTRUSION " ) ;
createSMESHAction ( SMESHOp : : OpExtrusionAlongAPath , " EXTRUSION_ALONG " , " ICON_EXTRUSION_ALONG " ) ;
createSMESHAction ( SMESHOp : : OpRevolution , " REVOLUTION " , " ICON_REVOLUTION " ) ;
createSMESHAction ( SMESHOp : : OpPatternMapping , " MAP " , " ICON_MAP " ) ;
createSMESHAction ( SMESHOp : : OpConvertMeshToQuadratic , " CONV_TO_QUAD " , " ICON_CONV_TO_QUAD " ) ;
createSMESHAction ( SMESHOp : : OpCreateBoundaryElements , " 2D_FROM_3D " , " ICON_2D_FROM_3D " ) ;
createSMESHAction ( SMESHOp : : OpReset , " RESET " ) ;
createSMESHAction ( SMESHOp : : OpScalarBarProperties , " SCALAR_BAR_PROP " ) ;
2015-04-21 12:37:02 +05:00
createSMESHAction ( SMESHOp : : OpShowScalarBar , " SHOW_SCALAR_BAR " , " " , 0 , true ) ;
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpSaveDistribution , " SAVE_DISTRIBUTION " ) ;
createSMESHAction ( SMESHOp : : OpShowDistribution , " SHOW_DISTRIBUTION " , " " , 0 , true ) ;
2012-08-09 16:03:55 +06:00
# ifndef DISABLE_PLOT2DVIEWER
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpPlotDistribution , " PLOT_DISTRIBUTION " ) ;
2012-08-09 16:03:55 +06:00
# endif
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpDMWireframe , " WIRE " , " ICON_WIRE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDMShading , " SHADE " , " ICON_SHADE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDMNodes , " NODES " , " ICON_POINTS " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDMShrink , " SHRINK " , " ICON_SHRINK " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpUpdate , " UPDATE " , " ICON_UPDATE " ) ;
createSMESHAction ( SMESHOp : : OpDE0DElements , " ELEMS0D " , " ICON_DLG_ELEM0D " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDEEdges , " EDGES " , " ICON_DLG_EDGE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDEFaces , " FACES " , " ICON_DLG_TRIANGLE " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDEVolumes , " VOLUMES " , " ICON_DLG_TETRAS " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpDEBalls , " BALLS " , " ICON_DLG_BALL " , 0 , true ) ;
2014-09-08 18:36:41 +06:00
createSMESHAction ( SMESHOp : : OpDEChoose , " CHOOSE " , " ICON_DLG_CHOOSE " , 0 , false ) ;
createSMESHAction ( SMESHOp : : OpDEAllEntity , " ALL " , " ICON_DLG_CHOOSE_ALL " , 0 , false ) ;
2014-07-23 16:30:09 +06:00
createSMESHAction ( SMESHOp : : OpOrientationOnFaces , " FACE_ORIENTATION " , " " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpRepresentationLines , " LINE_REPRESENTATION " , " " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpRepresentationArcs , " ARC_REPRESENTATION " , " " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpEditHypothesis , " EDIT_HYPO " ) ;
createSMESHAction ( SMESHOp : : OpUnassign , " UNASSIGN " ) ;
createSMESHAction ( SMESHOp : : OpNumberingNodes , " NUM_NODES " , " " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpNumberingElements , " NUM_ELEMENTS " , " " , 0 , true ) ;
createSMESHAction ( SMESHOp : : OpProperties , " COLORS " ) ;
createSMESHAction ( SMESHOp : : OpTransparency , " TRANSP " ) ;
createSMESHAction ( SMESHOp : : OpClipping , " CLIP " ) ;
createSMESHAction ( SMESHOp : : OpAutoColor , " AUTO_COLOR " ) ;
createSMESHAction ( SMESHOp : : OpDisableAutoColor , " DISABLE_AUTO_COLOR " ) ;
createSMESHAction ( SMESHOp : : OpMinimumDistance , " MEASURE_MIN_DIST " , " ICON_MEASURE_MIN_DIST " ) ;
createSMESHAction ( SMESHOp : : OpBoundingBox , " MEASURE_BND_BOX " , " ICON_MEASURE_BND_BOX " ) ;
createSMESHAction ( SMESHOp : : OpPropertiesLength , " MEASURE_LENGTH " , " ICON_MEASURE_LENGTH " ) ;
createSMESHAction ( SMESHOp : : OpPropertiesArea , " MEASURE_AREA " , " ICON_MEASURE_AREA " ) ;
createSMESHAction ( SMESHOp : : OpPropertiesVolume , " MEASURE_VOLUME " , " ICON_MEASURE_VOLUME " ) ;
createSMESHAction ( SMESHOp : : OpHide , " HIDE " ) ;
createSMESHAction ( SMESHOp : : OpShow , " SHOW " ) ;
createSMESHAction ( SMESHOp : : OpShowOnly , " DISPLAY_ONLY " ) ;
createSMESHAction ( SMESHOp : : OpSortChild , " SORT_CHILD_ITEMS " ) ;
2013-07-09 14:32:08 +06:00
2014-09-08 12:30:44 +06:00
QList < int > aCtrlActions ;
aCtrlActions < < SMESHOp : : OpFreeNode < < SMESHOp : : OpEqualNode // node controls
< < SMESHOp : : OpFreeEdge < < SMESHOp : : OpFreeBorder
< < SMESHOp : : OpLength < < SMESHOp : : OpConnection < < SMESHOp : : OpEqualEdge // edge controls
< < SMESHOp : : OpFreeFace < < SMESHOp : : OpLength2D < < SMESHOp : : OpConnection2D
< < SMESHOp : : OpArea < < SMESHOp : : OpTaper < < SMESHOp : : OpAspectRatio
< < SMESHOp : : OpMinimumAngle < < SMESHOp : : OpWarpingAngle < < SMESHOp : : OpSkew
< < SMESHOp : : OpMaxElementLength2D < < SMESHOp : : OpBareBorderFace
< < SMESHOp : : OpOverConstrainedFace < < SMESHOp : : OpEqualFace // face controls
< < SMESHOp : : OpAspectRatio3D < < SMESHOp : : OpVolume
< < SMESHOp : : OpMaxElementLength3D < < SMESHOp : : OpBareBorderVolume
< < SMESHOp : : OpOverConstrainedVolume < < SMESHOp : : OpEqualVolume ; // volume controls
QActionGroup * aCtrlGroup = new QActionGroup ( application ( ) - > desktop ( ) ) ;
aCtrlGroup - > setExclusive ( true ) ;
for ( int i = 0 ; i < aCtrlActions . size ( ) ; i + + )
aCtrlGroup - > addAction ( action ( aCtrlActions [ i ] ) ) ;
2005-06-07 19:22:20 +06:00
// ----- create menu --------------
2012-08-09 16:03:55 +06:00
int fileId = createMenu ( tr ( " MEN_FILE " ) , - 1 , 1 ) ,
editId = createMenu ( tr ( " MEN_EDIT " ) , - 1 , 3 ) ,
toolsId = createMenu ( tr ( " MEN_TOOLS " ) , - 1 , 5 , 50 ) ,
meshId = createMenu ( tr ( " MEN_MESH " ) , - 1 , 70 , 10 ) ,
ctrlId = createMenu ( tr ( " MEN_CTRL " ) , - 1 , 60 , 10 ) ,
modifyId = createMenu ( tr ( " MEN_MODIFY " ) , - 1 , 40 , 10 ) ,
measureId = createMenu ( tr ( " MEN_MEASURE " ) , - 1 , 50 , 10 ) ,
viewId = createMenu ( tr ( " MEN_VIEW " ) , - 1 , 2 ) ;
2005-06-07 19:22:20 +06:00
createMenu ( separator ( ) , fileId ) ;
2009-02-17 10:27:49 +05:00
int importId = createMenu ( tr ( " MEN_IMPORT " ) , fileId , - 1 , 10 ) ,
exportId = createMenu ( tr ( " MEN_EXPORT " ) , fileId , - 1 , 10 ) ,
2012-08-09 16:03:55 +06:00
nodeId = createMenu ( tr ( " MEN_NODE_CTRL " ) , ctrlId , - 1 , 10 ) ,
edgeId = createMenu ( tr ( " MEN_EDGE_CTRL " ) , ctrlId , - 1 , 10 ) ,
faceId = createMenu ( tr ( " MEN_FACE_CTRL " ) , ctrlId , - 1 , 10 ) ,
volumeId = createMenu ( tr ( " MEN_VOLUME_CTRL " ) , ctrlId , - 1 , 10 ) ,
2005-06-07 19:22:20 +06:00
addId = createMenu ( tr ( " MEN_ADD " ) , modifyId , 402 ) ,
removeId = createMenu ( tr ( " MEN_REMOVE " ) , modifyId , 403 ) ,
2014-10-22 19:21:15 +06:00
//renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
2013-08-08 21:17:00 +06:00
transfId = createMenu ( tr ( " MEN_TRANSF " ) , modifyId , 405 ) ,
basicPropId = createMenu ( tr ( " MEN_BASIC_PROPERTIES " ) , measureId , - 1 , 10 ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
//createMenu( SMESHOp::OpImportDAT, importId, -1 );
createMenu ( SMESHOp : : OpImportUNV , importId , - 1 ) ;
createMenu ( SMESHOp : : OpImportMED , importId , - 1 ) ;
createMenu ( SMESHOp : : OpImportSTL , importId , - 1 ) ;
2012-08-09 16:03:55 +06:00
# ifdef WITH_CGNS
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpImportCGNS , importId , - 1 ) ;
2012-08-09 16:03:55 +06:00
# endif
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpImportSAUV , importId , - 1 ) ;
createMenu ( SMESHOp : : OpImportGMF , importId , - 1 ) ;
createMenu ( SMESHOp : : OpExportDAT , exportId , - 1 ) ;
createMenu ( SMESHOp : : OpExportMED , exportId , - 1 ) ;
createMenu ( SMESHOp : : OpExportUNV , exportId , - 1 ) ;
createMenu ( SMESHOp : : OpExportSTL , exportId , - 1 ) ;
2012-08-09 16:03:55 +06:00
# ifdef WITH_CGNS
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpExportCGNS , exportId , - 1 ) ;
2012-08-09 16:03:55 +06:00
# endif
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpExportSAUV , exportId , - 1 ) ;
createMenu ( SMESHOp : : OpExportGMF , exportId , - 1 ) ;
2005-06-07 19:22:20 +06:00
createMenu ( separator ( ) , fileId , 10 ) ;
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpDelete , editId , - 1 ) ;
createMenu ( SMESHOp : : OpSelectFiltersLibrary , toolsId , - 1 ) ;
createMenu ( SMESHOp : : OpCreateMesh , meshId , - 1 ) ; // "Mesh" menu
createMenu ( SMESHOp : : OpCreateSubMesh , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpEditMeshOrSubMesh , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpBuildCompoundMesh , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpCopyMesh , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpCompute , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpPreCompute , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpEvaluate , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpMeshOrder , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpCreateGroup , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpCreateGeometryGroup , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpConstructGroup , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpEditGroup , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpEditGeomGroupAsGroup , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpUnionGroups , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpIntersectGroups , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpCutGroups , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpGroupUnderlyingElem , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpMeshInformation , meshId , - 1 ) ;
//createMenu( SMESHOp::OpStdInfo, meshId, -1 );
//createMenu( SMESHOp::OpWhatIs, meshId, -1 ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createMenu ( SMESHOp : : OpFindElementByPoint , meshId , - 1 ) ;
createMenu ( separator ( ) , meshId , - 1 ) ;
createMenu ( SMESHOp : : OpFreeNode , nodeId , - 1 ) ;
createMenu ( SMESHOp : : OpEqualNode , nodeId , - 1 ) ;
createMenu ( SMESHOp : : OpFreeEdge , edgeId , - 1 ) ;
createMenu ( SMESHOp : : OpFreeBorder , edgeId , - 1 ) ;
createMenu ( SMESHOp : : OpLength , edgeId , - 1 ) ;
createMenu ( SMESHOp : : OpConnection , edgeId , - 1 ) ;
createMenu ( SMESHOp : : OpEqualEdge , edgeId , - 1 ) ;
createMenu ( SMESHOp : : OpFreeFace , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpBareBorderFace , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpOverConstrainedFace , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpLength2D , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpConnection2D , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpArea , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpTaper , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpAspectRatio , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpMinimumAngle , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpWarpingAngle , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpSkew , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpMaxElementLength2D , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpEqualFace , faceId , - 1 ) ;
createMenu ( SMESHOp : : OpAspectRatio3D , volumeId , - 1 ) ;
createMenu ( SMESHOp : : OpVolume , volumeId , - 1 ) ;
createMenu ( SMESHOp : : OpMaxElementLength3D , volumeId , - 1 ) ;
createMenu ( SMESHOp : : OpBareBorderVolume , volumeId , - 1 ) ;
createMenu ( SMESHOp : : OpOverConstrainedVolume , volumeId , - 1 ) ;
createMenu ( SMESHOp : : OpEqualVolume , volumeId , - 1 ) ;
createMenu ( separator ( ) , ctrlId , - 1 ) ;
2014-09-08 12:30:44 +06:00
createMenu ( SMESHOp : : OpReset , ctrlId , - 1 ) ;
createMenu ( separator ( ) , ctrlId , - 1 ) ;
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpOverallMeshQuality , ctrlId , - 1 ) ;
createMenu ( SMESHOp : : OpNode , addId , - 1 ) ;
createMenu ( SMESHOp : : OpElem0D , addId , - 1 ) ;
createMenu ( SMESHOp : : OpElem0DOnElemNodes , addId , - 1 ) ;
createMenu ( SMESHOp : : OpBall , addId , - 1 ) ;
createMenu ( SMESHOp : : OpEdge , addId , - 1 ) ;
createMenu ( SMESHOp : : OpTriangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadrangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpPolygon , addId , - 1 ) ;
createMenu ( SMESHOp : : OpTetrahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpHexahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpPentahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpPyramid , addId , - 1 ) ;
createMenu ( SMESHOp : : OpHexagonalPrism , addId , - 1 ) ;
createMenu ( SMESHOp : : OpPolyhedron , addId , - 1 ) ;
createMenu ( separator ( ) , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticEdge , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticTriangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpBiQuadraticTriangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticQuadrangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpBiQuadraticQuadrangle , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticTetrahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticPyramid , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticPentahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpQuadraticHexahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpTriQuadraticHexahedron , addId , - 1 ) ;
createMenu ( SMESHOp : : OpRemoveNodes , removeId , - 1 ) ;
createMenu ( SMESHOp : : OpRemoveElements , removeId , - 1 ) ;
createMenu ( SMESHOp : : OpRemoveOrphanNodes , removeId , - 1 ) ;
createMenu ( separator ( ) , removeId , - 1 ) ;
createMenu ( SMESHOp : : OpDeleteGroup , removeId , - 1 ) ;
createMenu ( separator ( ) , removeId , - 1 ) ;
createMenu ( SMESHOp : : OpClearMesh , removeId , - 1 ) ;
2014-10-22 19:21:15 +06:00
//createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 );
//createMenu( SMESHOp::OpRenumberingElements, renumId, -1 );
2014-07-23 16:30:09 +06:00
createMenu ( SMESHOp : : OpTranslation , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpRotation , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpSymmetry , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpScale , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpSewing , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpMergeNodes , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpMergeElements , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpDuplicateNodes , transfId , - 1 ) ;
createMenu ( SMESHOp : : OpMoveNode , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpDiagonalInversion , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpUnionOfTwoTriangle , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpOrientation , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpReorientFaces , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpUnionOfTriangles , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpCuttingOfQuadrangles , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpSplitVolumes , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpSmoothing , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpExtrusion , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpExtrusionAlongAPath , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpRevolution , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpPatternMapping , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpConvertMeshToQuadratic , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpCreateBoundaryElements , modifyId , - 1 ) ;
createMenu ( SMESHOp : : OpMinimumDistance , measureId , - 1 ) ;
createMenu ( SMESHOp : : OpBoundingBox , measureId , - 1 ) ;
createMenu ( SMESHOp : : OpPropertiesLength , basicPropId , - 1 ) ;
createMenu ( SMESHOp : : OpPropertiesArea , basicPropId , - 1 ) ;
createMenu ( SMESHOp : : OpPropertiesVolume , basicPropId , - 1 ) ;
createMenu ( SMESHOp : : OpUpdate , viewId , - 1 ) ;
2005-06-07 19:22:20 +06:00
// ----- create toolbars --------------
2014-08-27 15:12:02 +06:00
int meshTb = createTool ( tr ( " TB_MESH " ) , QString ( " SMESHMeshToolbar " ) ) ,
info = createTool ( tr ( " TB_INFO " ) , QString ( " SMESHInformationToolbar " ) ) ,
groupTb = createTool ( tr ( " TB_GROUP " ) , QString ( " SMESHGroupToolbar " ) ) ,
ctrl0dTb = createTool ( tr ( " TB_CTRL0D " ) , QString ( " SMESHNodeControlsToolbar " ) ) ,
ctrl1dTb = createTool ( tr ( " TB_CTRL1D " ) , QString ( " SMESHEdgeControlsToolbar " ) ) ,
ctrl2dTb = createTool ( tr ( " TB_CTRL2D " ) , QString ( " SMESHFaceControlsToolbar " ) ) ,
ctrl3dTb = createTool ( tr ( " TB_CTRL3D " ) , QString ( " SMESHVolumeControlsToolbar " ) ) ,
addElemTb = createTool ( tr ( " TB_ADD " ) , QString ( " SMESHAddElementToolbar " ) ) ,
addNonElemTb = createTool ( tr ( " TB_ADDNON " ) , QString ( " SMESHAddElementToolbar " ) ) ,
remTb = createTool ( tr ( " TB_REM " ) , QString ( " SMESHRemoveToolbar " ) ) ,
2014-10-22 19:21:15 +06:00
//renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ),
2014-08-27 15:12:02 +06:00
transformTb = createTool ( tr ( " TB_TRANSFORM " ) , QString ( " SMESHTransformationToolbar " ) ) ,
modifyTb = createTool ( tr ( " TB_MODIFY " ) , QString ( " SMESHModificationToolbar " ) ) ,
measuremTb = createTool ( tr ( " TB_MEASUREM " ) , QString ( " SMESHMeasurementsToolbar " ) ) ,
dispModeTb = createTool ( tr ( " TB_DISP_MODE " ) , QString ( " SMESHDisplayModeToolbar " ) ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
createTool ( SMESHOp : : OpCreateMesh , meshTb ) ;
createTool ( SMESHOp : : OpCreateSubMesh , meshTb ) ;
createTool ( SMESHOp : : OpEditMeshOrSubMesh , meshTb ) ;
createTool ( SMESHOp : : OpBuildCompoundMesh , meshTb ) ;
createTool ( SMESHOp : : OpCopyMesh , meshTb ) ;
createTool ( separator ( ) , meshTb ) ;
createTool ( SMESHOp : : OpCompute , meshTb ) ;
createTool ( SMESHOp : : OpPreCompute , meshTb ) ;
createTool ( SMESHOp : : OpEvaluate , meshTb ) ;
createTool ( SMESHOp : : OpMeshOrder , meshTb ) ;
createTool ( SMESHOp : : OpCreateGroup , groupTb ) ;
createTool ( SMESHOp : : OpCreateGeometryGroup , groupTb ) ;
createTool ( SMESHOp : : OpConstructGroup , groupTb ) ;
createTool ( SMESHOp : : OpEditGroup , groupTb ) ;
createTool ( SMESHOp : : OpMeshInformation , info ) ;
//createTool( SMESHOp::OpStdInfo, meshTb );
//createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createTool ( SMESHOp : : OpFindElementByPoint , info ) ;
createTool ( SMESHOp : : OpFreeNode , ctrl0dTb ) ;
createTool ( SMESHOp : : OpEqualNode , ctrl0dTb ) ;
createTool ( SMESHOp : : OpFreeEdge , ctrl1dTb ) ;
createTool ( SMESHOp : : OpFreeBorder , ctrl1dTb ) ;
createTool ( SMESHOp : : OpLength , ctrl1dTb ) ;
createTool ( SMESHOp : : OpConnection , ctrl1dTb ) ;
createTool ( SMESHOp : : OpEqualEdge , ctrl1dTb ) ;
createTool ( SMESHOp : : OpFreeFace , ctrl2dTb ) ;
createTool ( SMESHOp : : OpBareBorderFace , ctrl2dTb ) ;
createTool ( SMESHOp : : OpOverConstrainedFace , ctrl2dTb ) ;
createTool ( SMESHOp : : OpLength2D , ctrl2dTb ) ;
createTool ( SMESHOp : : OpConnection2D , ctrl2dTb ) ;
createTool ( SMESHOp : : OpArea , ctrl2dTb ) ;
createTool ( SMESHOp : : OpTaper , ctrl2dTb ) ;
createTool ( SMESHOp : : OpAspectRatio , ctrl2dTb ) ;
createTool ( SMESHOp : : OpMinimumAngle , ctrl2dTb ) ;
createTool ( SMESHOp : : OpWarpingAngle , ctrl2dTb ) ;
createTool ( SMESHOp : : OpSkew , ctrl2dTb ) ;
createTool ( SMESHOp : : OpMaxElementLength2D , ctrl2dTb ) ;
createTool ( SMESHOp : : OpEqualFace , ctrl2dTb ) ;
createTool ( SMESHOp : : OpAspectRatio3D , ctrl3dTb ) ;
createTool ( SMESHOp : : OpVolume , ctrl3dTb ) ;
createTool ( SMESHOp : : OpMaxElementLength3D , ctrl3dTb ) ;
createTool ( SMESHOp : : OpBareBorderVolume , ctrl3dTb ) ;
createTool ( SMESHOp : : OpOverConstrainedVolume , ctrl3dTb ) ;
createTool ( SMESHOp : : OpEqualVolume , ctrl3dTb ) ;
createTool ( SMESHOp : : OpNode , addElemTb ) ;
createTool ( SMESHOp : : OpElem0D , addElemTb ) ;
createTool ( SMESHOp : : OpElem0DOnElemNodes , addElemTb ) ;
createTool ( SMESHOp : : OpBall , addElemTb ) ;
createTool ( SMESHOp : : OpEdge , addElemTb ) ;
createTool ( SMESHOp : : OpTriangle , addElemTb ) ;
createTool ( SMESHOp : : OpQuadrangle , addElemTb ) ;
createTool ( SMESHOp : : OpPolygon , addElemTb ) ;
createTool ( SMESHOp : : OpTetrahedron , addElemTb ) ;
createTool ( SMESHOp : : OpHexahedron , addElemTb ) ;
createTool ( SMESHOp : : OpPentahedron , addElemTb ) ;
createTool ( SMESHOp : : OpPyramid , addElemTb ) ;
createTool ( SMESHOp : : OpHexagonalPrism , addElemTb ) ;
createTool ( SMESHOp : : OpPolyhedron , addElemTb ) ;
createTool ( SMESHOp : : OpQuadraticEdge , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticTriangle , addNonElemTb ) ;
createTool ( SMESHOp : : OpBiQuadraticTriangle , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticQuadrangle , addNonElemTb ) ;
createTool ( SMESHOp : : OpBiQuadraticQuadrangle , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticTetrahedron , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticPyramid , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticPentahedron , addNonElemTb ) ;
createTool ( SMESHOp : : OpQuadraticHexahedron , addNonElemTb ) ;
createTool ( SMESHOp : : OpTriQuadraticHexahedron , addNonElemTb ) ;
createTool ( SMESHOp : : OpRemoveNodes , remTb ) ;
createTool ( SMESHOp : : OpRemoveElements , remTb ) ;
createTool ( SMESHOp : : OpRemoveOrphanNodes , remTb ) ;
createTool ( SMESHOp : : OpClearMesh , remTb ) ;
2014-10-22 19:21:15 +06:00
//createTool( SMESHOp::OpRenumberingNodes, renumbTb );
//createTool( SMESHOp::OpRenumberingElements, renumbTb );
2014-07-23 16:30:09 +06:00
createTool ( SMESHOp : : OpTranslation , transformTb ) ;
createTool ( SMESHOp : : OpRotation , transformTb ) ;
createTool ( SMESHOp : : OpSymmetry , transformTb ) ;
createTool ( SMESHOp : : OpScale , transformTb ) ;
createTool ( SMESHOp : : OpSewing , transformTb ) ;
createTool ( SMESHOp : : OpMergeNodes , transformTb ) ;
createTool ( SMESHOp : : OpMergeElements , transformTb ) ;
createTool ( SMESHOp : : OpDuplicateNodes , transformTb ) ;
createTool ( SMESHOp : : OpMoveNode , modifyTb ) ;
createTool ( SMESHOp : : OpDiagonalInversion , modifyTb ) ;
createTool ( SMESHOp : : OpUnionOfTwoTriangle , modifyTb ) ;
createTool ( SMESHOp : : OpOrientation , modifyTb ) ;
createTool ( SMESHOp : : OpReorientFaces , modifyTb ) ;
createTool ( SMESHOp : : OpUnionOfTriangles , modifyTb ) ;
createTool ( SMESHOp : : OpCuttingOfQuadrangles , modifyTb ) ;
createTool ( SMESHOp : : OpSplitVolumes , modifyTb ) ;
createTool ( SMESHOp : : OpSmoothing , modifyTb ) ;
createTool ( SMESHOp : : OpExtrusion , modifyTb ) ;
createTool ( SMESHOp : : OpExtrusionAlongAPath , modifyTb ) ;
createTool ( SMESHOp : : OpRevolution , modifyTb ) ;
createTool ( SMESHOp : : OpPatternMapping , modifyTb ) ;
createTool ( SMESHOp : : OpConvertMeshToQuadratic , modifyTb ) ;
createTool ( SMESHOp : : OpCreateBoundaryElements , modifyTb ) ;
createTool ( SMESHOp : : OpMinimumDistance , measuremTb ) ;
createTool ( SMESHOp : : OpUpdate , dispModeTb ) ;
2005-06-07 19:22:20 +06:00
2009-02-17 10:27:49 +05:00
QString lc = " $ " ; // VSR : instead of QtxPopupSelection::defEquality();
QString dc = " selcount " ; // VSR : instead of QtxPopupSelection::defSelCountParam()
2005-06-07 19:22:20 +06:00
myRules . clear ( ) ;
QString OB = " 'ObjectBrowser' " ,
2012-08-09 16:03:55 +06:00
View = " ' " + SVTK_Viewer : : Type ( ) + " ' " ,
pat = " '%1' " ,
2012-12-13 17:41:29 +06:00
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 ) ) ,
2012-08-09 16:03:55 +06:00
elems = QString ( " '%1' '%2' '%3' '%4' '%5' '%6' " ) .
2012-12-13 17:41:29 +06:00
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 ) ) ,
2005-06-07 19:22:20 +06:00
subMesh = elems ,
2012-08-09 16:03:55 +06:00
mesh_part = mesh + " " + subMesh + " " + group ,
mesh_group = mesh + " " + group ,
hyp_alg = hypo + " " + algo ;
2005-06-07 19:22:20 +06:00
// popup for object browser
2012-08-09 16:03:55 +06:00
QString
isInvisible ( " not( isVisible ) " ) ,
isEmpty ( " numberOfNodes = 0 " ) ,
isNotEmpty ( " numberOfNodes <> 0 " ) ,
// has nodes, edges, etc in VISIBLE! actor
hasNodes ( " (numberOfNodes > 0 ) " ) , //&& isVisible)"),
hasElems ( " (count( elemTypes ) > 0) " ) ,
hasDifferentElems ( " (count( elemTypes ) > 1) " ) ,
hasBalls ( " ({'BallElem'} in elemTypes) " ) ,
hasElems0d ( " ({'Elem0d'} in elemTypes) " ) ,
hasEdges ( " ({'Edge'} in elemTypes) " ) ,
hasFaces ( " ({'Face'} in elemTypes) " ) ,
hasVolumes ( " ({'Volume'} in elemTypes) " ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpFileInformation , OB , mesh , " && selcount=1 && isImported " ) ;
createPopupItem ( SMESHOp : : OpCreateSubMesh , OB , mesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpEditMeshOrSubMesh , OB , mesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpEditMeshOrSubMesh , OB , subMesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpEditGroup , OB , group ) ;
createPopupItem ( SMESHOp : : OpEditGeomGroupAsGroup , OB , group , " && groupType != 'Group' " ) ;
2009-02-17 10:27:49 +05:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpCompute , OB , mesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpPreCompute , OB , mesh , " && isComputable && isPreComputable " ) ;
createPopupItem ( SMESHOp : : OpEvaluate , OB , mesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpMeshOrder , OB , mesh , " && isComputable " ) ;
createPopupItem ( SMESHOp : : OpUpdate , OB , mesh_part ) ;
createPopupItem ( SMESHOp : : OpMeshInformation , OB , mesh_part ) ;
createPopupItem ( SMESHOp : : OpFindElementByPoint , OB , mesh_group ) ;
createPopupItem ( SMESHOp : : OpOverallMeshQuality , OB , mesh_part ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpCreateGroup , OB , mesh ) ;
createPopupItem ( SMESHOp : : OpCreateGeometryGroup , OB , mesh ) ;
createPopupItem ( SMESHOp : : OpConstructGroup , OB , subMesh ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpEditHypothesis , OB , hypo ) ;
createPopupItem ( SMESHOp : : OpUnassign , OB , hyp_alg ) ; // REMOVE HYPOTHESIS / ALGORITHMS
2009-02-17 10:27:49 +05:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpClearMesh , OB , mesh ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpConvertMeshToQuadratic , OB , mesh + " " + subMesh ) ; // convert to quadratic
createPopupItem ( SMESHOp : : OpCreateBoundaryElements , OB , mesh + " " + group , // create 2D mesh from 3D
2012-08-09 16:03:55 +06:00
" && dim>=2 " ) ;
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2005-11-07 13:24:51 +05:00
2009-02-17 10:27:49 +05:00
QString only_one_non_empty = QString ( " && %1=1 && numberOfNodes>0 " ) . arg ( dc ) ;
2012-08-09 16:03:55 +06:00
QString multiple_non_empty = QString ( " && %1>0 && numberOfNodes>0 " ) . arg ( dc ) ;
QString only_one_2D = only_one_non_empty + " && dim>1 " ;
2012-12-13 17:41:29 +06:00
int anId = popupMgr ( ) - > insert ( tr ( " MEN_EXPORT " ) , - 1 , - 1 ) ; // EXPORT submenu
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpPopupExportMED , OB , mesh_group , multiple_non_empty , anId ) ;
createPopupItem ( SMESHOp : : OpPopupExportUNV , OB , mesh_group , only_one_non_empty , anId ) ;
createPopupItem ( SMESHOp : : OpPopupExportSTL , OB , mesh_group , only_one_2D , anId ) ;
2012-08-09 16:03:55 +06:00
# ifdef WITH_CGNS
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpPopupExportCGNS , OB , mesh_group , multiple_non_empty , anId ) ;
2012-08-09 16:03:55 +06:00
# endif
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpPopupExportSAUV , OB , mesh_group , multiple_non_empty , anId ) ;
createPopupItem ( SMESHOp : : OpPopupExportGMF , OB , mesh_group , multiple_non_empty , anId ) ;
createPopupItem ( SMESHOp : : OpPopupExportDAT , OB , mesh_group , multiple_non_empty , anId ) ;
createPopupItem ( SMESHOp : : OpDelete , OB , mesh_part + " " + hyp_alg ) ;
createPopupItem ( SMESHOp : : OpDeleteGroup , OB , group ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
// popup for viewer
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpEditGroup , View , group ) ;
createPopupItem ( SMESHOp : : OpAddElemGroupPopup , View , elems ) ;
createPopupItem ( SMESHOp : : OpRemoveElemGroupPopup , View , elems ) ;
2009-02-17 10:27:49 +05:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpUpdate , View , mesh_part ) ;
createPopupItem ( SMESHOp : : OpMeshInformation , View , mesh_part ) ;
createPopupItem ( SMESHOp : : OpOverallMeshQuality , View , mesh_part ) ;
createPopupItem ( SMESHOp : : OpFindElementByPoint , View , mesh ) ;
2008-03-07 12:47:05 +05:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2014-07-23 16:30:09 +06:00
createPopupItem ( SMESHOp : : OpAutoColor , OB + " " + View , mesh , " && (not isAutoColor) " ) ;
createPopupItem ( SMESHOp : : OpDisableAutoColor , OB + " " + View , mesh , " && isAutoColor " ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , 0 ) ;
2005-06-17 10:57:03 +06:00
QString aClient = QString ( " %1client in {%2} " ) . arg ( lc ) . arg ( " 'VTKViewer' " ) ;
2009-02-17 10:27:49 +05:00
QString aType = QString ( " %1type in {%2} " ) . arg ( lc ) ;
2012-08-09 16:03:55 +06:00
aType = aType . arg ( mesh_part ) ;
2005-08-09 17:31:29 +06:00
QString aMeshInVTK = aClient + " && " + aType ;
2005-09-22 20:34:08 +06:00
2008-03-07 12:47:05 +05:00
aClient = " ($client in {'VTKViewer' 'ObjectBrowser'}) " ;
QString anActiveVTK = QString ( " activeView = '%1' " ) . arg ( SVTK_Viewer : : Type ( ) ) ;
2009-02-17 10:27:49 +05:00
QString aSelCount = QString ( " %1 > 0 " ) . arg ( dc ) ;
2008-03-07 12:47:05 +05:00
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Numbering
//-------------------------------------------------
anId = popupMgr ( ) - > insert ( tr ( " MEN_NUM " ) , - 1 , - 1 ) ;
2005-09-22 20:34:08 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpNumberingNodes ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpNumberingNodes ) , aMeshInVTK + " && isVisible && " + hasNodes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpNumberingNodes ) , " {'Point'} in labeledTypes " , QtxPopupMgr : : ToggleRule ) ;
2004-12-01 15:48:31 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpNumberingElements ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpNumberingElements ) , aMeshInVTK + " && isVisible && " + hasElems , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpNumberingElements ) , " {'Cell'} in labeledTypes " , QtxPopupMgr : : ToggleRule ) ;
2004-12-01 15:48:31 +05:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , - 1 ) ;
2005-01-20 11:25:54 +05:00
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Display Mode
//-------------------------------------------------
anId = popupMgr ( ) - > insert ( tr ( " MEN_DISPMODE " ) , - 1 , - 1 ) ;
2005-01-20 11:25:54 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDMWireframe ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMWireframe ) , aMeshInVTK + " && " + hasElems , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMWireframe ) , " displayMode = 'eEdge' " , QtxPopupMgr : : ToggleRule ) ;
2005-01-20 11:25:54 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDMShading ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMShading ) , aMeshInVTK + " && ( " + hasFaces + " || " + hasVolumes + " ) " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMShading ) , " displayMode = 'eSurface' " , QtxPopupMgr : : ToggleRule ) ;
2005-01-20 11:25:54 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDMNodes ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMNodes ) , aMeshInVTK + " && " + hasNodes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMNodes ) , " displayMode = 'ePoint' " , QtxPopupMgr : : ToggleRule ) ;
2005-01-20 11:25:54 +05:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
2005-01-20 11:25:54 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDMShrink ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMShrink ) , aMeshInVTK + " && shrinkMode <> 'IsNotShrinkable' && displayMode <> 'ePoint' " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDMShrink ) , " shrinkMode = 'IsShrunk' " , QtxPopupMgr : : ToggleRule ) ;
2005-01-20 11:25:54 +05:00
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Display Entity
//-------------------------------------------------
QString aDiffElemsInVTK = aMeshInVTK + " && " + hasDifferentElems ;
2005-01-20 11:25:54 +05:00
2005-06-07 19:22:20 +06:00
anId = popupMgr ( ) - > insert ( tr ( " MEN_DISP_ENT " ) , - 1 , - 1 ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDE0DElements ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDE0DElements ) , aDiffElemsInVTK + " && isVisible && " + hasElems0d , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDE0DElements ) , " {'Elem0d'} in entityMode " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEEdges ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEEdges ) , aDiffElemsInVTK + " && isVisible && " + hasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEEdges ) , " {'Edge'} in entityMode " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEFaces ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEFaces ) , aDiffElemsInVTK + " && isVisible && " + hasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEFaces ) , " {'Face'} in entityMode " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEVolumes ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEVolumes ) , aDiffElemsInVTK + " && isVisible && " + hasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEVolumes ) , " {'Volume'} in entityMode " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEBalls ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEBalls ) , aDiffElemsInVTK + " && isVisible && " + hasBalls , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEBalls ) , " {'BallElem'} in entityMode " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
2014-09-08 18:36:41 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEChoose ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEChoose ) , aClient + " && " + aType + " && " + isNotEmpty , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpDEAllEntity ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpDEAllEntity ) , aDiffElemsInVTK + " && isVisible && not( elemTypes in entityMode ) " , QtxPopupMgr : : VisibleRule ) ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
//-------------------------------------------------
// Representation of the 2D Quadratic elements
//-------------------------------------------------
anId = popupMgr ( ) - > insert ( tr ( " MEN_QUADRATIC_REPRESENT " ) , - 1 , - 1 ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpRepresentationLines ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpRepresentationLines ) , aMeshInVTK + " and isVisible " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpRepresentationLines ) , " quadratic2DMode = 'eLines' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpRepresentationArcs ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpRepresentationArcs ) , aMeshInVTK + " and isVisible " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpRepresentationArcs ) , " quadratic2DMode = 'eArcs' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2009-02-17 10:27:49 +05:00
//-------------------------------------------------
// Orientation of faces
//-------------------------------------------------
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpOrientationOnFaces ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOrientationOnFaces ) , aMeshInVTK + " && isVisible " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOrientationOnFaces ) , " facesOrientationMode = 'IsOriented' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Color / Size
//-------------------------------------------------
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpProperties ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpProperties ) , aMeshInVTK + " && isVisible " , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Transparency
//-------------------------------------------------
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpTransparency ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpTransparency ) , aMeshInVTK + " && isVisible " , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
// Controls
//-------------------------------------------------
QString
2009-02-17 10:27:49 +05:00
aMeshInVtkHasNodes = aMeshInVTK + " && " + hasNodes ,
2005-06-07 19:22:20 +06:00
aMeshInVtkHasEdges = aMeshInVTK + " && " + hasEdges ,
aMeshInVtkHasFaces = aMeshInVTK + " && " + hasFaces ,
aMeshInVtkHasVolumes = aMeshInVTK + " && " + hasVolumes ;
anId = popupMgr ( ) - > insert ( tr ( " MEN_CTRL " ) , - 1 , - 1 ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpReset ) , anId , - 1 ) ; // RESET
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpReset ) , aMeshInVTK + " && controlMode <> 'eNone' " , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
2012-08-09 16:03:55 +06:00
int aSubId = popupMgr ( ) - > insert ( tr ( " MEN_NODE_CTRL " ) , anId , - 1 ) ; // NODE CONTROLS
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpFreeNode ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeNode ) , aMeshInVtkHasNodes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeNode ) , " controlMode = 'eFreeNodes' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpEqualNode ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualNode ) , aMeshInVtkHasNodes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualNode ) , " controlMode = 'eCoincidentNodes' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
aSubId = popupMgr ( ) - > insert ( tr ( " MEN_EDGE_CTRL " ) , anId , - 1 ) ; // EDGE CONTROLS
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpFreeEdge ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeEdge ) , aMeshInVtkHasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeEdge ) , " controlMode = 'eFreeEdges' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpFreeBorder ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeBorder ) , aMeshInVtkHasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeBorder ) , " controlMode = 'eFreeBorders' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpLength ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpLength ) , aMeshInVtkHasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpLength ) , " controlMode = 'eLength' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpConnection ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpConnection ) , aMeshInVtkHasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpConnection ) , " controlMode = 'eMultiConnection' " , QtxPopupMgr : : ToggleRule ) ;
popupMgr ( ) - > insert ( action ( SMESHOp : : OpEqualEdge ) , aSubId , - 1 ) ; // EQUAL_EDGE
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualEdge ) , aMeshInVtkHasEdges , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualEdge ) , " controlMode = 'eCoincidentElems1D' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
aSubId = popupMgr ( ) - > insert ( tr ( " MEN_FACE_CTRL " ) , anId , - 1 ) ; // FACE CONTROLS
2009-02-17 10:27:49 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpFreeFace ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeFace ) , aMeshInVtkHasFaces /*aMeshInVtkHasVolumes*/ ,
2012-08-09 16:03:55 +06:00
QtxPopupMgr : : VisibleRule ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpFreeFace ) , " controlMode = 'eFreeFaces' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpLength2D ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpLength2D ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpLength2D ) , " controlMode = 'eLength2D' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpConnection2D ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpConnection2D ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpConnection2D ) , " controlMode = 'eMultiConnection2D' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpArea ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpArea ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpArea ) , " controlMode = 'eArea' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpTaper ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpTaper ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpTaper ) , " controlMode = 'eTaper' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpAspectRatio ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpAspectRatio ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpAspectRatio ) , " controlMode = 'eAspectRatio' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpMinimumAngle ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMinimumAngle ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMinimumAngle ) , " controlMode = 'eMinimumAngle' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpWarpingAngle ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpWarpingAngle ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpWarpingAngle ) , " controlMode = 'eWarping' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpSkew ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpSkew ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpSkew ) , " controlMode = 'eSkew' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpMaxElementLength2D ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMaxElementLength2D ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMaxElementLength2D ) , " controlMode = 'eMaxElementLength2D' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpBareBorderFace ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpBareBorderFace ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpBareBorderFace ) , " controlMode = 'eBareBorderFace' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpOverConstrainedFace ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOverConstrainedFace ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOverConstrainedFace ) , " controlMode = 'eOverConstrainedFace' " , QtxPopupMgr : : ToggleRule ) ;
popupMgr ( ) - > insert ( action ( SMESHOp : : OpEqualFace ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualFace ) , aMeshInVtkHasFaces , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualFace ) , " controlMode = 'eCoincidentElems2D' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
aSubId = popupMgr ( ) - > insert ( tr ( " MEN_VOLUME_CTRL " ) , anId , - 1 ) ; // VOLUME CONTROLS
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpAspectRatio3D ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpAspectRatio3D ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpAspectRatio3D ) , " controlMode = 'eAspectRatio3D' " , QtxPopupMgr : : ToggleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpVolume ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpVolume ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpVolume ) , " controlMode = 'eVolume3D' " , QtxPopupMgr : : ToggleRule ) ;
2009-02-17 10:27:49 +05:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpMaxElementLength3D ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMaxElementLength3D ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpMaxElementLength3D ) , " controlMode = 'eMaxElementLength3D' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpBareBorderVolume ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpBareBorderVolume ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpBareBorderVolume ) , " controlMode = 'eBareBorderVolume' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpOverConstrainedVolume ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOverConstrainedVolume ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpOverConstrainedVolume ) , " controlMode = 'eOverConstrainedVolume' " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpEqualVolume ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualVolume ) , aMeshInVtkHasVolumes , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpEqualVolume ) , " controlMode = 'eCoincidentElems3D' " , QtxPopupMgr : : ToggleRule ) ;
2013-10-16 18:56:06 +06:00
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
2015-04-21 12:37:02 +05:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpShowScalarBar ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShowScalarBar ) , aMeshInVTK + " && controlMode <> 'eNone' " , QtxPopupMgr : : VisibleRule ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShowScalarBar ) , aMeshInVTK + " && controlMode <> 'eNone' && isScalarBarVisible " , QtxPopupMgr : : ToggleRule ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpScalarBarProperties ) , anId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpScalarBarProperties ) , aMeshInVTK + " && controlMode <> 'eNone' " , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
popupMgr ( ) - > insert ( separator ( ) , anId , - 1 ) ;
aSubId = popupMgr ( ) - > insert ( tr ( " MEN_DISTRIBUTION_CTRL " ) , anId , - 1 ) ; // NODE CONTROLS
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpSaveDistribution ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpSaveDistribution ) , aMeshInVTK + " && isNumFunctor " , QtxPopupMgr : : VisibleRule ) ;
2012-08-09 16:03:55 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpShowDistribution ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShowDistribution ) , aMeshInVTK + " && isNumFunctor " , QtxPopupMgr : : VisibleRule ) ;
2015-04-21 12:37:02 +05:00
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShowDistribution ) , aMeshInVTK + " && isNumFunctor && isScalarBarVisible && isDistributionVisible " , QtxPopupMgr : : ToggleRule ) ;
2012-08-09 16:03:55 +06:00
# ifndef DISABLE_PLOT2DVIEWER
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpPlotDistribution ) , aSubId , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpPlotDistribution ) , aMeshInVTK + " && isNumFunctor " , QtxPopupMgr : : VisibleRule ) ;
2012-08-09 16:03:55 +06:00
# endif
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
2014-07-23 16:30:09 +06:00
// Show / Hide
2005-06-07 19:22:20 +06:00
//-------------------------------------------------
2012-08-09 16:03:55 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , - 1 ) ;
2005-10-04 13:35:48 +06:00
QString aRule = " $component={'SMESH'} and ( type='Component' or ( " + aClient + " and " +
aType + " and " + aSelCount + " and " + anActiveVTK + " and " + isNotEmpty + " %1 ) ) " ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpShow ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShow ) , aRule . arg ( " and (not isVisible) " ) , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpHide ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpHide ) , aRule . arg ( " and isVisible " ) , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpShowOnly ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpShowOnly ) , aRule . arg ( " " ) , QtxPopupMgr : : VisibleRule ) ;
2005-06-07 19:22:20 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , - 1 ) ;
2005-06-14 12:25:33 +06:00
2012-08-09 16:03:55 +06:00
//-------------------------------------------------
// Clipping
//-------------------------------------------------
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpClipping ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpClipping ) , " client='VTKViewer' " , QtxPopupMgr : : VisibleRule ) ;
2012-08-09 16:03:55 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , - 1 ) ;
2014-07-23 16:30:09 +06:00
popupMgr ( ) - > insert ( action ( SMESHOp : : OpSortChild ) , - 1 , - 1 ) ;
popupMgr ( ) - > setRule ( action ( SMESHOp : : OpSortChild ) , " $component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1 " , QtxPopupMgr : : VisibleRule ) ;
2013-07-09 14:32:08 +06:00
popupMgr ( ) - > insert ( separator ( ) , - 1 , - 1 ) ;
2005-10-12 18:18:43 +06:00
connect ( application ( ) , SIGNAL ( viewManagerActivated ( SUIT_ViewManager * ) ) ,
2012-08-09 16:03:55 +06:00
this , SLOT ( onViewManagerActivated ( SUIT_ViewManager * ) ) ) ;
connect ( application ( ) , SIGNAL ( viewManagerRemoved ( SUIT_ViewManager * ) ) ,
this , SLOT ( onViewManagerRemoved ( SUIT_ViewManager * ) ) ) ;
2003-05-19 20:07:00 +06:00
}
2004-12-01 15:48:31 +05:00
2009-02-17 10:27:49 +05:00
//================================================================================
/*!
* \ brief Return true if SMESH or GEOM objects are selected .
* Is called form LightApp_Module : : activateModule ( ) which clear selection if
* not isSelectionCompatible ( )
*/
//================================================================================
bool SMESHGUI : : isSelectionCompatible ( )
{
bool isCompatible = true ;
SALOME_ListIO selected ;
if ( LightApp_SelectionMgr * Sel = selectionMgr ( ) )
Sel - > selectedObjects ( selected ) ;
SALOME_ListIteratorOfListIO It ( selected ) ;
for ( ; isCompatible & & It . More ( ) ; It . Next ( ) )
isCompatible =
( strcmp ( " GEOM " , It . Value ( ) - > getComponentDataType ( ) ) = = 0 ) | |
( strcmp ( " SMESH " , It . Value ( ) - > getComponentDataType ( ) ) = = 0 ) ;
return isCompatible ;
}
2012-08-09 16:03:55 +06:00
bool SMESHGUI : : reusableOperation ( const int id )
{
// compute, evaluate and precompute are not reusable operations
2014-07-23 16:30:09 +06:00
return ( id = = SMESHOp : : OpCompute | | id = = SMESHOp : : OpPreCompute | | id = = SMESHOp : : OpEvaluate ) ? false : SalomeApp_Module : : reusableOperation ( id ) ;
2012-08-09 16:03:55 +06:00
}
2005-06-08 18:45:25 +06:00
bool SMESHGUI : : activateModule ( SUIT_Study * study )
2003-05-19 20:07:00 +06:00
{
2005-06-08 18:45:25 +06:00
bool res = SalomeApp_Module : : activateModule ( study ) ;
2005-06-07 19:22:20 +06:00
setMenuShown ( true ) ;
setToolShown ( true ) ;
2012-08-09 16:03:55 +06:00
// import Python module that manages SMESH plugins (need to be here because SalomePyQt API uses active module)
PyGILState_STATE gstate = PyGILState_Ensure ( ) ;
2013-09-12 20:18:54 +06:00
PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock ( ( char * ) " salome_pluginsmanager " ) ;
if ( ! pluginsmanager ) {
2012-08-09 16:03:55 +06:00
PyErr_Print ( ) ;
2013-09-12 20:18:54 +06:00
}
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 ( ) ;
}
2012-08-09 16:03:55 +06:00
PyGILState_Release ( gstate ) ;
2013-09-12 20:18:54 +06:00
// end of SMESH plugins loading
2012-08-09 16:03:55 +06:00
2006-05-10 20:34:56 +06:00
// Reset actions accelerator keys
2014-07-23 16:30:09 +06:00
action ( SMESHOp : : OpDelete ) - > setEnabled ( true ) ; // Delete: Key_Delete
2012-08-09 16:03:55 +06:00
// 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH
GetSMESHGen ( ) - > SetCurrentStudy ( SALOMEDS : : Study : : _nil ( ) ) ;
if ( SalomeApp_Study * s = dynamic_cast < SalomeApp_Study * > ( study ) )
if ( _PTR ( Study ) aStudy = s - > studyDS ( ) ) {
GetSMESHGen ( ) - > SetCurrentStudy ( _CAST ( Study , aStudy ) - > GetStudy ( ) ) ;
updateObjBrowser ( ) ; // objects can be removed
}
// get all view currently opened in the study and connect their signals to
// the corresponding slots of the class.
SUIT_Desktop * aDesk = study - > application ( ) - > desktop ( ) ;
if ( aDesk ) {
QList < SUIT_ViewWindow * > wndList = aDesk - > windows ( ) ;
SUIT_ViewWindow * wnd ;
foreach ( wnd , wndList )
connectView ( wnd ) ;
}
2006-05-10 20:34:56 +06:00
2005-06-08 18:45:25 +06:00
return res ;
2003-05-19 20:07:00 +06:00
}
2005-06-08 18:45:25 +06:00
bool SMESHGUI : : deactivateModule ( SUIT_Study * study )
2003-05-19 20:07:00 +06:00
{
2005-06-07 19:22:20 +06:00
setMenuShown ( false ) ;
setToolShown ( false ) ;
EmitSignalCloseAllDialogs ( ) ;
2005-09-22 20:34:08 +06:00
2006-05-10 20:34:56 +06:00
// Unset actions accelerator keys
2014-07-23 16:30:09 +06:00
action ( SMESHOp : : OpDelete ) - > setEnabled ( false ) ; // Delete: Key_Delete
2006-05-10 20:34:56 +06:00
2005-06-08 18:45:25 +06:00
return SalomeApp_Module : : deactivateModule ( study ) ;
2005-06-07 19:22:20 +06:00
}
2008-03-07 12:47:05 +05:00
void SMESHGUI : : studyClosed ( SUIT_Study * s )
{
2014-09-26 13:26:08 +06:00
if ( ! s )
return ;
2008-03-07 12:47:05 +05:00
SMESH : : RemoveVisuData ( s - > id ( ) ) ;
SalomeApp_Module : : studyClosed ( s ) ;
}
2005-06-07 19:22:20 +06:00
void SMESHGUI : : OnGUIEvent ( )
{
const QObject * obj = sender ( ) ;
if ( ! obj | | ! obj - > inherits ( " QAction " ) )
2004-06-18 14:34:31 +06:00
return ;
2005-06-07 19:22:20 +06:00
int id = actionId ( ( QAction * ) obj ) ;
if ( id ! = - 1 )
OnGUIEvent ( id ) ;
2004-06-18 14:34:31 +06:00
}
2003-12-10 21:05:04 +05:00
2005-06-07 19:22:20 +06:00
SMESH : : SMESH_Gen_var SMESHGUI : : GetSMESHGen ( )
2004-06-18 14:34:31 +06:00
{
2005-11-16 14:18:22 +05:00
_PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) ; //Document OCAF de l'etude active
2005-06-21 12:09:10 +06:00
if ( CORBA : : is_nil ( myComponentSMESH ) )
{
SMESHGUI aGUI ; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH
2005-11-16 14:18:22 +05:00
if ( aStudy )
aGUI . myComponentSMESH - > SetCurrentStudy ( _CAST ( Study , aStudy ) - > GetStudy ( ) ) ;
2005-06-21 12:09:10 +06:00
return aGUI . myComponentSMESH ;
2005-09-22 20:34:08 +06:00
}
2005-11-16 14:18:22 +05:00
if ( aStudy )
myComponentSMESH - > SetCurrentStudy ( _CAST ( Study , aStudy ) - > GetStudy ( ) ) ;
2005-06-07 19:22:20 +06:00
return myComponentSMESH ;
}
QString SMESHGUI : : engineIOR ( ) const
{
CORBA : : ORB_var anORB = getApp ( ) - > orb ( ) ;
CORBA : : String_var anIOR = anORB - > object_to_string ( GetSMESHGen ( ) ) ;
2008-03-07 12:47:05 +05:00
return QString ( anIOR . in ( ) ) ;
2005-06-07 19:22:20 +06:00
}
2009-02-17 10:27:49 +05:00
void SMESHGUI : : contextMenuPopup ( const QString & client , QMenu * menu , QString & title )
2005-06-07 19:22:20 +06:00
{
2009-02-17 10:27:49 +05:00
SalomeApp_Module : : contextMenuPopup ( client , menu , title ) ;
SALOME_ListIO lst ;
selectionMgr ( ) - > selectedObjects ( lst ) ;
if ( ( client = = " OCCViewer " | | client = = " VTKViewer " ) & & lst . Extent ( ) = = 1 ) {
Handle ( SALOME_InteractiveObject ) io = lst . First ( ) ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
_PTR ( Study ) study = appStudy - > studyDS ( ) ;
_PTR ( SObject ) obj = study - > FindObjectID ( io - > getEntry ( ) ) ;
if ( obj ) {
2014-12-18 21:24:03 +05:00
QString aName = QString ( SMESH : : fromUtf8 ( obj - > GetName ( ) ) ) ;
2009-02-17 10:27:49 +05:00
while ( aName . at ( aName . length ( ) - 1 ) = = ' ' ) // Remove extraspaces in Name of Popup
2012-08-09 16:03:55 +06:00
aName . remove ( ( aName . length ( ) - 1 ) , 1 ) ;
2009-02-17 10:27:49 +05:00
title = aName ;
}
}
}
LightApp_Selection * SMESHGUI : : createSelection ( ) const
{
return new SMESHGUI_Selection ( ) ;
2005-06-07 19:22:20 +06:00
}
void SMESHGUI : : windows ( QMap < int , int > & aMap ) const
{
2009-02-17 10:27:49 +05:00
aMap . insert ( SalomeApp_Application : : WT_ObjectBrowser , Qt : : LeftDockWidgetArea ) ;
2014-04-24 20:01:46 +06:00
aMap . insert ( SalomeApp_Application : : WT_NoteBook , Qt : : LeftDockWidgetArea ) ;
2009-02-17 10:27:49 +05:00
aMap . insert ( SalomeApp_Application : : WT_PyConsole , Qt : : BottomDockWidgetArea ) ;
2005-06-07 19:22:20 +06:00
}
void SMESHGUI : : viewManagers ( QStringList & list ) const
{
list . append ( SVTK_Viewer : : Type ( ) ) ;
2003-05-19 20:07:00 +06:00
}
2005-06-14 12:25:33 +06:00
2005-10-12 18:18:43 +06:00
void SMESHGUI : : onViewManagerActivated ( SUIT_ViewManager * mgr )
2005-06-14 12:25:33 +06:00
{
2012-08-09 16:03:55 +06:00
if ( dynamic_cast < SVTK_ViewManager * > ( mgr ) ) {
2005-06-14 12:25:33 +06:00
SMESH : : UpdateSelectionProp ( this ) ;
2012-08-09 16:03:55 +06:00
QVector < SUIT_ViewWindow * > aViews = mgr - > getViews ( ) ;
for ( int i = 0 ; i < aViews . count ( ) ; i + + ) {
SUIT_ViewWindow * sf = aViews [ i ] ;
connectView ( sf ) ;
}
}
}
void SMESHGUI : : onViewManagerRemoved ( SUIT_ViewManager * theViewManager )
{
if ( theViewManager & & theViewManager - > getType ( ) = = SVTK_Viewer : : Type ( ) )
myClippingPlaneInfoMap . erase ( theViewManager ) ;
}
void SMESHGUI : : addActorAsObserver ( SMESH_Actor * theActor )
{
theActor - > AddObserver ( SMESH : : DeleteActorEvent ,
myEventCallbackCommand . GetPointer ( ) ,
myPriority ) ;
}
void SMESHGUI : : ProcessEvents ( vtkObject * theObject ,
unsigned long theEvent ,
void * theClientData ,
void * theCallData )
{
if ( SMESHGUI * aSMESHGUI = reinterpret_cast < SMESHGUI * > ( theClientData ) ) {
if ( theObject & & theEvent = = SMESH : : DeleteActorEvent ) {
if ( SMESH_Actor * anActor = SMESH_Actor : : SafeDownCast ( theObject ) ) {
SMESHGUI_ClippingPlaneInfoMap & aClippingPlaneInfoMap = aSMESHGUI - > getClippingPlaneInfoMap ( ) ;
SMESHGUI_ClippingPlaneInfoMap : : iterator anIter1 = aClippingPlaneInfoMap . begin ( ) ;
for ( ; anIter1 ! = aClippingPlaneInfoMap . end ( ) ; anIter1 + + ) {
SMESHGUI_ClippingPlaneInfoList & aClippingPlaneInfoList = anIter1 - > second ;
SMESHGUI_ClippingPlaneInfoList : : iterator anIter2 = aClippingPlaneInfoList . begin ( ) ;
for ( ; anIter2 ! = aClippingPlaneInfoList . end ( ) ; anIter2 + + ) {
SMESH : : ClippingPlaneInfo & aClippingPlaneInfo = * anIter2 ;
std : : list < vtkActor * > & anActorList = aClippingPlaneInfo . ActorList ;
SMESH : : TActorList : : iterator anIter3 = anActorList . begin ( ) ;
for ( ; anIter3 ! = anActorList . end ( ) ; anIter3 + + ) {
if ( anActor = = * anIter3 ) {
anActorList . erase ( anIter3 ) ;
break ;
}
}
}
}
}
}
}
2005-06-14 12:25:33 +06:00
}
2005-06-27 17:29:58 +06:00
void SMESHGUI : : createPreferences ( )
{
2009-02-17 10:27:49 +05:00
// General tab ------------------------------------------------------------------------
2005-06-27 17:29:58 +06:00
int genTab = addPreference ( tr ( " PREF_TAB_GENERAL " ) ) ;
2012-08-09 16:03:55 +06:00
int autoUpdate = addPreference ( tr ( " PREF_AUTO_UPDATE " ) , genTab , LightApp_Preferences : : Auto , " SMESH " , " auto_update " ) ;
2013-06-21 11:33:07 +06:00
setPreferenceProperty ( autoUpdate , " columns " , 2 ) ;
2012-08-09 16:03:55 +06:00
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 " ) ) ;
2013-06-21 11:33:07 +06:00
addPreference ( tr ( " PREF_INCREMENTAL_LIMIT " ) , autoUpdate , LightApp_Preferences : : Bool , " SMESH " , " incremental_limit " ) ;
2005-08-30 16:04:41 +06:00
2005-06-27 17:29:58 +06:00
int qaGroup = addPreference ( tr ( " PREF_GROUP_QUALITY " ) , genTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( qaGroup , " columns " , 2 ) ;
2005-11-03 13:38:17 +05:00
addPreference ( tr ( " PREF_DISPLAY_ENTITY " ) , qaGroup , LightApp_Preferences : : Bool , " SMESH " , " display_entity " ) ;
addPreference ( tr ( " PREF_PRECISION_USE " ) , qaGroup , LightApp_Preferences : : Bool , " SMESH " , " use_precision " ) ;
2009-02-17 10:27:49 +05:00
int prec = addPreference ( tr ( " PREF_PRECISION_VALUE " ) , qaGroup , LightApp_Preferences : : IntSpin , " SMESH " , " controls_precision " ) ;
2005-06-27 17:29:58 +06:00
setPreferenceProperty ( prec , " min " , 0 ) ;
2014-10-23 18:40:33 +06:00
setPreferenceProperty ( prec , " max " , 100 ) ;
2012-08-09 16:03:55 +06:00
int doubleNodesTol = addPreference ( tr ( " PREF_EQUAL_NODES_TOL " ) , qaGroup , LightApp_Preferences : : DblSpin , " SMESH " , " equal_nodes_tolerance " ) ;
setPreferenceProperty ( doubleNodesTol , " precision " , 10 ) ;
setPreferenceProperty ( doubleNodesTol , " min " , 0.0000000001 ) ;
setPreferenceProperty ( doubleNodesTol , " max " , 1000000.0 ) ;
setPreferenceProperty ( doubleNodesTol , " step " , 0.0000001 ) ;
2005-06-27 17:29:58 +06:00
2015-04-17 14:59:55 +05:00
int dispgroup = addPreference ( tr ( " PREF_DISPLAY_MODE_GROUP " ) , genTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( dispgroup , " columns " , 2 ) ;
2005-11-03 13:38:17 +05:00
int dispmode = addPreference ( tr ( " PREF_DISPLAY_MODE " ) , dispgroup , LightApp_Preferences : : Selector , " SMESH " , " display_mode " ) ;
2005-07-22 11:40:59 +06:00
QStringList modes ;
2012-08-09 16:03:55 +06:00
modes . append ( tr ( " MEN_WIRE " ) ) ;
modes . append ( tr ( " MEN_SHADE " ) ) ;
modes . append ( tr ( " MEN_NODES " ) ) ;
modes . append ( tr ( " MEN_SHRINK " ) ) ;
2009-02-17 10:27:49 +05:00
QList < QVariant > indices ;
2005-09-22 20:34:08 +06:00
indices . append ( 0 ) ;
2005-08-30 16:04:41 +06:00
indices . append ( 1 ) ;
indices . append ( 2 ) ;
indices . append ( 3 ) ;
2005-07-22 11:40:59 +06:00
setPreferenceProperty ( dispmode , " strings " , modes ) ;
2005-08-30 16:04:41 +06:00
setPreferenceProperty ( dispmode , " indexes " , indices ) ;
2005-09-22 20:34:08 +06:00
2015-04-17 14:59:55 +05:00
int arcgroup = addPreference ( tr ( " QUADRATIC_REPRESENT_MODE_GROUP " ) , genTab ) ;
2012-08-09 16:03:55 +06:00
setPreferenceProperty ( arcgroup , " columns " , 2 ) ;
int quadraticmode = addPreference ( tr ( " QUADRATIC_REPRESENT_MODE " ) , arcgroup , LightApp_Preferences : : Selector , " SMESH " , " quadratic_mode " ) ;
QStringList quadraticModes ;
quadraticModes . append ( tr ( " MEN_LINE_REPRESENTATION " ) ) ;
quadraticModes . append ( tr ( " MEN_ARC_REPRESENTATION " ) ) ;
indices . clear ( ) ;
indices . append ( 0 ) ;
indices . append ( 1 ) ;
setPreferenceProperty ( quadraticmode , " strings " , quadraticModes ) ;
setPreferenceProperty ( quadraticmode , " indexes " , indices ) ;
int maxAngle = addPreference ( tr ( " MAX_ARC_ANGLE " ) , arcgroup , LightApp_Preferences : : IntSpin ,
" SMESH " , " max_angle " ) ;
setPreferenceProperty ( maxAngle , " min " , 1 ) ;
setPreferenceProperty ( maxAngle , " max " , 90 ) ;
2005-12-02 18:04:27 +05:00
int exportgroup = addPreference ( tr ( " PREF_GROUP_EXPORT " ) , genTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( exportgroup , " columns " , 2 ) ;
2005-12-02 18:04:27 +05:00
addPreference ( tr ( " PREF_AUTO_GROUPS " ) , exportgroup , LightApp_Preferences : : Bool , " SMESH " , " auto_groups " ) ;
2013-04-01 19:05:47 +06:00
//addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" );
2008-03-07 12:47:05 +05:00
2009-02-17 10:27:49 +05:00
int computeGroup = addPreference ( tr ( " PREF_GROUP_COMPUTE " ) , genTab ) ;
setPreferenceProperty ( computeGroup , " columns " , 2 ) ;
int notifyMode = addPreference ( tr ( " PREF_NOTIFY_MODE " ) , computeGroup , LightApp_Preferences : : Selector , " SMESH " , " show_result_notification " ) ;
modes . clear ( ) ;
2012-08-09 16:03:55 +06:00
modes . append ( tr ( " PREF_NOTIFY_NEVER " ) ) ;
modes . append ( tr ( " PREF_NOTIFY_ERROR " ) ) ;
modes . append ( tr ( " PREF_NOTIFY_ALWAYS " ) ) ;
2009-02-17 10:27:49 +05:00
indices . clear ( ) ;
indices . append ( 0 ) ;
indices . append ( 1 ) ;
indices . append ( 2 ) ;
setPreferenceProperty ( notifyMode , " strings " , modes ) ;
setPreferenceProperty ( notifyMode , " indexes " , indices ) ;
2012-08-09 16:03:55 +06:00
int infoGroup = addPreference ( tr ( " PREF_GROUP_INFO " ) , genTab ) ;
2013-02-12 20:37:44 +06:00
setPreferenceProperty ( infoGroup , " columns " , 2 ) ;
2012-08-09 16:03:55 +06:00
int elemInfo = addPreference ( tr ( " PREF_ELEM_INFO " ) , infoGroup , LightApp_Preferences : : Selector , " SMESH " , " mesh_elem_info " ) ;
modes . clear ( ) ;
modes . append ( tr ( " PREF_ELEM_INFO_SIMPLE " ) ) ;
modes . append ( tr ( " PREF_ELEM_INFO_TREE " ) ) ;
indices . clear ( ) ;
indices . append ( 0 ) ;
indices . append ( 1 ) ;
setPreferenceProperty ( elemInfo , " strings " , modes ) ;
setPreferenceProperty ( elemInfo , " indexes " , indices ) ;
int nodesLim = addPreference ( tr ( " PREF_GPP_NODES_LIMIT " ) , infoGroup , LightApp_Preferences : : IntSpin , " SMESH " , " info_groups_nodes_limit " ) ;
setPreferenceProperty ( nodesLim , " min " , 0 ) ;
setPreferenceProperty ( nodesLim , " max " , 10000000 ) ;
setPreferenceProperty ( nodesLim , " step " , 10000 ) ;
setPreferenceProperty ( nodesLim , " special " , tr ( " PREF_UPDATE_LIMIT_NOLIMIT " ) ) ;
2013-06-19 13:46:33 +06:00
int ctrlLim = addPreference ( tr ( " PREF_CTRL_LIMIT " ) , infoGroup , LightApp_Preferences : : IntSpin , " SMESH " , " info_controls_limit " ) ;
2013-06-27 18:35:43 +06:00
setPreferenceProperty ( ctrlLim , " special " , tr ( " PREF_UPDATE_LIMIT_NOLIMIT " ) ) ;
2013-06-19 13:46:33 +06:00
setPreferenceProperty ( ctrlLim , " min " , 0 ) ;
setPreferenceProperty ( ctrlLim , " max " , 10000000 ) ;
setPreferenceProperty ( ctrlLim , " step " , 1000 ) ;
2013-02-12 20:37:44 +06:00
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 " ) ;
2013-06-19 13:46:33 +06:00
addPreference ( tr ( " PREF_DUMP_CTRL_INFO " ) , infoGroup , LightApp_Preferences : : Bool , " SMESH " , " info_dump_ctrl " ) ;
2012-08-09 16:03:55 +06:00
2009-02-17 10:27:49 +05:00
int segGroup = addPreference ( tr ( " PREF_GROUP_SEGMENT_LENGTH " ) , genTab ) ;
setPreferenceProperty ( segGroup , " columns " , 2 ) ;
int segLen = addPreference ( tr ( " PREF_SEGMENT_LENGTH " ) , segGroup , LightApp_Preferences : : IntSpin ,
" SMESH " , " segmentation " ) ;
setPreferenceProperty ( segLen , " min " , 1 ) ;
setPreferenceProperty ( segLen , " max " , 10000000 ) ;
int nbSeg = addPreference ( tr ( " PREF_NB_SEGMENTS " ) , segGroup , LightApp_Preferences : : IntSpin ,
" SMESH " , " nb_segments_per_edge " ) ;
setPreferenceProperty ( nbSeg , " min " , 1 ) ;
setPreferenceProperty ( nbSeg , " max " , 10000000 ) ;
2012-08-09 16:03:55 +06:00
int loadGroup = addPreference ( tr ( " SMESH_PREF_MESH_LOADING " ) , genTab ) ;
addPreference ( tr ( " PREF_FORGET_MESH_AT_HYP_MODIF " ) , loadGroup , LightApp_Preferences : : Bool ,
" SMESH " , " forget_mesh_on_hyp_modif " ) ;
// Quantities with individual precision settings
int precGroup = addPreference ( tr ( " SMESH_PREF_GROUP_PRECISION " ) , genTab ) ;
setPreferenceProperty ( precGroup , " columns " , 2 ) ;
const int nbQuantities = 6 ;
int precs [ nbQuantities ] , ii = 0 ;
precs [ ii + + ] = addPreference ( tr ( " SMESH_PREF_length_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " length_precision " ) ;
precs [ ii + + ] = addPreference ( tr ( " SMESH_PREF_angle_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " angle_precision " ) ;
precs [ ii + + ] = addPreference ( tr ( " SMESH_PREF_len_tol_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " len_tol_precision " ) ;
precs [ ii + + ] = addPreference ( tr ( " SMESH_PREF_parametric_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " parametric_precision " ) ;
precs [ ii + + ] = addPreference ( tr ( " SMESH_PREF_area_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " area_precision " ) ;
precs [ ii ] = addPreference ( tr ( " SMESH_PREF_vol_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " vol_precision " ) ;
// Set property for precision value for spinboxes
for ( ii = 0 ; ii < nbQuantities ; ii + + ) {
setPreferenceProperty ( precs [ ii ] , " min " , - 14 ) ;
setPreferenceProperty ( precs [ ii ] , " max " , 14 ) ;
setPreferenceProperty ( precs [ ii ] , " precision " , 2 ) ;
}
int previewGroup = addPreference ( tr ( " SMESH_PREF_GROUP_PREVIEW " ) , genTab ) ;
setPreferenceProperty ( previewGroup , " columns " , 2 ) ;
int chunkSize = addPreference ( tr ( " PREF_PREVIEW_CHUNK_SIZE " ) , previewGroup , LightApp_Preferences : : IntSpin , " SMESH " , " preview_actor_chunk_size " ) ;
2012-12-13 17:41:29 +06:00
setPreferenceProperty ( chunkSize , " min " , 1 ) ;
2012-08-09 16:03:55 +06:00
setPreferenceProperty ( chunkSize , " max " , 1000 ) ;
setPreferenceProperty ( chunkSize , " step " , 50 ) ;
int pyDumpGroup = addPreference ( tr ( " PREF_PYTHON_DUMP " ) , genTab ) ;
addPreference ( tr ( " PREF_HISTORICAL_PYTHON_DUMP " ) , pyDumpGroup , LightApp_Preferences : : Bool , " SMESH " , " historical_python_dump " ) ;
2009-02-17 10:27:49 +05:00
// Mesh tab ------------------------------------------------------------------------
2005-06-27 17:29:58 +06:00
int meshTab = addPreference ( tr ( " PREF_TAB_MESH " ) ) ;
int nodeGroup = addPreference ( tr ( " PREF_GROUP_NODES " ) , meshTab ) ;
2012-08-09 16:03:55 +06:00
setPreferenceProperty ( nodeGroup , " columns " , 3 ) ;
2005-06-27 17:29:58 +06:00
2005-11-03 13:38:17 +05:00
addPreference ( tr ( " PREF_COLOR " ) , nodeGroup , LightApp_Preferences : : Color , " SMESH " , " node_color " ) ;
2005-06-27 17:29:58 +06:00
2012-08-09 16:03:55 +06:00
int typeOfMarker = addPreference ( tr ( " PREF_TYPE_OF_MARKER " ) , nodeGroup , LightApp_Preferences : : Selector , " SMESH " , " type_of_marker " ) ;
SUIT_ResourceMgr * aResourceMgr = SMESH : : GetResourceMgr ( this ) ;
QList < QVariant > aMarkerTypeIndicesList ;
QList < QVariant > aMarkerTypeIconsList ;
for ( int i = VTK : : MT_POINT ; i < VTK : : MT_USER ; i + + ) {
QString icoFile = QString ( " ICON_VERTEX_MARKER_%1 " ) . arg ( i ) ;
QPixmap pixmap = aResourceMgr - > loadPixmap ( " VTKViewer " , tr ( qPrintable ( icoFile ) ) ) ;
aMarkerTypeIndicesList < < i ;
aMarkerTypeIconsList < < pixmap ;
}
setPreferenceProperty ( typeOfMarker , " indexes " , aMarkerTypeIndicesList ) ;
setPreferenceProperty ( typeOfMarker , " icons " , aMarkerTypeIconsList ) ;
int markerScale = addPreference ( tr ( " PREF_MARKER_SCALE " ) , nodeGroup , LightApp_Preferences : : Selector , " SMESH " , " marker_scale " ) ;
QList < QVariant > aMarkerScaleIndicesList ;
QStringList aMarkerScaleValuesList ;
for ( int i = VTK : : MS_10 ; i < = VTK : : MS_70 ; i + + ) {
aMarkerScaleIndicesList < < i ;
aMarkerScaleValuesList < < QString : : number ( ( i - ( int ) VTK : : MS_10 ) * 0.5 + 1.0 ) ;
}
setPreferenceProperty ( markerScale , " strings " , aMarkerScaleValuesList ) ;
setPreferenceProperty ( markerScale , " indexes " , aMarkerScaleIndicesList ) ;
2005-06-27 17:29:58 +06:00
int elemGroup = addPreference ( tr ( " PREF_GROUP_ELEMENTS " ) , meshTab ) ;
2012-10-08 17:56:59 +06:00
//setPreferenceProperty( elemGroup, "columns", 2 );
2005-06-27 17:29:58 +06:00
2012-10-08 17:56:59 +06:00
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 " ) ) ;
2012-08-09 16:03:55 +06:00
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 " ) ;
2013-09-13 16:00:15 +06:00
addPreference ( tr ( " PREF_PREVIEW_COLOR " ) , elemGroup , LightApp_Preferences : : BiColor , " SMESH " , " preview_color " ) ;
2009-02-17 10:27:49 +05:00
2005-06-27 17:29:58 +06:00
2012-08-09 16:03:55 +06:00
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 " ) ;
2012-10-08 17:56:59 +06:00
addPreference ( tr ( " PREF_GRP_DEF_COLOR " ) , grpGroup , LightApp_Preferences : : Color , " SMESH " , " default_grp_color " ) ;
2012-08-09 16:03:55 +06:00
int size0d = addPreference ( tr ( " PREF_SIZE_0D " ) , elemGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " elem0d_size " ) ;
2015-04-21 12:37:02 +05:00
/* int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup,
LightApp_Preferences : : IntSpin , " SMESH " , " ball_elem_size " ) ; */
2015-04-21 13:08:15 +05:00
double ballDiameter = addPreference ( tr ( " PREF_BALL_DIAMETER " ) , elemGroup ,
LightApp_Preferences : : DblSpin , " SMESH " , " ball_elem_diameter " ) ;
2014-04-02 12:09:25 +06:00
double ballScale = addPreference ( tr ( " PREF_BALL_SCALE " ) , elemGroup ,
LightApp_Preferences : : DblSpin , " SMESH " , " ball_elem_scale " ) ;
2012-08-09 16:03:55 +06:00
int elemW = addPreference ( tr ( " PREF_WIDTH " ) , elemGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " element_width " ) ;
2012-10-08 17:56:59 +06:00
int outW = addPreference ( tr ( " PREF_OUTLINE_WIDTH " ) , elemGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " outline_width " ) ;
2012-08-09 16:03:55 +06:00
int shrink = addPreference ( tr ( " PREF_SHRINK_COEFF " ) , elemGroup ,
LightApp_Preferences : : IntSpin , " SMESH " , " shrink_coeff " ) ;
setPreferenceProperty ( size0d , " min " , 1 ) ;
setPreferenceProperty ( size0d , " max " , 10 ) ;
2015-04-21 12:37:02 +05:00
// setPreferenceProperty( ballSize, "min", 1 );
// setPreferenceProperty( ballSize, "max", 10 );
setPreferenceProperty ( ballDiameter , " min " , 1e-7 ) ;
setPreferenceProperty ( ballDiameter , " max " , 1e9 ) ;
setPreferenceProperty ( ballDiameter , " step " , 0.1 ) ;
2005-06-27 17:29:58 +06:00
2014-04-02 12:09:25 +06:00
setPreferenceProperty ( ballScale , " min " , 1e-2 ) ;
setPreferenceProperty ( ballScale , " max " , 1e7 ) ;
setPreferenceProperty ( ballScale , " step " , 0.5 ) ;
2014-03-24 13:29:24 +06:00
2005-06-27 17:29:58 +06:00
setPreferenceProperty ( elemW , " min " , 1 ) ;
setPreferenceProperty ( elemW , " max " , 5 ) ;
2012-10-08 17:56:59 +06:00
setPreferenceProperty ( outW , " min " , 1 ) ;
setPreferenceProperty ( outW , " max " , 5 ) ;
2005-06-27 17:29:58 +06:00
setPreferenceProperty ( shrink , " min " , 0 ) ;
setPreferenceProperty ( shrink , " max " , 100 ) ;
2013-02-12 20:37:44 +06:00
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 ) ;
2009-02-17 10:27:49 +05:00
int orientGroup = addPreference ( tr ( " PREF_GROUP_FACES_ORIENTATION " ) , meshTab ) ;
setPreferenceProperty ( orientGroup , " columns " , 1 ) ;
addPreference ( tr ( " PREF_ORIENTATION_COLOR " ) , orientGroup , LightApp_Preferences : : Color , " SMESH " , " orientation_color " ) ;
int orientScale = addPreference ( tr ( " PREF_ORIENTATION_SCALE " ) , orientGroup , LightApp_Preferences : : DblSpin , " SMESH " , " orientation_scale " ) ;
setPreferenceProperty ( orientScale , " min " , 0.05 ) ;
setPreferenceProperty ( orientScale , " max " , 0.5 ) ;
setPreferenceProperty ( orientScale , " step " , 0.05 ) ;
addPreference ( tr ( " PREF_ORIENTATION_3D_VECTORS " ) , orientGroup , LightApp_Preferences : : Bool , " SMESH " , " orientation_3d_vectors " ) ;
// Selection tab ------------------------------------------------------------------------
2005-06-27 17:29:58 +06:00
int selTab = addPreference ( tr ( " PREF_TAB_SELECTION " ) ) ;
int selGroup = addPreference ( tr ( " PREF_GROUP_SELECTION " ) , selTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( selGroup , " columns " , 2 ) ;
2005-06-27 17:29:58 +06:00
2005-11-03 13:38:17 +05:00
addPreference ( tr ( " PREF_OBJECT_COLOR " ) , selGroup , LightApp_Preferences : : Color , " SMESH " , " selection_object_color " ) ;
addPreference ( tr ( " PREF_ELEMENT_COLOR " ) , selGroup , LightApp_Preferences : : Color , " SMESH " , " selection_element_color " ) ;
2005-09-22 20:34:08 +06:00
2005-06-27 17:29:58 +06:00
int preGroup = addPreference ( tr ( " PREF_GROUP_PRESELECTION " ) , selTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( preGroup , " columns " , 2 ) ;
2005-06-27 17:29:58 +06:00
2005-11-03 13:38:17 +05:00
addPreference ( tr ( " PREF_HIGHLIGHT_COLOR " ) , preGroup , LightApp_Preferences : : Color , " SMESH " , " highlight_color " ) ;
2005-06-27 17:29:58 +06:00
int precSelGroup = addPreference ( tr ( " PREF_GROUP_PRECISION " ) , selTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( precSelGroup , " columns " , 2 ) ;
2005-06-27 17:29:58 +06:00
2005-11-03 13:38:17 +05:00
addPreference ( tr ( " PREF_NODES " ) , precSelGroup , LightApp_Preferences : : Double , " SMESH " , " selection_precision_node " ) ;
addPreference ( tr ( " PREF_ELEMENTS " ) , precSelGroup , LightApp_Preferences : : Double , " SMESH " , " selection_precision_element " ) ;
2008-03-07 12:47:05 +05:00
addPreference ( tr ( " PREF_OBJECTS " ) , precSelGroup , LightApp_Preferences : : Double , " SMESH " , " selection_precision_object " ) ;
2005-07-21 18:05:17 +06:00
2009-02-17 10:27:49 +05:00
// Scalar Bar tab ------------------------------------------------------------------------
2005-07-21 18:05:17 +06:00
int sbarTab = addPreference ( tr ( " SMESH_SCALARBAR " ) ) ;
int fontGr = addPreference ( tr ( " SMESH_FONT_SCALARBAR " ) , sbarTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( fontGr , " columns " , 2 ) ;
2005-07-21 18:05:17 +06:00
2009-02-17 10:27:49 +05:00
addVtkFontPref ( tr ( " SMESH_TITLE " ) , fontGr , " scalar_bar_title_font " ) ;
2008-03-07 12:47:05 +05:00
addPreference ( tr ( " PREF_TITLE_COLOR " ) , fontGr , LightApp_Preferences : : Color , " SMESH " , " scalar_bar_title_color " ) ;
2005-07-21 18:05:17 +06:00
2009-02-17 10:27:49 +05:00
addVtkFontPref ( tr ( " SMESH_LABELS " ) , fontGr , " scalar_bar_label_font " ) ;
addPreference ( tr ( " PREF_LABELS_COLOR " ) , fontGr , LightApp_Preferences : : Color , " SMESH " , " scalar_bar_label_color " ) ;
2005-09-22 20:34:08 +06:00
2005-07-21 18:05:17 +06:00
int colorsLabelsGr = addPreference ( tr ( " SMESH_LABELS_COLORS_SCALARBAR " ) , sbarTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( colorsLabelsGr , " columns " , 2 ) ;
2005-07-21 18:05:17 +06:00
2005-11-03 13:38:17 +05:00
int numcol = addPreference ( tr ( " SMESH_NUMBEROFCOLORS " ) , colorsLabelsGr , LightApp_Preferences : : IntSpin , " SMESH " , " scalar_bar_num_colors " ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( numcol , " min " , 2 ) ;
2005-09-22 20:34:08 +06:00
setPreferenceProperty ( numcol , " max " , 256 ) ;
2005-11-03 13:38:17 +05:00
int numlab = addPreference ( tr ( " SMESH_NUMBEROFLABELS " ) , colorsLabelsGr , LightApp_Preferences : : IntSpin , " SMESH " , " scalar_bar_num_labels " ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( numlab , " min " , 2 ) ;
setPreferenceProperty ( numlab , " max " , 65 ) ;
int orientGr = addPreference ( tr ( " SMESH_ORIENTATION " ) , sbarTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( orientGr , " columns " , 2 ) ;
2005-11-03 13:38:17 +05:00
int orient = addPreference ( tr ( " SMESH_ORIENTATION " ) , orientGr , LightApp_Preferences : : Selector , " SMESH " , " scalar_bar_orientation " ) ;
2005-07-21 18:05:17 +06:00
QStringList orients ;
orients . append ( tr ( " SMESH_VERTICAL " ) ) ;
orients . append ( tr ( " SMESH_HORIZONTAL " ) ) ;
2005-08-30 16:04:41 +06:00
indices . clear ( ) ; indices . append ( 0 ) ; indices . append ( 1 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( orient , " strings " , orients ) ;
setPreferenceProperty ( orient , " indexes " , indices ) ;
2005-09-22 20:34:08 +06:00
2005-07-21 18:05:17 +06:00
int posVSizeGr = addPreference ( tr ( " SMESH_POSITION_SIZE_SCALARBAR " ) + " " + tr ( " SMESH_VERTICAL " ) , sbarTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( posVSizeGr , " columns " , 2 ) ;
2005-11-03 13:38:17 +05:00
int xv = addPreference ( tr ( " SMESH_X_SCALARBAR " ) , posVSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_vertical_x " ) ;
int yv = addPreference ( tr ( " SMESH_Y_SCALARBAR " ) , posVSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_vertical_y " ) ;
int wv = addPreference ( tr ( " SMESH_WIDTH " ) , posVSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_vertical_width " ) ;
int hv = addPreference ( tr ( " SMESH_HEIGHT " ) , posVSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_vertical_height " ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( xv , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( xv , " min " , 0.0 ) ;
setPreferenceProperty ( xv , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( yv , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( yv , " min " , 0.0 ) ;
setPreferenceProperty ( yv , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( wv , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( wv , " min " , 0.0 ) ;
setPreferenceProperty ( wv , " max " , 1.0 ) ;
setPreferenceProperty ( hv , " min " , 0.0 ) ;
setPreferenceProperty ( hv , " max " , 1.0 ) ;
2005-09-22 20:34:08 +06:00
setPreferenceProperty ( hv , " step " , 0.1 ) ;
2005-07-21 18:05:17 +06:00
int posHSizeGr = addPreference ( tr ( " SMESH_POSITION_SIZE_SCALARBAR " ) + " " + tr ( " SMESH_HORIZONTAL " ) , sbarTab ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( posHSizeGr , " columns " , 2 ) ;
2005-11-03 13:38:17 +05:00
int xh = addPreference ( tr ( " SMESH_X_SCALARBAR " ) , posHSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_horizontal_x " ) ;
int yh = addPreference ( tr ( " SMESH_Y_SCALARBAR " ) , posHSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_horizontal_y " ) ;
int wh = addPreference ( tr ( " SMESH_WIDTH " ) , posHSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_horizontal_width " ) ;
int hh = addPreference ( tr ( " SMESH_HEIGHT " ) , posHSizeGr , LightApp_Preferences : : DblSpin , " SMESH " , " scalar_bar_horizontal_height " ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( xv , " min " , 0.0 ) ;
setPreferenceProperty ( xv , " max " , 1.0 ) ;
setPreferenceProperty ( xv , " step " , 0.1 ) ;
setPreferenceProperty ( xh , " min " , 0.0 ) ;
setPreferenceProperty ( xh , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( xh , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( yh , " min " , 0.0 ) ;
setPreferenceProperty ( yh , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( yh , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( wh , " min " , 0.0 ) ;
setPreferenceProperty ( wh , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( wh , " step " , 0.1 ) ;
2005-07-25 10:37:30 +06:00
setPreferenceProperty ( hh , " min " , 0.0 ) ;
setPreferenceProperty ( hh , " max " , 1.0 ) ;
2005-07-21 18:05:17 +06:00
setPreferenceProperty ( hh , " step " , 0.1 ) ;
2012-08-09 16:03:55 +06:00
int distributionGr = addPreference ( tr ( " SMESH_DISTRIBUTION_SCALARBAR " ) , sbarTab , LightApp_Preferences : : Auto , " SMESH " , " distribution_visibility " ) ;
int coloringType = addPreference ( tr ( " SMESH_DISTRIBUTION_COLORING_TYPE " ) , distributionGr , LightApp_Preferences : : Selector , " SMESH " , " distribution_coloring_type " ) ;
setPreferenceProperty ( distributionGr , " columns " , 3 ) ;
QStringList types ;
types . append ( tr ( " SMESH_MONOCOLOR " ) ) ;
types . append ( tr ( " SMESH_MULTICOLOR " ) ) ;
indices . clear ( ) ; indices . append ( 0 ) ; indices . append ( 1 ) ;
setPreferenceProperty ( coloringType , " strings " , types ) ;
setPreferenceProperty ( coloringType , " indexes " , indices ) ;
addPreference ( tr ( " SMESH_DISTRIBUTION_COLOR " ) , distributionGr , LightApp_Preferences : : Color , " SMESH " , " distribution_color " ) ;
2005-06-27 17:29:58 +06:00
}
2005-07-25 10:37:30 +06:00
void SMESHGUI : : preferencesChanged ( const QString & sect , const QString & name )
2005-06-27 17:29:58 +06:00
{
2009-02-17 10:27:49 +05:00
if ( sect = = " SMESH " ) {
2006-02-07 20:01:11 +05:00
float sbX1 , sbY1 , sbW , sbH ;
2006-03-13 20:29:49 +05:00
float aTol = 1.00000009999999 ;
2006-02-07 20:01:11 +05:00
std : : string aWarning ;
SUIT_ResourceMgr * aResourceMgr = SMESH : : GetResourceMgr ( this ) ;
2008-03-07 12:47:05 +05:00
if ( name = = " selection_object_color " | | name = = " selection_element_color " | |
2012-08-09 16:03:55 +06:00
name = = " highlight_color " | |
2008-03-07 12:47:05 +05:00
name = = " selection_precision_node " | | name = = " selection_precision_element " | |
2012-08-09 16:03:55 +06:00
name = = " selection_precision_object " )
2005-10-07 12:44:04 +06:00
SMESH : : UpdateSelectionProp ( this ) ;
2006-02-07 20:01:11 +05:00
else if ( name = = QString ( " scalar_bar_vertical_x " ) | | name = = QString ( " scalar_bar_vertical_width " ) ) {
sbX1 = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_vertical_x " , sbX1 ) ;
sbW = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_vertical_width " , sbW ) ;
2006-03-13 20:29:49 +05:00
if ( sbX1 + sbW > aTol ) {
2012-08-09 16:03:55 +06:00
aWarning = " Origin and Size Vertical: X+Width > 1 \n " ;
sbX1 = 0.01 ;
sbW = 0.08 ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_vertical_x " , sbX1 ) ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_vertical_width " , sbW ) ;
2006-02-07 20:01:11 +05:00
}
}
else if ( name = = QString ( " scalar_bar_vertical_y " ) | | name = = QString ( " scalar_bar_vertical_height " ) ) {
sbY1 = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_vertical_y " , sbY1 ) ;
sbH = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_vertical_height " , sbH ) ;
2006-03-13 20:29:49 +05:00
if ( sbY1 + sbH > aTol ) {
2012-08-09 16:03:55 +06:00
aWarning = " Origin and Size Vertical: Y+Height > 1 \n " ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_vertical_y " , sbY1 ) ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_vertical_height " , sbH ) ;
2006-02-07 20:01:11 +05:00
}
}
else if ( name = = QString ( " scalar_bar_horizontal_x " ) | | name = = QString ( " scalar_bar_horizontal_width " ) ) {
sbX1 = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_horizontal_x " , sbX1 ) ;
sbW = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_horizontal_width " , sbW ) ;
2006-03-13 20:29:49 +05:00
if ( sbX1 + sbW > aTol ) {
2012-08-09 16:03:55 +06:00
aWarning = " Origin and Size Horizontal: X+Width > 1 \n " ;
sbX1 = 0.1 ;
sbW = 0.08 ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_horizontal_x " , sbX1 ) ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_horizontal_width " , sbW ) ;
2006-02-07 20:01:11 +05:00
}
}
else if ( name = = QString ( " scalar_bar_horizontal_y " ) | | name = = QString ( " scalar_bar_horizontal_height " ) ) {
sbY1 = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_horizontal_y " , sbY1 ) ;
sbH = aResourceMgr - > doubleValue ( " SMESH " , " scalar_bar_horizontal_height " , sbH ) ;
2006-03-13 20:29:49 +05:00
if ( sbY1 + sbH > aTol ) {
2012-08-09 16:03:55 +06:00
aWarning = " Origin and Size Horizontal: Y+Height > 1 \n " ;
sbY1 = 0.01 ;
sbH = 0.08 ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_horizontal_y " , sbY1 ) ;
aResourceMgr - > setValue ( " SMESH " , " scalar_bar_horizontal_height " , sbH ) ;
2006-02-07 20:01:11 +05:00
}
}
2009-02-17 10:27:49 +05:00
else if ( name = = " segmentation " ) {
int nbSeg = aResourceMgr - > integerValue ( " SMESH " , " segmentation " , 10 ) ;
myComponentSMESH - > SetBoundaryBoxSegmentation ( nbSeg ) ;
}
else if ( name = = " nb_segments_per_edge " ) {
int nbSeg = aResourceMgr - > integerValue ( " SMESH " , " nb_segments_per_edge " , 15 ) ;
myComponentSMESH - > SetDefaultNbSegments ( nbSeg ) ;
}
2012-08-09 16:03:55 +06:00
else if ( name = = " historical_python_dump " | |
name = = " forget_mesh_on_hyp_modif " ) {
QString val = aResourceMgr - > stringValue ( " SMESH " , name ) ;
myComponentSMESH - > SetOption ( name . toLatin1 ( ) . constData ( ) , val . toLatin1 ( ) . constData ( ) ) ;
}
2013-02-12 20:37:44 +06:00
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 ) ;
}
2008-03-07 12:47:05 +05:00
2006-02-07 20:01:11 +05:00
if ( aWarning . size ( ) ! = 0 ) {
aWarning + = " The default values are applied instead. " ;
2009-02-17 10:27:49 +05:00
SUIT_MessageBox : : warning ( SMESHGUI : : desktop ( ) ,
2012-08-09 16:03:55 +06:00
QObject : : tr ( " SMESH_ERR_SCALARBAR_PARAMS " ) ,
QObject : : tr ( aWarning . c_str ( ) ) ) ;
2006-02-07 20:01:11 +05:00
}
}
2005-06-27 17:29:58 +06:00
}
2005-08-23 14:47:31 +06:00
//================================================================================
/*!
* \ brief Update something in accordance with update flags
* \ param theFlags - update flags
*
* Update viewer or / and object browser etc . in accordance with update flags ( see
2005-11-03 13:38:17 +05:00
* LightApp_UpdateFlags enumeration ) .
2005-08-23 14:47:31 +06:00
*/
//================================================================================
void SMESHGUI : : update ( const int flags )
{
2012-08-09 16:03:55 +06:00
if ( ( flags & UF_Viewer ) | ( flags & UF_Forced ) )
2005-08-23 14:47:31 +06:00
SMESH : : UpdateView ( ) ;
else
SalomeApp_Module : : update ( flags ) ;
}
//================================================================================
/*!
* \ brief Set default selection mode
*
* SLOT called when operation commited . Sets default selection mode
*/
//================================================================================
void SMESHGUI : : onOperationCommited ( SUIT_Operation * )
{
SVTK_ViewWindow * vtkWnd =
dynamic_cast < SVTK_ViewWindow * > ( application ( ) - > desktop ( ) - > activeWindow ( ) ) ;
if ( vtkWnd )
vtkWnd - > SetSelectionMode ( ActorSelection ) ;
}
//================================================================================
/*!
* \ brief Set default selection mode
*
* SLOT called when operation aborted . Sets default selection mode
*/
//================================================================================
void SMESHGUI : : onOperationAborted ( SUIT_Operation * )
{
SVTK_ViewWindow * vtkWnd =
dynamic_cast < SVTK_ViewWindow * > ( application ( ) - > desktop ( ) - > activeWindow ( ) ) ;
if ( vtkWnd )
vtkWnd - > SetSelectionMode ( ActorSelection ) ;
}
//================================================================================
/*!
* \ brief Creates operation with given identifier
* \ param id - identifier of operation to be started
* \ return Pointer on created operation or NULL if operation is not created
*
2005-09-22 20:34:08 +06:00
* Virtual method redefined from the base class creates operation with given id .
* It is called called automatically from startOperation method of base class .
2005-08-23 14:47:31 +06:00
*/
//================================================================================
2005-11-03 13:38:17 +05:00
LightApp_Operation * SMESHGUI : : createOperation ( const int id ) const
2005-08-23 14:47:31 +06:00
{
2005-11-03 13:38:17 +05:00
LightApp_Operation * op = 0 ;
2005-08-23 14:47:31 +06:00
// to do : create operation here
switch ( id )
{
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpConvertMeshToQuadratic :
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_ConvToQuadOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateBoundaryElements : // create 2D mesh as boundary on 3D
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_Make2DFrom3DOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpReorientFaces :
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_ReorientFacesOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateMesh :
2005-08-23 14:47:31 +06:00
op = new SMESHGUI_MeshOp ( true , true ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateSubMesh :
2005-08-23 14:47:31 +06:00
op = new SMESHGUI_MeshOp ( true , false ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpEditMeshOrSubMesh :
2005-08-23 14:47:31 +06:00
op = new SMESHGUI_MeshOp ( false ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCompute :
op = new SMESHGUI_ComputeOp ( ) ;
break ;
case SMESHOp : : OpPreCompute :
2009-02-17 10:27:49 +05:00
op = new SMESHGUI_PrecomputeOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpEvaluate :
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_EvaluateOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMeshOrder :
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_MeshOrderOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpCreateGeometryGroup :
2009-02-17 10:27:49 +05:00
op = new SMESHGUI_GroupOnShapeOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpFindElementByPoint :
2012-08-09 16:03:55 +06:00
op = new SMESHGUI_FindElemByPointOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpMoveNode : // Make mesh pass through point
2008-03-07 12:47:05 +05:00
op = new SMESHGUI_MakeNodeAtPointOp ( ) ;
break ;
2014-07-23 16:30:09 +06:00
case SMESHOp : : OpElem0DOnElemNodes : // Create 0D elements on all nodes
2012-12-13 17:41:29 +06:00
op = new SMESHGUI_Add0DElemsOnAllNodesOp ( ) ;
break ;
2005-08-23 14:47:31 +06:00
default :
break ;
}
2005-09-22 20:34:08 +06:00
2005-09-27 12:33:42 +06:00
if ( ! op )
op = SalomeApp_Module : : createOperation ( id ) ;
2005-08-23 14:47:31 +06:00
return op ;
}
2005-09-27 12:33:42 +06:00
2006-02-07 20:01:11 +05:00
//================================================================================
/*!
* \ brief Stops current operations and starts a given one
* \ param id - The id of the operation to start
*/
//================================================================================
void SMESHGUI : : switchToOperation ( int id )
{
if ( _PTR ( Study ) aStudy = SMESH : : GetActiveStudyDocument ( ) )
activeStudy ( ) - > abortAllOperations ( ) ;
startOperation ( id ) ;
}
2005-11-03 13:38:17 +05:00
LightApp_Displayer * SMESHGUI : : displayer ( )
2005-09-27 12:33:42 +06:00
{
if ( ! myDisplayer )
2005-11-14 18:55:07 +05:00
myDisplayer = new SMESHGUI_Displayer ( getApp ( ) ) ;
2005-09-27 12:33:42 +06:00
return myDisplayer ;
}
2008-03-07 12:47:05 +05:00
2009-02-17 10:27:49 +05:00
SALOMEDS : : Color SMESHGUI : : getUniqueColor ( const QList < SALOMEDS : : Color > & theReservedColors )
2008-03-07 12:47:05 +05:00
{
int aHue = - 1 ;
int aTolerance = 64 ;
int anIterations = 0 ;
int aPeriod = 5 ;
while ( 1 )
{
anIterations + + ;
if ( anIterations % aPeriod = = 0 )
{
aTolerance / = 2 ;
if ( aTolerance < 1 )
2012-08-09 16:03:55 +06:00
break ;
2008-03-07 12:47:05 +05:00
}
aHue = ( int ) ( 360.0 * rand ( ) / RAND_MAX ) ;
bool ok = true ;
2009-02-17 10:27:49 +05:00
QList < SALOMEDS : : Color > : : const_iterator it = theReservedColors . constBegin ( ) ;
QList < SALOMEDS : : Color > : : const_iterator itEnd = theReservedColors . constEnd ( ) ;
2008-03-07 12:47:05 +05:00
for ( ; it ! = itEnd ; + + it )
{
SALOMEDS : : Color anAutoColor = * it ;
QColor aQColor ( ( int ) ( anAutoColor . R * 255.0 ) , ( int ) ( anAutoColor . G * 255.0 ) , ( int ) ( anAutoColor . B * 255.0 ) ) ;
int h , s , v ;
aQColor . getHsv ( & h , & s , & v ) ;
if ( abs ( h - aHue ) < aTolerance )
{
2012-08-09 16:03:55 +06:00
ok = false ;
break ;
2008-03-07 12:47:05 +05:00
}
}
if ( ok )
break ;
}
QColor aColor ;
aColor . setHsv ( aHue , 255 , 255 ) ;
SALOMEDS : : Color aSColor ;
2012-10-08 17:56:59 +06:00
aSColor . R = aColor . redF ( ) ;
aSColor . G = aColor . greenF ( ) ;
aSColor . B = aColor . blueF ( ) ;
2008-03-07 12:47:05 +05:00
return aSColor ;
}
2009-02-17 10:27:49 +05:00
2012-12-13 17:41:29 +06:00
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
2009-02-17 10:27:49 +05:00
/*!
* \ brief Store visual parameters
*
* This method is called just before the study document is saved .
* Store visual parameters in AttributeParameter attribue ( s )
*/
void SMESHGUI : : storeVisualParameters ( int savePoint )
{
2012-12-13 17:41:29 +06:00
// localizing
Kernel_Utils : : Localizer loc ;
2009-02-17 10:27:49 +05:00
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
if ( ! appStudy | | ! appStudy - > studyDS ( ) )
return ;
_PTR ( Study ) studyDS = appStudy - > studyDS ( ) ;
// componentName is used for encoding of entries when storing them in IParameters
std : : string componentName = myComponentSMESH - > ComponentDataType ( ) ;
//_PTR(SComponent) aSComponent = studyDS->FindComponent("SMESH");
//if (!aSComponent) return;
// IParameters
_PTR ( AttributeParameter ) ap = studyDS - > GetModuleParameters ( " Interface Applicative " ,
componentName . c_str ( ) ,
savePoint ) ;
_PTR ( IParameters ) ip = ClientFactory : : getIParameters ( ap ) ;
2012-08-09 16:03:55 +06:00
// store map of custom markers
const VTK : : MarkerMap & aMarkerMap = myMarkerMap [ studyDS - > StudyId ( ) ] ;
if ( ! aMarkerMap . empty ( ) )
{
VTK : : MarkerMap : : const_iterator anIter = aMarkerMap . begin ( ) ;
for ( ; anIter ! = aMarkerMap . end ( ) ; anIter + + )
{
int anId = anIter - > first ;
VTK : : MarkerData aMarkerData = anIter - > second ;
std : : string aMarkerFileName = aMarkerData . first ;
VTK : : MarkerTexture aMarkerTexture = aMarkerData . second ;
if ( aMarkerTexture . size ( ) < 3 )
continue ; // should contain at least width, height and the first value
QString aPropertyName ( " texture " ) ;
aPropertyName + = gSeparator ;
aPropertyName + = QString : : number ( anId ) ;
QString aPropertyValue = aMarkerFileName . c_str ( ) ;
aPropertyValue + = gPathSep ;
VTK : : MarkerTexture : : const_iterator aTextureIter = aMarkerTexture . begin ( ) ;
ushort aWidth = * aTextureIter + + ;
ushort aHeight = * aTextureIter + + ;
aPropertyValue + = QString : : number ( aWidth ) ; aPropertyValue + = gDigitsSep ;
aPropertyValue + = QString : : number ( aHeight ) ; aPropertyValue + = gDigitsSep ;
for ( ; aTextureIter ! = aMarkerTexture . end ( ) ; aTextureIter + + )
aPropertyValue + = QString : : number ( * aTextureIter ) ;
ip - > setProperty ( aPropertyName . toStdString ( ) , aPropertyValue . toStdString ( ) ) ;
}
}
2009-02-17 10:27:49 +05:00
// viewers counters are used for storing view_numbers in IParameters
int vtkViewers = 0 ;
// main cycle to store parameters of displayed objects
QList < SUIT_ViewManager * > lst ;
QList < SUIT_ViewManager * > : : Iterator it ;
getApp ( ) - > viewManagers ( lst ) ;
for ( it = lst . begin ( ) ; it ! = lst . end ( ) ; it + + )
{
SUIT_ViewManager * vman = * it ;
QString vType = vman - > getType ( ) ;
// saving VTK actors properties
if ( vType = = SVTK_Viewer : : Type ( ) )
{
2012-08-09 16:03:55 +06:00
// store the clipping planes attached to the view manager
SMESHGUI_ClippingPlaneInfoList aClippingPlaneInfoList ;
SMESHGUI_ClippingPlaneInfoMap : : const_iterator anIter = myClippingPlaneInfoMap . find ( vman ) ;
if ( anIter ! = myClippingPlaneInfoMap . end ( ) )
aClippingPlaneInfoList = anIter - > second ;
if ( ! aClippingPlaneInfoList . empty ( ) ) {
SMESHGUI_ClippingPlaneInfoList : : const_iterator anIter = aClippingPlaneInfoList . begin ( ) ;
for ( int anId = 0 ; anIter ! = aClippingPlaneInfoList . end ( ) ; anIter + + , anId + + )
{
const SMESH : : ClippingPlaneInfo & aClippingPlaneInfo = * anIter ;
SMESH : : OrientedPlane * aPlane = aClippingPlaneInfo . Plane ;
QString aPropertyName ( " ClippingPlane " ) ;
aPropertyName + = gSeparator ;
aPropertyName + = QString : : number ( vtkViewers ) ;
aPropertyName + = gSeparator ;
aPropertyName + = QString : : number ( anId ) ;
2013-10-16 18:56:06 +06:00
QString aPropertyValue = QString : : number ( ( int ) aPlane - > PlaneMode ) . toLatin1 ( ) . constData ( ) ;
2012-08-09 16:03:55 +06:00
aPropertyValue + = gDigitsSep ;
2013-10-16 18:56:06 +06:00
aPropertyValue + = QString : : number ( aPlane - > IsOpenGLClipping ) . toLatin1 ( ) . constData ( ) ;
2012-08-09 16:03:55 +06:00
aPropertyValue + = gDigitsSep ;
2013-10-16 18:56:06 +06:00
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 ( ) ;
}
2012-08-09 16:03:55 +06:00
ip - > setProperty ( aPropertyName . toStdString ( ) , aPropertyValue . toStdString ( ) ) ;
}
}
2009-02-17 10:27:49 +05:00
QVector < SUIT_ViewWindow * > views = vman - > getViews ( ) ;
for ( int i = 0 , iEnd = vman - > getViewsCount ( ) ; i < iEnd ; i + + )
{
2012-08-09 16:03:55 +06:00
if ( SVTK_ViewWindow * vtkView = dynamic_cast < SVTK_ViewWindow * > ( views [ i ] ) )
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
VTK : : ActorCollectionCopy aCopy ( vtkView - > getRenderer ( ) - > GetActors ( ) ) ;
vtkActorCollection * allActors = aCopy . GetActors ( ) ;
allActors - > InitTraversal ( ) ;
while ( vtkActor * actor = allActors - > GetNextActor ( ) )
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
if ( actor - > GetVisibility ( ) ) // store only visible actors
2009-02-17 10:27:49 +05:00
{
SMESH_Actor * aSmeshActor = 0 ;
if ( actor - > IsA ( " SMESH_Actor " ) )
aSmeshActor = SMESH_Actor : : SafeDownCast ( actor ) ;
2012-08-09 16:03:55 +06:00
if ( aSmeshActor & & aSmeshActor - > hasIO ( ) )
2009-02-17 10:27:49 +05:00
{
Handle ( SALOME_InteractiveObject ) io = aSmeshActor - > getIO ( ) ;
if ( io - > hasEntry ( ) )
{
// entry is "encoded" = it does NOT contain component adress,
// since it is a subject to change on next component loading
std : : string entry = ip - > encodeEntry ( io - > getEntry ( ) , componentName ) ;
std : : string param , vtkParam = vType . toLatin1 ( ) . data ( ) ;
vtkParam + = gSeparator ;
vtkParam + = QString : : number ( vtkViewers ) . toLatin1 ( ) . data ( ) ;
vtkParam + = gSeparator ;
// Visibility
param = vtkParam + " Visibility " ;
ip - > setParameter ( entry , param , " On " ) ;
// Representation
param = vtkParam + " Representation " ;
ip - > setParameter ( entry , param , QString : : number
( ( int ) aSmeshActor - > GetRepresentation ( ) ) . toLatin1 ( ) . data ( ) ) ;
// IsShrunk
param = vtkParam + " IsShrunk " ;
ip - > setParameter ( entry , param , QString : : number
( ( int ) aSmeshActor - > IsShrunk ( ) ) . toLatin1 ( ) . data ( ) ) ;
// Displayed entities
unsigned int aMode = aSmeshActor - > GetEntityMode ( ) ;
2012-12-13 17:41:29 +06:00
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 ;
2009-02-17 10:27:49 +05:00
QString modeStr ( " e " ) ;
modeStr + = gDigitsSep ; modeStr + = QString : : number ( isE ) ;
modeStr + = gDigitsSep ; modeStr + = " f " ;
modeStr + = gDigitsSep ; modeStr + = QString : : number ( isF ) ;
modeStr + = gDigitsSep ; modeStr + = " v " ;
modeStr + = gDigitsSep ; modeStr + = QString : : number ( isV ) ;
2012-12-13 17:41:29 +06:00
modeStr + = gDigitsSep ; modeStr + = " 0d " ;
modeStr + = gDigitsSep ; modeStr + = QString : : number ( is0d ) ;
modeStr + = gDigitsSep ; modeStr + = " b " ;
modeStr + = gDigitsSep ; modeStr + = QString : : number ( isB ) ;
2009-02-17 10:27:49 +05:00
param = vtkParam + " Entities " ;
ip - > setParameter ( entry , param , modeStr . toLatin1 ( ) . data ( ) ) ;
2012-12-13 17:41:29 +06:00
// Colors
2013-03-01 19:13:25 +06:00
double r , g , b ;
2012-08-09 16:03:55 +06:00
int delta ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
aSmeshActor - > GetSufaceColor ( r , g , b , delta ) ;
2012-12-13 17:41:29 +06:00
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 ) ;
2009-02-17 10:27:49 +05:00
aSmeshActor - > GetEdgeColor ( r , g , b ) ;
2012-12-13 17:41:29 +06:00
colorStr < < " edge " ;
colorStr < < QString : : number ( r ) ;
colorStr < < QString : : number ( g ) ;
colorStr < < QString : : number ( b ) ;
2009-02-17 10:27:49 +05:00
aSmeshActor - > GetNodeColor ( r , g , b ) ;
2012-12-13 17:41:29 +06:00
colorStr < < " node " ;
colorStr < < QString : : number ( r ) ;
colorStr < < QString : : number ( g ) ;
colorStr < < QString : : number ( b ) ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
aSmeshActor - > GetOutlineColor ( r , g , b ) ;
2012-12-13 17:41:29 +06:00
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 ) ;
2012-08-09 16:03:55 +06:00
2009-02-17 10:27:49 +05:00
param = vtkParam + " Colors " ;
2012-12-13 17:41:29 +06:00
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 " ;
2015-04-21 12:37:02 +05:00
//sizeStr << QString::number((int)aSmeshActor->GetBallSize());
sizeStr < < QString : : number ( ( double ) aSmeshActor - > GetBallSize ( ) ) ;
2014-04-02 12:09:25 +06:00
sizeStr < < QString : : number ( ( double ) aSmeshActor - > GetBallScale ( ) ) ;
2012-12-13 17:41:29 +06:00
sizeStr < < " shrink " ;
sizeStr < < QString : : number ( aSmeshActor - > GetShrinkFactor ( ) ) ;
sizeStr < < " orientation " ;
sizeStr < < QString : : number ( aSmeshActor - > GetFacesOrientationScale ( ) ) ;
sizeStr < < QString : : number ( aSmeshActor - > GetFacesOrientation3DVectors ( ) ) ;
2009-02-17 10:27:49 +05:00
param = vtkParam + " Sizes " ;
2012-12-13 17:41:29 +06:00
ip - > setParameter ( entry , param , qPrintable ( sizeStr . join ( gDigitsSep ) ) ) ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
// Point marker
QString markerStr ;
VTK : : MarkerType aMarkerType = aSmeshActor - > GetMarkerType ( ) ;
if ( aMarkerType = = VTK : : MT_USER ) {
markerStr + = " custom " ;
markerStr + = gDigitsSep ;
markerStr + = QString : : number ( aSmeshActor - > GetMarkerTexture ( ) ) ;
}
else {
markerStr + = " std " ;
markerStr + = gDigitsSep ;
markerStr + = QString : : number ( ( int ) aMarkerType ) ;
markerStr + = gDigitsSep ;
markerStr + = QString : : number ( ( int ) aSmeshActor - > GetMarkerScale ( ) ) ;
}
param = vtkParam + " PointMarker " ;
ip - > setParameter ( entry , param , markerStr . toLatin1 ( ) . data ( ) ) ;
2009-02-17 10:27:49 +05:00
// Opacity
param = vtkParam + " Opacity " ;
ip - > setParameter ( entry , param ,
QString : : number ( aSmeshActor - > GetOpacity ( ) ) . toLatin1 ( ) . data ( ) ) ;
// Clipping
param = vtkParam + " ClippingPlane " ;
2012-08-09 16:03:55 +06:00
int aPlaneId = 0 ;
if ( ! aClippingPlaneInfoList . empty ( ) ) {
SMESHGUI_ClippingPlaneInfoList : : const_iterator anIter1 = aClippingPlaneInfoList . begin ( ) ;
for ( int anId = 0 ; anIter1 ! = aClippingPlaneInfoList . end ( ) ; anIter1 + + , anId + + )
{
const SMESH : : ClippingPlaneInfo & aClippingPlaneInfo = * anIter1 ;
std : : list < vtkActor * > anActorList = aClippingPlaneInfo . ActorList ;
SMESH : : TActorList : : iterator anIter2 = anActorList . begin ( ) ;
for ( ; anIter2 ! = anActorList . end ( ) ; anIter2 + + ) {
if ( aSmeshActor = = * anIter2 ) {
ip - > setParameter ( entry , param + QString : : number ( + + aPlaneId ) . toLatin1 ( ) . constData ( ) ,
QString : : number ( anId ) . toLatin1 ( ) . constData ( ) ) ;
break ;
}
}
}
2009-02-17 10:27:49 +05:00
}
2012-08-09 16:03:55 +06:00
if ( aPlaneId = = 0 )
ip - > setParameter ( entry , param , " Off " ) ;
2009-02-17 10:27:49 +05:00
} // if (io->hasEntry())
2012-08-09 16:03:55 +06:00
} // SMESH_Actor && hasIO
} // isVisible
} // while.. actors traversal
} // if (vtkView)
2009-02-17 10:27:49 +05:00
} // for (views)
vtkViewers + + ;
} // if (SVTK view model)
} // for (viewManagers)
}
2012-08-09 16:03:55 +06:00
// data structures for clipping planes processing
typedef struct {
int Id ;
2013-10-16 18:56:06 +06:00
int Mode ;
bool isOpenGLClipping ;
vtkIdType RelativeOrientation ;
2013-03-01 19:13:25 +06:00
double Distance ;
double Angle [ 2 ] ;
2013-10-16 18:56:06 +06:00
int AbsoluteOrientation ;
double X , Y , Z , Dx , Dy , Dz ;
2012-08-09 16:03:55 +06:00
} TPlaneData ;
typedef std : : list < TPlaneData > TPlaneDataList ;
typedef std : : map < int , TPlaneDataList > TPlaneDataMap ;
typedef std : : list < vtkActor * > TActorList ;
typedef struct {
int PlaneId ;
TActorList ActorList ;
SUIT_ViewManager * ViewManager ;
} TPlaneInfo ;
typedef std : : list < TPlaneInfo > TPlaneInfoList ;
typedef std : : map < int , TPlaneInfoList > TPlaneInfoMap ;
2009-02-17 10:27:49 +05:00
/*!
* \ brief Restore visual parameters
*
* This method is called after the study document is opened .
* Restore visual parameters from AttributeParameter attribue ( s )
*/
void SMESHGUI : : restoreVisualParameters ( int savePoint )
{
2012-12-13 17:41:29 +06:00
// localizing
Kernel_Utils : : Localizer loc ;
2009-02-17 10:27:49 +05:00
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
if ( ! appStudy | | ! appStudy - > studyDS ( ) )
return ;
_PTR ( Study ) studyDS = appStudy - > studyDS ( ) ;
// componentName is used for encoding of entries when storing them in IParameters
std : : string componentName = myComponentSMESH - > ComponentDataType ( ) ;
//_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
//if (!aSComponent) return;
// IParameters
_PTR ( AttributeParameter ) ap = studyDS - > GetModuleParameters ( " Interface Applicative " ,
componentName . c_str ( ) ,
savePoint ) ;
_PTR ( IParameters ) ip = ClientFactory : : getIParameters ( ap ) ;
2012-08-09 16:03:55 +06:00
// restore map of custom markers and map of clipping planes
VTK : : MarkerMap & aMarkerMap = myMarkerMap [ studyDS - > StudyId ( ) ] ;
TPlaneDataMap aPlaneDataMap ;
std : : vector < std : : string > properties = ip - > getProperties ( ) ;
for ( std : : vector < std : : string > : : iterator propIt = properties . begin ( ) ; propIt ! = properties . end ( ) ; + + propIt )
{
std : : string property = * propIt ;
QString aPropertyName ( property . c_str ( ) ) ;
QString aPropertyValue ( ip - > getProperty ( property ) . c_str ( ) ) ;
QStringList aPropertyNameList = aPropertyName . split ( gSeparator , QString : : SkipEmptyParts ) ;
if ( aPropertyNameList . isEmpty ( ) )
continue ;
QString aPropertyType = aPropertyNameList [ 0 ] ;
if ( aPropertyType = = " texture " )
{
if ( aPropertyNameList . size ( ) ! = 2 )
continue ;
bool ok = false ;
int anId = aPropertyNameList [ 1 ] . toInt ( & ok ) ;
if ( ! ok | | anId < 1 )
continue ;
QStringList aPropertyValueList = aPropertyValue . split ( gPathSep , QString : : SkipEmptyParts ) ;
if ( aPropertyValueList . size ( ) ! = 2 )
continue ;
std : : string aMarkerFileName = aPropertyValueList [ 0 ] . toStdString ( ) ;
QString aMarkerTextureString = aPropertyValueList [ 1 ] ;
QStringList aMarkerTextureStringList = aMarkerTextureString . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
if ( aMarkerTextureStringList . size ( ) ! = 3 )
continue ;
ok = false ;
ushort aWidth = aMarkerTextureStringList [ 0 ] . toUShort ( & ok ) ;
if ( ! ok )
continue ;
ok = false ;
ushort aHeight = aMarkerTextureStringList [ 1 ] . toUShort ( & ok ) ;
if ( ! ok )
continue ;
VTK : : MarkerTexture aMarkerTexture ;
aMarkerTexture . push_back ( aWidth ) ;
aMarkerTexture . push_back ( aHeight ) ;
QString aMarkerTextureData = aMarkerTextureStringList [ 2 ] ;
for ( int i = 0 , n = aMarkerTextureData . length ( ) ; i < n ; i + + )
{
QChar aChar = aMarkerTextureData . at ( i ) ;
if ( aChar . isDigit ( ) )
aMarkerTexture . push_back ( aChar . digitValue ( ) ) ;
}
aMarkerMap [ anId ] = VTK : : MarkerData ( aMarkerFileName , aMarkerTexture ) ;
}
else if ( aPropertyType = = " ClippingPlane " )
{
if ( aPropertyNameList . size ( ) ! = 3 )
continue ;
bool ok = false ;
int aViewId = aPropertyNameList [ 1 ] . toInt ( & ok ) ;
if ( ! ok | | aViewId < 0 )
continue ;
ok = false ;
int aClippingPlaneId = aPropertyNameList [ 2 ] . toInt ( & ok ) ;
if ( ! ok | | aClippingPlaneId < 0 )
continue ;
QStringList aPropertyValueList = aPropertyValue . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
2013-10-16 18:56:06 +06:00
if ( aPropertyValueList . size ( ) ! = 6 & & aPropertyValueList . size ( ) ! = 9 )
2012-08-09 16:03:55 +06:00
continue ;
TPlaneData aPlaneData ;
aPlaneData . Id = aClippingPlaneId ;
ok = false ;
2013-10-16 18:56:06 +06:00
aPlaneData . Mode = aPropertyValueList [ 0 ] . toInt ( & ok ) ;
2012-08-09 16:03:55 +06:00
if ( ! ok )
continue ;
2013-10-16 18:56:06 +06:00
2012-08-09 16:03:55 +06:00
ok = false ;
2013-10-16 18:56:06 +06:00
aPlaneData . isOpenGLClipping = aPropertyValueList [ 1 ] . toInt ( & ok ) ;
2012-08-09 16:03:55 +06:00
if ( ! ok )
continue ;
2013-10-16 18:56:06 +06:00
if ( ( SMESH : : Mode ) aPlaneData . Mode = = SMESH : : Absolute )
{
ok = false ;
aPlaneData . AbsoluteOrientation = aPropertyValueList [ 2 ] . toInt ( & ok ) ;
if ( ! ok )
continue ;
2012-08-09 16:03:55 +06:00
2013-10-16 18:56:06 +06:00
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 ;
}
2012-08-09 16:03:55 +06:00
TPlaneDataList & aPlaneDataList = aPlaneDataMap [ aViewId ] ;
aPlaneDataList . push_back ( aPlaneData ) ;
}
}
TPlaneInfoMap aPlaneInfoMap ;
2009-02-17 10:27:49 +05:00
std : : vector < std : : string > entries = ip - > getEntries ( ) ;
for ( std : : vector < std : : string > : : iterator entIt = entries . begin ( ) ; entIt ! = entries . end ( ) ; + + entIt )
{
// entry is a normal entry - it should be "decoded" (setting base adress of component)
QString entry ( ip - > decodeEntry ( * entIt ) . c_str ( ) ) ;
// Check that the entry corresponds to a real object in the Study
// as the object may be deleted or modified after the visual state is saved.
_PTR ( SObject ) so = studyDS - > FindObjectID ( entry . toLatin1 ( ) . data ( ) ) ;
if ( ! so ) continue ; //Skip the not existent entry
std : : vector < std : : string > paramNames = ip - > getAllParameterNames ( * entIt ) ;
std : : vector < std : : string > paramValues = ip - > getAllParameterValues ( * entIt ) ;
std : : vector < std : : string > : : iterator namesIt = paramNames . begin ( ) ;
std : : vector < std : : string > : : iterator valuesIt = paramValues . begin ( ) ;
// actors are stored in a map after displaying of them for
// quicker access in the future: map < viewID to actor >
NCollection_DataMap < int , SMESH_Actor * > vtkActors ;
for ( ; namesIt ! = paramNames . end ( ) ; + + namesIt , + + valuesIt )
{
// visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
// '_' is used as separator and should not be used in viewer type or parameter names.
QStringList lst = QString ( ( * namesIt ) . c_str ( ) ) . split ( gSeparator , QString : : SkipEmptyParts ) ;
if ( lst . size ( ) ! = 3 )
continue ;
QString viewerTypStr = lst [ 0 ] ;
QString viewIndexStr = lst [ 1 ] ;
QString paramNameStr = lst [ 2 ] ;
bool ok ;
int viewIndex = viewIndexStr . toUInt ( & ok ) ;
if ( ! ok ) // bad conversion of view index to integer
2012-08-09 16:03:55 +06:00
continue ;
2009-02-17 10:27:49 +05:00
// viewers
if ( viewerTypStr = = SVTK_Viewer : : Type ( ) )
{
SMESH_Actor * aSmeshActor = 0 ;
if ( vtkActors . IsBound ( viewIndex ) )
aSmeshActor = vtkActors . Find ( viewIndex ) ;
2012-08-09 16:03:55 +06:00
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( viewerTypStr , lst ) ;
// SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager
SUIT_ViewManager * vman = NULL ;
if ( viewIndex > = 0 & & viewIndex < lst . count ( ) )
vman = lst . at ( viewIndex ) ;
2009-02-17 10:27:49 +05:00
if ( paramNameStr = = " Visibility " )
{
2012-08-09 16:03:55 +06:00
if ( ! aSmeshActor & & displayer ( ) & & vman )
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
SUIT_ViewModel * vmodel = vman - > getViewModel ( ) ;
// SVTK view model can be casted to SALOME_View
displayer ( ) - > Display ( entry , true , dynamic_cast < SALOME_View * > ( vmodel ) ) ;
// store displayed actor in a temporary map for quicker
// access later when restoring other parameters
SVTK_ViewWindow * vtkView = ( SVTK_ViewWindow * ) vman - > getActiveView ( ) ;
vtkRenderer * Renderer = vtkView - > getRenderer ( ) ;
VTK : : ActorCollectionCopy aCopy ( Renderer - > GetActors ( ) ) ;
vtkActorCollection * theActors = aCopy . GetActors ( ) ;
theActors - > InitTraversal ( ) ;
bool isFound = false ;
vtkActor * ac = theActors - > GetNextActor ( ) ;
for ( ; ac ! = NULL & & ! isFound ; ac = theActors - > GetNextActor ( ) ) {
if ( ac - > IsA ( " SMESH_Actor " ) ) {
SMESH_Actor * aGeomAc = SMESH_Actor : : SafeDownCast ( ac ) ;
if ( aGeomAc - > hasIO ( ) ) {
Handle ( SALOME_InteractiveObject ) io =
Handle ( SALOME_InteractiveObject ) : : DownCast ( aGeomAc - > getIO ( ) ) ;
if ( io - > hasEntry ( ) & & strcmp ( io - > getEntry ( ) , entry . toLatin1 ( ) . data ( ) ) = = 0 ) {
isFound = true ;
vtkActors . Bind ( viewIndex , aGeomAc ) ;
2009-02-17 10:27:49 +05:00
}
}
}
}
}
} // if (paramNameStr == "Visibility")
2012-08-09 16:03:55 +06:00
else
2009-02-17 10:27:49 +05:00
{
// the rest properties "work" with SMESH_Actor
2012-08-09 16:03:55 +06:00
if ( aSmeshActor )
2009-02-17 10:27:49 +05:00
{
QString val ( ( * valuesIt ) . c_str ( ) ) ;
// Representation
if ( paramNameStr = = " Representation " ) {
aSmeshActor - > SetRepresentation ( ( SMESH_Actor : : EReperesent ) val . toInt ( ) ) ;
}
// IsShrunk
else if ( paramNameStr = = " IsShrunk " ) {
if ( val . toInt ( ) ) {
if ( ! aSmeshActor - > IsShrunk ( ) )
aSmeshActor - > SetShrink ( ) ;
}
else {
if ( aSmeshActor - > IsShrunk ( ) )
aSmeshActor - > UnShrink ( ) ;
}
}
// Displayed entities
else if ( paramNameStr = = " Entities " ) {
QStringList mode = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
2012-12-13 17:41:29 +06:00
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 ;
2009-02-17 10:27:49 +05:00
}
}
2012-12-13 17:41:29 +06:00
aSmeshActor - > SetEntityMode ( aEntityMode ) ;
2009-02-17 10:27:49 +05:00
}
// Colors
else if ( paramNameStr = = " Colors " ) {
QStringList colors = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
2012-12-13 17:41:29 +06:00
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 ;
2009-02-17 10:27:49 +05:00
}
2012-12-13 17:41:29 +06:00
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 ;
2009-02-17 10:27:49 +05:00
}
}
2012-12-13 17:41:29 +06:00
// 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 ( ) ) ;
2009-02-17 10:27:49 +05:00
}
2012-12-13 17:41:29 +06:00
// Sizes
2009-02-17 10:27:49 +05:00
else if ( paramNameStr = = " Sizes " ) {
QStringList sizes = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
2012-12-13 17:41:29 +06:00
bool bOk ;
int lineWidth = - 1 ;
int outlineWidth = - 1 ;
int elem0dSize = - 1 ;
2015-04-21 12:37:02 +05:00
//int ballSize = -1;
double ballDiameter = - 1.0 ;
2014-04-02 12:09:25 +06:00
double ballScale = - 1.0 ;
2012-12-13 17:41:29 +06:00
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 + + ;
2012-08-09 16:03:55 +06:00
}
2012-12-13 17:41:29 +06:00
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 + + ;
2012-08-09 16:03:55 +06:00
}
2012-12-13 17:41:29 +06:00
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 " ) {
2014-03-24 13:29:24 +06:00
// balls are specified by two values: size:scale, where
// - size - is a integer value specifying size
2014-04-02 12:09:25 +06:00
// - scale - is a double value specifying scale factor
if ( i + 1 > = sizes . count ( ) ) break ; // format error
2015-04-21 12:37:02 +05:00
//int v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error
double v1 = sizes [ i + 1 ] . toInt ( & bOk ) ; if ( ! bOk ) break ; // format error
2014-04-02 12:09:25 +06:00
if ( i + 2 > = sizes . count ( ) ) break ; // format error
double v2 = sizes [ i + 2 ] . toDouble ( & bOk ) ; if ( ! bOk ) break ; // format error
2015-04-21 12:37:02 +05:00
//ballSize = v1;
ballDiameter = v1 ;
2014-03-24 13:29:24 +06:00
ballScale = v2 ;
i + = 2 ;
2009-02-17 10:27:49 +05:00
}
2012-12-13 17:41:29 +06:00
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 + + ;
2009-02-17 10:27:49 +05:00
}
2012-12-13 17:41:29 +06:00
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
2015-04-21 12:37:02 +05:00
/*if ( ballSize > 0 )
aSmeshActor - > SetBallSize ( ballSize ) ; */
// ball diameter
if ( ballDiameter > 0 )
aSmeshActor - > SetBallSize ( ballDiameter ) ;
2014-03-24 13:29:24 +06:00
// ball scale
2014-04-02 12:09:25 +06:00
if ( ballScale > 0.0 )
2014-03-24 13:29:24 +06:00
aSmeshActor - > SetBallScale ( ballScale ) ;
2012-12-13 17:41:29 +06:00
// shrink factor
if ( shrinkSize > 0 )
aSmeshActor - > SetShrinkFactor ( shrinkSize ) ;
// orientation vectors
if ( orientationSize > 0 ) {
aSmeshActor - > SetFacesOrientationScale ( orientationSize ) ;
aSmeshActor - > SetFacesOrientation3DVectors ( orientation3d ) ;
2009-02-17 10:27:49 +05:00
}
}
2012-08-09 16:03:55 +06:00
// Point marker
else if ( paramNameStr = = " PointMarker " ) {
QStringList data = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
if ( data . count ( ) > = 2 ) {
bool ok = false ;
int aParam1 = data [ 1 ] . toInt ( & ok ) ;
if ( ok ) {
if ( data [ 0 ] = = " std " & & data . count ( ) = = 3 ) {
int aParam2 = data [ 2 ] . toInt ( & ok ) ;
aSmeshActor - > SetMarkerStd ( ( VTK : : MarkerType ) aParam1 , ( VTK : : MarkerScale ) aParam2 ) ;
}
else if ( data [ 0 ] = = " custom " ) {
VTK : : MarkerMap : : const_iterator markerIt = aMarkerMap . find ( aParam1 ) ;
if ( markerIt ! = aMarkerMap . end ( ) ) {
VTK : : MarkerData aMarkerData = markerIt - > second ;
aSmeshActor - > SetMarkerTexture ( aParam1 , aMarkerData . second ) ;
}
}
}
}
}
2009-02-17 10:27:49 +05:00
// Opacity
else if ( paramNameStr = = " Opacity " ) {
aSmeshActor - > SetOpacity ( val . toFloat ( ) ) ;
}
// Clipping
else if ( paramNameStr . startsWith ( " ClippingPlane " ) ) {
2012-08-09 16:03:55 +06:00
QStringList vals = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
2013-10-16 18:56:06 +06:00
// 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))
2012-08-09 16:03:55 +06:00
// 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)
2013-10-16 18:56:06 +06:00
bool anIsOldFormat = ( vals . count ( ) = = 6 | | vals . count ( ) = = 9 | | val = = " Off " ) ;
2012-08-09 16:03:55 +06:00
if ( anIsOldFormat ) {
if ( paramNameStr = = " ClippingPlane1 " | | val = = " Off " )
aSmeshActor - > RemoveAllClippingPlanes ( ) ;
if ( val ! = " Off " ) {
2009-02-17 10:27:49 +05:00
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( viewerTypStr , lst ) ;
// SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager
if ( viewIndex > = 0 & & viewIndex < lst . count ( ) ) {
SUIT_ViewManager * vman = lst . at ( viewIndex ) ;
SVTK_ViewWindow * vtkView = ( SVTK_ViewWindow * ) vman - > getActiveView ( ) ;
2012-08-09 16:03:55 +06:00
SMESHGUI_ClippingPlaneInfoList & aClippingPlaneInfoList = myClippingPlaneInfoMap [ vman ] ;
SMESH : : TActorList anActorList ;
anActorList . push_back ( aSmeshActor ) ;
2013-10-16 18:56:06 +06:00
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 ( ) ;
}
2012-08-09 16:03:55 +06:00
if ( aPlane ) {
2013-10-16 18:56:06 +06:00
if ( SMESHGUI_ClippingDlg : : AddPlane ( anActorList , aPlane ) ) {
SMESH : : ClippingPlaneInfo aClippingPlaneInfo ;
aClippingPlaneInfo . Plane = aPlane ;
aClippingPlaneInfo . ActorList = anActorList ;
aClippingPlaneInfoList . push_back ( aClippingPlaneInfo ) ;
}
2012-08-09 16:03:55 +06:00
}
}
}
}
else {
bool ok = false ;
int aPlaneId = val . toInt ( & ok ) ;
if ( ok & & aPlaneId > = 0 ) {
bool anIsDefinedPlane = false ;
TPlaneInfoList & aPlaneInfoList = aPlaneInfoMap [ viewIndex ] ;
TPlaneInfoList : : iterator anIter = aPlaneInfoList . begin ( ) ;
for ( ; anIter ! = aPlaneInfoList . end ( ) ; anIter + + ) {
TPlaneInfo & aPlaneInfo = * anIter ;
if ( aPlaneInfo . PlaneId = = aPlaneId ) {
aPlaneInfo . ActorList . push_back ( aSmeshActor ) ;
anIsDefinedPlane = true ;
break ;
}
}
if ( ! anIsDefinedPlane ) {
TPlaneInfo aPlaneInfo ;
aPlaneInfo . PlaneId = aPlaneId ;
aPlaneInfo . ActorList . push_back ( aSmeshActor ) ;
aPlaneInfo . ViewManager = vman ;
// to make the list sorted by plane id
anIter = aPlaneInfoList . begin ( ) ;
for ( ; anIter ! = aPlaneInfoList . end ( ) ; anIter + + ) {
const TPlaneInfo & aPlaneInfoRef = * anIter ;
if ( aPlaneInfoRef . PlaneId > aPlaneId )
break ;
}
aPlaneInfoList . insert ( anIter , aPlaneInfo ) ;
2009-02-17 10:27:49 +05:00
}
}
}
}
} // if (aSmeshActor)
2012-08-09 16:03:55 +06:00
} // other parameters than Visibility
2009-02-17 10:27:49 +05:00
}
} // for names/parameters iterator
} // for entries iterator
2012-08-09 16:03:55 +06:00
// take into account planes with empty list of actors referred to them
QList < SUIT_ViewManager * > aVMList ;
getApp ( ) - > viewManagers ( SVTK_Viewer : : Type ( ) , aVMList ) ;
TPlaneDataMap : : const_iterator aPlaneDataIter = aPlaneDataMap . begin ( ) ;
for ( ; aPlaneDataIter ! = aPlaneDataMap . end ( ) ; aPlaneDataIter + + ) {
int aViewId = aPlaneDataIter - > first ;
if ( aViewId > = 0 & & aViewId < aVMList . count ( ) ) {
SUIT_ViewManager * aViewManager = aVMList . at ( aViewId ) ;
const TPlaneDataList & aPlaneDataList = aPlaneDataIter - > second ;
TPlaneInfoList & aPlaneInfoList = aPlaneInfoMap [ aViewId ] ;
TPlaneDataList : : const_iterator anIter2 = aPlaneDataList . begin ( ) ;
for ( ; anIter2 ! = aPlaneDataList . end ( ) ; anIter2 + + ) {
const TPlaneData & aPlaneData = * anIter2 ;
int aPlaneId = aPlaneData . Id ;
bool anIsFound = false ;
TPlaneInfoList : : const_iterator anIter3 = aPlaneInfoList . begin ( ) ;
for ( ; anIter3 ! = aPlaneInfoList . end ( ) ; anIter3 + + ) {
const TPlaneInfo & aPlaneInfo = * anIter3 ;
if ( aPlaneInfo . PlaneId = = aPlaneId ) {
anIsFound = true ;
break ;
}
}
if ( ! anIsFound ) {
TPlaneInfo aPlaneInfo ; // ActorList field is empty
aPlaneInfo . PlaneId = aPlaneId ;
aPlaneInfo . ViewManager = aViewManager ;
// to make the list sorted by plane id
TPlaneInfoList : : iterator anIter4 = aPlaneInfoList . begin ( ) ;
for ( ; anIter4 ! = aPlaneInfoList . end ( ) ; anIter4 + + ) {
const TPlaneInfo & aPlaneInfoRef = * anIter4 ;
if ( aPlaneInfoRef . PlaneId > aPlaneId )
break ;
}
aPlaneInfoList . insert ( anIter4 , aPlaneInfo ) ;
}
}
}
}
// add clipping planes to actors according to the restored parameters
// and update the clipping plane map
TPlaneInfoMap : : const_iterator anIter1 = aPlaneInfoMap . begin ( ) ;
for ( ; anIter1 ! = aPlaneInfoMap . end ( ) ; anIter1 + + ) {
int aViewId = anIter1 - > first ;
const TPlaneInfoList & aPlaneInfoList = anIter1 - > second ;
TPlaneDataMap : : const_iterator anIter2 = aPlaneDataMap . find ( aViewId ) ;
if ( anIter2 = = aPlaneDataMap . end ( ) )
continue ;
const TPlaneDataList & aPlaneDataList = anIter2 - > second ;
TPlaneInfoList : : const_iterator anIter3 = aPlaneInfoList . begin ( ) ;
for ( ; anIter3 ! = aPlaneInfoList . end ( ) ; anIter3 + + ) {
const TPlaneInfo & aPlaneInfo = * anIter3 ;
int aPlaneId = aPlaneInfo . PlaneId ;
const TActorList & anActorList = aPlaneInfo . ActorList ;
SUIT_ViewManager * aViewManager = aPlaneInfo . ViewManager ;
if ( ! aViewManager )
continue ;
SVTK_ViewWindow * aViewWindow = dynamic_cast < SVTK_ViewWindow * > ( aViewManager - > getActiveView ( ) ) ;
if ( ! aViewWindow )
continue ;
SMESHGUI_ClippingPlaneInfoList & aClippingPlaneInfoList = myClippingPlaneInfoMap [ aViewManager ] ;
TPlaneDataList : : const_iterator anIter4 = aPlaneDataList . begin ( ) ;
for ( ; anIter4 ! = aPlaneDataList . end ( ) ; anIter4 + + ) {
const TPlaneData & aPlaneData = * anIter4 ;
if ( aPlaneData . Id = = aPlaneId ) {
2013-10-16 18:56:06 +06:00
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 ] ;
}
2012-08-09 16:03:55 +06:00
if ( aPlane ) {
2013-10-16 18:56:06 +06:00
if ( SMESHGUI_ClippingDlg : : AddPlane ( anActorList , aPlane ) ) {
SMESH : : ClippingPlaneInfo aClippingPlaneInfo ;
aClippingPlaneInfo . Plane = aPlane ;
aClippingPlaneInfo . ActorList = anActorList ;
aClippingPlaneInfoList . push_back ( aClippingPlaneInfo ) ;
}
2012-08-09 16:03:55 +06:00
}
break ;
}
}
2013-10-16 18:56:06 +06:00
2012-08-09 16:03:55 +06:00
}
}
2013-10-16 18:56:06 +06:00
2012-08-09 16:03:55 +06:00
2009-02-17 10:27:49 +05:00
// update all VTK views
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( lst ) ;
for ( QList < SUIT_ViewManager * > : : Iterator it = lst . begin ( ) ; it ! = lst . end ( ) ; it + + ) {
SUIT_ViewModel * vmodel = ( * it ) - > getViewModel ( ) ;
if ( vmodel & & vmodel - > getType ( ) = = SVTK_Viewer : : Type ( ) ) {
SVTK_ViewWindow * vtkView = ( SVTK_ViewWindow * ) ( * it ) - > getActiveView ( ) ;
2013-10-16 18:56:06 +06:00
// 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 ) )
2013-11-13 20:39:43 +06:00
anActor - > SetOpenGLClippingPlane ( ) ;
2013-10-16 18:56:06 +06:00
2009-02-17 10:27:49 +05:00
vtkView - > getRenderer ( ) - > ResetCameraClippingRange ( ) ;
vtkView - > Repaint ( ) ;
}
}
}
/*!
\ brief Adds preferences for dfont of VTK viewer
\ param label label
\ param pIf group identifier
\ param param parameter
\ return identifier of preferences
*/
2013-02-12 20:37:44 +06:00
int SMESHGUI : : addVtkFontPref ( const QString & label , const int pId , const QString & param , const bool needSize )
2009-02-17 10:27:49 +05:00
{
2012-08-09 16:03:55 +06:00
int tfont = addPreference ( label , pId , LightApp_Preferences : : Font , " SMESH " , param ) ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( tfont , " mode " , QtxFontEdit : : Custom ) ;
QStringList fam ;
fam . append ( tr ( " SMESH_FONT_ARIAL " ) ) ;
fam . append ( tr ( " SMESH_FONT_COURIER " ) ) ;
fam . append ( tr ( " SMESH_FONT_TIMES " ) ) ;
setPreferenceProperty ( tfont , " fonts " , fam ) ;
int f = QtxFontEdit : : Family | QtxFontEdit : : Bold | QtxFontEdit : : Italic | QtxFontEdit : : Shadow ;
2013-02-12 20:37:44 +06:00
if ( needSize ) f = f | QtxFontEdit : : Size ;
2009-02-17 10:27:49 +05:00
setPreferenceProperty ( tfont , " features " , f ) ;
return tfont ;
}
2012-08-09 16:03:55 +06:00
/*!
\ brief Actions after hypothesis edition
Updates object browser after hypothesis edition
*/
void SMESHGUI : : onHypothesisEdit ( int result )
{
if ( result = = 1 )
SMESHGUI : : Modified ( ) ;
updateObjBrowser ( true ) ;
}
/*!
\ brief Signal handler closing ( SUIT_ViewWindow * ) of a view
\ param pview view being closed
*/
void SMESHGUI : : onViewClosed ( SUIT_ViewWindow * pview ) {
# ifndef DISABLE_PLOT2DVIEWER
//Crear all Plot2d Viewers if need.
SMESH : : ClearPlot2Viewers ( pview ) ;
# endif
}
void SMESHGUI : : message ( const QString & msg )
{
// dispatch message
QStringList data = msg . split ( " / " ) ;
if ( data . count ( ) > 0 ) {
if ( data . first ( ) = = " mesh_loading " ) {
// get mesh entry
QString entry = data . count ( ) > 1 ? data [ 1 ] : QString ( ) ;
if ( entry . isEmpty ( ) )
return ;
// get study
_PTR ( Study ) study = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) - > studyDS ( ) ;
// get mesh name
_PTR ( SObject ) obj = study - > FindObjectID ( entry . toLatin1 ( ) . constData ( ) ) ;
QString name ;
if ( obj )
2014-12-18 21:24:03 +05:00
name = SMESH : : fromUtf8 ( obj - > GetName ( ) ) ;
2012-08-09 16:03:55 +06:00
if ( name . isEmpty ( ) )
return ;
if ( data . last ( ) = = " stop " )
application ( ) - > putInfo ( tr ( " MESH_LOADING_MSG_FINISHED " ) . arg ( name ) ) ;
else
application ( ) - > putInfo ( tr ( " MESH_LOADING_MSG " ) . arg ( name ) ) ;
QApplication : : processEvents ( ) ;
}
}
}
/*!
\ brief Connects or disconnects signals about activating and cloning view on the module slots
\ param pview view which is connected / disconnected
*/
void SMESHGUI : : connectView ( const SUIT_ViewWindow * pview ) {
if ( ! pview )
return ;
SUIT_ViewManager * viewMgr = pview - > getViewManager ( ) ;
if ( viewMgr ) {
disconnect ( viewMgr , SIGNAL ( deleteView ( SUIT_ViewWindow * ) ) ,
this , SLOT ( onViewClosed ( SUIT_ViewWindow * ) ) ) ;
connect ( viewMgr , SIGNAL ( deleteView ( SUIT_ViewWindow * ) ) ,
this , SLOT ( onViewClosed ( SUIT_ViewWindow * ) ) ) ;
}
}
/*!
\ brief Return \ c true if object can be renamed
*/
bool SMESHGUI : : renameAllowed ( const QString & entry ) const {
SalomeApp_Application * anApp = dynamic_cast < SalomeApp_Application * > ( application ( ) ) ;
if ( ! anApp )
return false ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( anApp - > activeStudy ( ) ) ;
if ( ! appStudy )
return false ;
SalomeApp_DataObject * obj = dynamic_cast < SalomeApp_DataObject * > ( appStudy - > findObjectByEntry ( entry ) ) ;
if ( ! obj )
return false ;
if ( appStudy - > isComponent ( entry ) | | obj - > isReference ( ) )
return false ;
// check type to prevent renaming of inappropriate objects
int aType = SMESHGUI_Selection : : type ( qPrintable ( entry ) , SMESH : : GetActiveStudyDocument ( ) ) ;
2012-12-13 17:41:29 +06:00
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 )
2012-08-09 16:03:55 +06:00
return true ;
return false ;
}
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
/*!
Rename object by entry .
\ param entry entry of the object
\ param name new name of the object
\ brief Return \ c true if rename operation finished successfully , \ c false otherwise .
*/
bool SMESHGUI : : renameObject ( const QString & entry , const QString & name ) {
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
SalomeApp_Application * anApp = dynamic_cast < SalomeApp_Application * > ( application ( ) ) ;
if ( ! anApp )
return false ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( anApp - > activeStudy ( ) ) ;
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
if ( ! appStudy )
return false ;
_PTR ( Study ) aStudy = appStudy - > studyDS ( ) ;
if ( ! aStudy )
return false ;
bool aLocked = ( _PTR ( AttributeStudyProperties ) ( appStudy - > studyDS ( ) - > GetProperties ( ) ) ) - > IsLocked ( ) ;
if ( aLocked ) {
SUIT_MessageBox : : warning ( anApp - > desktop ( ) , QObject : : tr ( " WRN_WARNING " ) , QObject : : tr ( " WRN_STUDY_LOCKED " ) ) ;
return false ;
}
2009-02-17 10:27:49 +05:00
2012-08-09 16:03:55 +06:00
_PTR ( SObject ) obj = aStudy - > FindObjectID ( qPrintable ( entry ) ) ;
_PTR ( GenericAttribute ) anAttr ;
_PTR ( AttributeName ) aName ;
if ( obj ) {
if ( obj - > FindAttribute ( anAttr , " AttributeName " ) ) {
aName = anAttr ;
// check type to prevent renaming of inappropriate objects
int aType = SMESHGUI_Selection : : type ( qPrintable ( entry ) , SMESH : : GetActiveStudyDocument ( ) ) ;
2012-12-13 17:41:29 +06:00
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 ) {
2012-08-09 16:03:55 +06:00
if ( ! name . isEmpty ( ) ) {
SMESHGUI : : GetSMESHGen ( ) - > SetName ( obj - > GetIOR ( ) . c_str ( ) , qPrintable ( name ) ) ;
// update name of group object and its actor
Handle ( SALOME_InteractiveObject ) IObject =
new SALOME_InteractiveObject ( qPrintable ( entry ) , " SMESH " , qPrintable ( name ) ) ;
SMESH : : SMESH_GroupBase_var aGroupObject = SMESH : : IObjectToInterface < SMESH : : SMESH_GroupBase > ( IObject ) ;
if ( ! aGroupObject - > _is_nil ( ) ) {
aGroupObject - > SetName ( qPrintable ( name ) ) ;
if ( SMESH_Actor * anActor = SMESH : : FindActorByEntry ( qPrintable ( entry ) ) )
anActor - > setName ( qPrintable ( name ) ) ;
}
return true ;
}
}
}
}
return false ;
}
2013-05-21 20:57:30 +06:00
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 ) ) ;
}
}
}
}
2014-10-31 18:43:41 +05:00
static int currentColor = randomize ( colors . size ( ) ) ;
2013-05-21 20:57:30 +06:00
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 ;
}