-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Author : Nicolas REJNERI, Open CASCADE S.A.S.
#include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
+#ifdef HAVE_FINITE
+#undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
+#endif
#include "Python.h"
// SMESH includes
#include "SMESHGUI.h"
#include "SMESHGUI_Hypotheses.h"
#include "SMESHGUI_Make2DFrom3DOp.h"
#include "SMESHGUI_MakeNodeAtPointDlg.h"
-//#include "SMESHGUI_MeshInfosDlg.h"
#include "SMESHGUI_Measurements.h"
#include "SMESHGUI_MeshInfo.h"
#include "SMESHGUI_MeshOp.h"
#include "SMESHGUI_SewingDlg.h"
#include "SMESHGUI_SingleEditDlg.h"
#include "SMESHGUI_SmoothingDlg.h"
-//#include "SMESHGUI_StandardMeshInfosDlg.h"
#include "SMESHGUI_SymmetryDlg.h"
#include "SMESHGUI_TranslationDlg.h"
#include "SMESHGUI_ScaleDlg.h"
#include "SMESHGUI_TransparencyDlg.h"
-//#include "SMESHGUI_WhatIsDlg.h"
#include "SMESHGUI_DuplicateNodesDlg.h"
#include "SMESHGUI_CopyMeshDlg.h"
+#include "SMESHGUI_ReorientFacesDlg.h"
#include "SMESHGUI_Utils.h"
#include "SMESHGUI_MeshUtils.h"
#include <SalomeApp_Study.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_CheckFileDlg.h>
+#include <SalomeApp_DataObject.h>
#include <LightApp_DataOwner.h>
#include <LightApp_Preferences.h>
// Qt includes
// #define INCLUDE_MENUITEM_DEF // VSR commented ????????
+#include <QApplication>
#include <QMenu>
#include <QTextStream>
else if ( theCommandID == 116 ) {
filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
}
+ else if ( theCommandID == 117 ) {
+ filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
+ filter.append( QObject::tr( "All files (*)" ) );
+ }
QString anInitialPath = "";
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
}
break;
}
+ case 117:
+ {
+ // SAUV format
+ SMESH::DriverMED_ReadStatus res;
+ aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res );
+ if ( res != SMESH::DRS_OK ) {
+ errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
+ arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
+ }
+ break;
+ }
}
}
catch ( const SALOME::SALOME_Exception& S_ex ) {
const bool isUNV = ( theCommandID == 123 || theCommandID == 126 );
const bool isSTL = ( theCommandID == 140 || theCommandID == 141 );
const bool isCGNS= ( theCommandID == 142 || theCommandID == 143 );
+ const bool isSAUV= ( theCommandID == 144 || theCommandID == 145 );
// actually, the following condition can't be met (added for insurance)
if( selected.Extent() == 0 ||
SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh();
QString aMeshName = (*aMeshIter).second;
- if ( isMED || isCGNS )
+ if ( isMED || isCGNS || isSAUV )
{
// check for equal group names within each mesh
for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
}
}
}
+
+ // 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_Quad_Quadrangle );
+ notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Quadrangle );
+ notSupportedElemTypes.push_back( SMESH::Entity_Polygon );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon );
+ notSupportedElemTypes.push_back( SMESH::Entity_Tetra );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Tetra );
+ notSupportedElemTypes.push_back( SMESH::Entity_Pyramid );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Pyramid );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Hexa );
+ notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa );
+ notSupportedElemTypes.push_back( SMESH::Entity_Penta );
+ notSupportedElemTypes.push_back( SMESH::Entity_Quad_Penta );
+ notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism );
+ notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra );
+ notSupportedElemTypes.push_back( SMESH::Entity_0D );
+ notSupportedElemTypes.push_back( SMESH::Entity_Ball );
+ }
else if ( isUNV )
{
- // warn the user about presence of not supported elements
+ 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 );
+ }
+ else if ( isSAUV )
+ {
+ format = "SAUV";
+ notSupportedElemTypes.push_back( SMESH::Entity_Ball );
+ 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 );
+ }
+ if ( ! notSupportedElemTypes.empty() )
+ {
SMESH::long_array_var nbElems = aMeshOrGroup->GetMeshInfo();
- int nbPyramids = nbElems[ SMESH::Entity_Pyramid ] + nbElems[ SMESH::Entity_Quad_Pyramid ];
- if ( nbPyramids > 0 ) {
- int aRet = SUIT_MessageBox::warning
- (SMESHGUI::desktop(),
- QObject::tr("SMESH_WRN_WARNING"),
- QObject::tr("SMESH_EXPORT_UNV").arg(aMeshName),
- QObject::tr("SMESH_BUT_YES"),
- QObject::tr("SMESH_BUT_NO"), 0, 1);
- if (aRet != 0)
- return;
+ for ( size_t iType = 0; iType < notSupportedElemTypes.size(); ++iType )
+ if ( nbElems[ notSupportedElemTypes[ iType ]] > 0 )
+ presentNotSupported.push_back( notSupportedElemTypes[ iType ]);
+ }
+ if ( !presentNotSupported.empty() )
+ {
+ QString typeNames;
+ const char* typeMsg[SMESH::Entity_Last] = { "SMESH_NODES",
+ "SMESH_ELEMS0D","SMESH_EDGES","SMESH_QUADRATIC_EDGES","SMESH_TRIANGLES",
+ "SMESH_QUADRATIC_TRIANGLES","SMESH_QUADRANGLES","SMESH_QUADRATIC_QUADRANGLES",
+ "SMESH_BIQUADRATIC_QUADRANGLES","SMESH_POLYGONS","SMESH_QUADRATIC_POLYGONS",
+ "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;
}
// Get parameters of export operation
}
delete fd;
}
- else if ( isMED ) // Export to MED
+ else if ( isMED || isSAUV ) // Export to MED or SAUV
{
QMap<QString, SMESH::MED_VERSION> aFilterMap;
//QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
- 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 );
+ if ( isMED ) {
+ QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
+ //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
+ aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
+ }
+ else { // isSAUV
+ aFilterMap.insert("All files (*)", SMESH::MED_V2_1 );
+ aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 );
+ aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 );
+ }
QStringList filters;
QString aDefaultFilter;
// bool Renumber = false;
// // PAL 14172 : Check of we have to renumber or not from the preferences before export
// if (resMgr)
-// Renumber= resMgr->booleanValue("SMESH","renumbering");
+// Renumber= resMgr->booleanValue("renumbering");
// if (Renumber){
// SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
// aMeshEditor->RenumberNodes();
aFormat, toOverwrite && aMeshIndex == 0 );
}
}
+ else if ( isSAUV )
+ {
+ for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ )
+ {
+ SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
+ if( !aMeshItem->_is_nil() )
+ aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups );
+ }
+ }
else if ( isDAT )
{
if ( aMeshOrGroup->_is_equivalent( aMesh ))
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
unsigned int aMode = anActor->GetEntityMode();
switch(theCommandID){
+ case 222:
+ InverseEntityMode(aMode,SMESH_Actor::eBallElem);
+ break;
case 216:
InverseEntityMode(aMode,SMESH_Actor::e0DElements);
break;
_PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
if (aGroupSObject) {
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) {
- if( aGroupObject->GetType() == SMESH::NODE )
- anActor->SetNodeColor( aColor.R, aColor.G, aColor.B );
- else if( aGroupObject->GetType() == SMESH::EDGE )
- anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B );
- else if( aGroupObject->GetType() == SMESH::ELEM0D )
- anActor->Set0DColor( aColor.R, aColor.G, aColor.B );
- else {
- QColor c;
- int delta;
- SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
+ 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;
+ default:
+ QColor c;
+ int delta;
+ SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta );
- }
+ }
}
}
}
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 SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap){
+ void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap)
+ {
SALOME_ListIO selected;
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
if( !app )
return;
}
case 1132:{
- QColor c, e, b, n, c0D, o, outl, selection, preselection;
- int delta;
- int size0D = 0;
+ QColor c, e, b, n, c0D, cBall, o, outl, selection, preselection;
+ int delta;
+ int size0D = 0, ballSize = 0;
int Edgewidth = 0;
vtkFloatingPointType Shrink = 0.0;
vtkFloatingPointType faces_orientation_scale = 0.0;
c2 = int (color0D[2] * 255);
c0D.setRgb(c0, c1, c2);
+ vtkFloatingPointType ballcolor[3];
+ anActor->GetBallColor(ballcolor[0], ballcolor[1], ballcolor[2]);
+ c0 = int (ballcolor[0] * 255);
+ c1 = int (ballcolor[1] * 255);
+ c2 = int (ballcolor[2] * 255);
+ cBall.setRgb(c0, c1, c2);
+
vtkFloatingPointType outlineColor[3];
anActor->GetOutlineColor(outlineColor[0], outlineColor[1], outlineColor[2]);
c0 = int (outlineColor[0] * 255);
size0D = (int)anActor->Get0DSize();
if(size0D == 0)
size0D = 1;
+ ballSize = (int)anActor->GetBallSize();
+ if(ballSize == 0)
+ ballSize = 1;
Edgewidth = (int)anActor->GetLineWidth();
if(Edgewidth == 0)
Edgewidth = 1;
SMESHGUI_Preferences_ColorDlg *aDlg =
new SMESHGUI_Preferences_ColorDlg( SMESHGUI::GetSMESHGUI() );
+ aDlg->SetBooleanValue(1, faces_orientation_3dvectors);
aDlg->SetColor(1, c);
aDlg->SetColor(2, e);
aDlg->SetColor(3, n);
aDlg->SetColor(4, outl);
- aDlg->SetDeltaBrightness(delta);
aDlg->SetColor(5, c0D);
- aDlg->SetColor(6, o);
+ aDlg->SetColor(6, cBall);
+ aDlg->SetColor(7, o);
+ aDlg->SetColor(8, selection);
+ aDlg->SetColor(9, preselection);
+ aDlg->SetDeltaBrightness(delta);
+ aDlg->SetDoubleValue(1, faces_orientation_scale);
aDlg->SetIntValue(1, Edgewidth);
aDlg->SetIntValue(2, int(Shrink*100.));
aDlg->SetIntValue(3, size0D);
- aDlg->SetDoubleValue(1, faces_orientation_scale);
- aDlg->SetBooleanValue(1, faces_orientation_3dvectors);
- aDlg->SetColor(7, selection);
- aDlg->SetColor(8, preselection);
+ aDlg->SetIntValue(4, ballSize);
aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] );
aDlg->setCustomMarker( aMarkerTextureCurrent );
if(aDlg->exec()){
- QColor color = aDlg->GetColor(1);
- QColor edgecolor = aDlg->GetColor(2);
- QColor nodecolor = aDlg->GetColor(3);
- QColor outlinecolor = aDlg->GetColor(4);
- QColor color0D = aDlg->GetColor(5);
- QColor faces_orientation_color = aDlg->GetColor(6);
- QColor selectioncolor = aDlg->GetColor(7);
- QColor preSelectioncolor = aDlg->GetColor(8);
- int delta = aDlg->GetDeltaBrightness();
+ QColor color = aDlg->GetColor(1);
+ QColor edgecolor = aDlg->GetColor(2);
+ QColor nodecolor = aDlg->GetColor(3);
+ QColor outlinecolor = aDlg->GetColor(4);
+ QColor color0D = aDlg->GetColor(5);
+ QColor ballcolor = aDlg->GetColor(6);
+ QColor faces_orientation_color = aDlg->GetColor(7);
+ QColor selectioncolor = aDlg->GetColor(8);
+ QColor preSelectioncolor = aDlg->GetColor(9);
+ int delta = aDlg->GetDeltaBrightness();
/* Point marker */
theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap();
anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255.,
vtkFloatingPointType (color.green()) / 255.,
vtkFloatingPointType (color.blue()) / 255.,
- delta);
+ delta);
/* edge color */
anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255.,
vtkFloatingPointType (edgecolor.green()) / 255.,
vtkFloatingPointType (edgecolor.blue()) / 255.);
- /* edge outline */
+ /* edge outline */
anActor->SetOutlineColor(vtkFloatingPointType (outlinecolor.red()) / 255.,
- vtkFloatingPointType (outlinecolor.green()) / 255.,
- vtkFloatingPointType (outlinecolor.blue()) / 255.);
+ vtkFloatingPointType (outlinecolor.green()) / 255.,
+ vtkFloatingPointType (outlinecolor.blue()) / 255.);
- /* selection */
+ /* selection */
anActor->SetHighlightColor(vtkFloatingPointType (selectioncolor.red()) / 255.,
- vtkFloatingPointType (selectioncolor.green()) / 255.,
- vtkFloatingPointType (selectioncolor.blue()) / 255.);
- /* pre-selection */
+ vtkFloatingPointType (selectioncolor.green()) / 255.,
+ vtkFloatingPointType (selectioncolor.blue()) / 255.);
+ /* pre-selection */
anActor->SetPreHighlightColor(vtkFloatingPointType (preSelectioncolor.red()) / 255.,
- vtkFloatingPointType (preSelectioncolor.green()) / 255.,
- vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
-
+ vtkFloatingPointType (preSelectioncolor.green()) / 255.,
+ vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
+
/* Shrink factor and size edges */
anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.);
vtkFloatingPointType (color0D.blue()) / 255.);
anActor->Set0DSize(aDlg->GetIntValue(3));
+ /* Ball elements */
+ anActor->SetBallColor(vtkFloatingPointType (ballcolor.red()) / 255.,
+ vtkFloatingPointType (ballcolor.green()) / 255.,
+ vtkFloatingPointType (ballcolor.blue()) / 255.);
+ anActor->SetBallSize(aDlg->GetIntValue(4));
+
/* Faces orientation */
vtkFloatingPointType c[3] = {vtkFloatingPointType(faces_orientation_color.redF()),
vtkFloatingPointType(faces_orientation_color.greenF()),
Handle(SALOME_InteractiveObject) anIO = selected.First();
if(!anIO.IsNull()){
SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
- if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())){
+ if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) {
switch ( theCommandID ){
case 6001:
aControl = SMESH_Actor::eLength;
case 6027:
aControl = SMESH_Actor::eOverConstrainedFace;
break;
+ case 6028:
+ aControl = SMESH_Actor::eCoincidentNodes;
+ break;
+ case 6029:
+ aControl = SMESH_Actor::eCoincidentElems1D;
+ break;
+ case 6030:
+ aControl = SMESH_Actor:: eCoincidentElems2D;
+ break;
+ case 6031:
+ aControl = SMESH_Actor::eCoincidentElems3D;
+ break;
}
+
anActor->SetControlMode(aControl);
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
SMESH::RepaintCurrentView();
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
- SALOME_ListIteratorOfListIO It(selected);
-
- aStudyBuilder->NewCommand(); // There is a transaction
- 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
-
- // put the whole hierarchy of sub-objects of the selected SO into a list and
- // then treat them all starting from the deepest objects (at list back)
-
- std::list< _PTR(SObject) > listSO;
- listSO.push_back( aSO );
- std::list< _PTR(SObject) >::iterator itSO = listSO.begin();
- for ( ; itSO != listSO.end(); ++itSO ) {
- _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
- for (it->InitEx(false); it->More(); it->Next())
- listSO.push_back( it->Value() );
- }
-
- // treat SO's in the list starting from the back
-
- std::list< _PTR(SObject) >::reverse_iterator ritSO = listSO.rbegin();
- for ( ; ritSO != listSO.rend(); ++ritSO ) {
- _PTR(SObject) SO = *ritSO;
- if ( !SO ) continue;
- std::string anEntry = SO->GetID();
-
- /** Erase graphical object **/
- if(SO->FindAttribute(anAttr, "AttributeIOR")){
- ViewManagerList aViewMenegers = anApp->viewManagers();
- ViewManagerList::const_iterator it = aViewMenegers.begin();
- for( ; it != aViewMenegers.end(); it++) {
- SUIT_ViewManager* vm = *it;
- int nbSf = vm ? vm->getViewsCount() : 0;
- if(vm) {
- QVector<SUIT_ViewWindow*> aViews = vm->getViews();
- for(int i = 0; i < nbSf; i++){
- SUIT_ViewWindow *sf = aViews[i];
- if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
- SMESH::RemoveActor(sf,anActor);
- }
- }
+ // 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.begin();
+ for ( ; itSO != listSO.end(); ++itSO ) {
+ _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
+ for (it->InitEx(false); it->More(); it->Next())
+ listSO.push_back( it->Value() );
+ }
+ }
+ }
+ // 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
+ }
+ }
+ }
+
+ // 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();
+
+ /** Erase graphical object **/
+ if(SO->FindAttribute(anAttr, "AttributeIOR")){
+ ViewManagerList aViewMenegers = anApp->viewManagers();
+ ViewManagerList::const_iterator it = aViewMenegers.begin();
+ for( ; it != aViewMenegers.end(); it++) {
+ SUIT_ViewManager* vm = *it;
+ int nbSf = vm ? vm->getViewsCount() : 0;
+ if(vm) {
+ QVector<SUIT_ViewWindow*> aViews = vm->getViews();
+ for(int i = 0; i < nbSf; i++){
+ SUIT_ViewWindow *sf = aViews[i];
+ if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
+ SMESH::RemoveActor(sf,anActor);
}
}
}
- /** 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 );
-
- _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh);
- if (aMeshSO)
- SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0);
- }
- else {
- 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 );
- }
- 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();
- }
- }
- } /* listSO back loop */
- } /* IObject->hasEntry() */
- } /* more/next */
-
+ }
+ }
+ /** 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 );
+
+ _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 );
+ }
+ 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();
+ }
+ }
+ } /* listSO back loop */
+
aStudyBuilder->CommitCommand();
/* Clear any previous selection */
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
}
-//}
+//} namespace
extern "C" {
SMESHGUI_EXPORT CAM_Module* createModule()
myComponentSMESH->SetBoundaryBoxSegmentation( nbSeg );
nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg );
+
+ const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" };
+ for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i )
+ if ( aResourceMgr->hasValue( "SMESH", options[i] ))
+ {
+ QString val = aResourceMgr->stringValue( "SMESH", options[i] );
+ myComponentSMESH->SetOption( options[i], val.toLatin1().constData() );
+ }
}
myActiveDialogBox = 0;
case 116:
case 115:
+ case 117:
case 113:
case 112:
case 111: // IMPORT
case 141:
case 142:
case 143:
+ case 144:
+ case 145:
{
::ExportMeshToFile(theCommandID);
break;
case 1134: // Clipping
case 1133: // Tranparency
- case 1132: // Colors / Size
+ case 1132: // Display preferences (colors, shrink size, line width, ...)
// Display Mode
case 215: // Nodes
case 218: // Faces
case 219: // Volumes
case 220: // All Entity
+ case 222: // Balls
::SetDisplayEntity(theCommandID);
break;
break;
}
- case 701: // COMPUTE MESH
- case 711: // PRECOMPUTE MESH
- case 712: // EVALUATE MESH
- case 713: // MESH ORDER
- {
- if (checkLock(aStudy)) break;
- startOperation( theCommandID );
- }
- break;
-
+ case 701: // COMPUTE MESH
+ case 711: // PRECOMPUTE MESH
+ case 712: // EVALUATE MESH
+ case 713: // MESH ORDER
case 702: // Create mesh
case 703: // Create sub-mesh
case 704: // Edit mesh/sub-mesh
break;
}
case 417: // Convert mesh to quadratic
- {
- startOperation( 417 );
- /* if (checkLock(aStudy)) break;
- if (vtkwnd) {
- EmitSignalDeactivateDialog();
- new SMESHGUI_ConvToQuadDlg();
- } else {
- SUIT_MessageBox::warning(desktop(),
- tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"));
- }*/
- break;
- }
case 418: // create 2D mesh from 3D
+ case 420: // Reorient faces
+ case 806: // CREATE GEO GROUP
{
- startOperation( 418 );
- break;
- }
- case 806: // CREATE GEO GROUP
- {
- startOperation( 806 );
+ startOperation( theCommandID );
break;
}
case 801: // CREATE GROUP
}
break;
}
- /*
- case 902: // STANDARD MESH INFOS
- {
- EmitSignalDeactivateDialog();
- LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
- SALOME_ListIO selected;
- if( aSel )
- aSel->selectedObjects( selected );
-
- if ( selected.Extent() > 1 ) { // a dlg for each IO
- SALOME_ListIO IOs;
- SALOME_ListIteratorOfListIO It (selected);
- for ( ; It.More(); It.Next() ) {
- IOs.Clear();
- IOs.Append( It.Value() );
- aSel->setSelectedObjects( IOs );
- ( new SMESHGUI_StandardMeshInfosDlg( this ) )->show();
- }
- // restore selection
- aSel->setSelectedObjects( selected );
- }
- else
- ( new SMESHGUI_StandardMeshInfosDlg( this ) )->show();
- break;
- }
- case 903: // WHAT IS
- {
- EmitSignalDeactivateDialog();
- ( new SMESHGUI_WhatIsDlg( this ) )->show();
- break;
- }
- */
case 904: // FIND ELEM
{
break;
}
+ case 4008: // BALL
case 4009: // ELEM0D
- case 4010: // GEOM::EDGE
+ case 4010: // EDGE
case 4021: // TRIANGLE
case 4022: // QUAD
case 4023: // POLYGON
case 4031: // TETRA
case 4032: // HEXA
+ case 4133: // PENTA
+ case 4134: // PYRAMID
+ case 4135: // OCTA12
{
if(checkLock(aStudy)) break;
if ( vtkwnd ) {
EmitSignalDeactivateDialog();
- SMDSAbs_ElementType type = SMDSAbs_Edge;
- int nbNodes = 2;
+ SMDSAbs_EntityType type = SMDSEntity_Edge;
switch (theCommandID) {
- case 4009: // ELEM0D
- type = SMDSAbs_0DElement; nbNodes = 1; break;
- case 4021: // TRIANGLE
- type = SMDSAbs_Face; nbNodes = 3; break;
- case 4022: // QUAD
- type = SMDSAbs_Face; nbNodes = 4; break;
- case 4031: // TETRA
- type = SMDSAbs_Volume; nbNodes = 4; break;
- case 4023: // POLYGON
- type = SMDSAbs_Face; nbNodes = 5; break; // 5 - identificator for POLYGON
- case 4032: // HEXA
- type = SMDSAbs_Volume; nbNodes = 8; break;
- case 4033: // POLYHEDRE
- type = SMDSAbs_Volume; nbNodes = 9; break; // 9 - identificator for POLYHEDRE
+ case 4008: type = SMDSEntity_Ball; break;
+ case 4009: type = SMDSEntity_0D; break;
+ case 4021: type = SMDSEntity_Triangle; break;
+ case 4022: type = SMDSEntity_Quadrangle; break;
+ case 4031: type = SMDSEntity_Tetra; break;
+ case 4023: type = SMDSEntity_Polygon; break;
+ case 4032: type = SMDSEntity_Hexa; break;
+ case 4133: type = SMDSEntity_Penta; break;
+ case 4134: type = SMDSEntity_Pyramid; break;
+ case 4135: type = SMDSEntity_Hexagonal_Prism; break;
default:;
}
- ( new SMESHGUI_AddMeshElementDlg( this, type, nbNodes ) )->show();
+ ( new SMESHGUI_AddMeshElementDlg( this, type ) )->show();
}
else {
SUIT_MessageBox::warning(desktop(),
case 4034: // QUADRATIC EDGE
case 4035: // QUADRATIC TRIANGLE
case 4036: // QUADRATIC QUADRANGLE
+ case 4136: // BIQUADRATIC QUADRANGLE
case 4037: // QUADRATIC TETRAHEDRON
case 4038: // QUADRATIC PYRAMID
case 4039: // QUADRATIC PENTAHEDRON
case 4040: // QUADRATIC HEXAHEDRON
+ case 4140: // TRIQUADRATIC HEXAHEDRON
{
if(checkLock(aStudy)) break;
if ( vtkwnd ) {
EmitSignalDeactivateDialog();
- int type;
+ SMDSAbs_EntityType type;
switch (theCommandID) {
case 4034:
- type = QUAD_EDGE; break;
+ type = SMDSEntity_Quad_Edge; break;
case 4035:
- type = QUAD_TRIANGLE; break;
+ type = SMDSEntity_Quad_Triangle; break;
case 4036:
- type = QUAD_QUADRANGLE; break;
+ type = SMDSEntity_Quad_Quadrangle; break;
+ case 4136:
+ type = SMDSEntity_BiQuad_Quadrangle; break;
case 4037:
- type = QUAD_TETRAHEDRON; break;
+ type = SMDSEntity_Quad_Tetra; break;
case 4038:
- type = QUAD_PYRAMID; break;
+ type = SMDSEntity_Quad_Pyramid; break;
case 4039:
- type = QUAD_PENTAHEDRON; break;
+ type = SMDSEntity_Quad_Penta; break;
case 4040:
- type = QUAD_HEXAHEDRON;
+ type = SMDSEntity_Quad_Hexa;
+ case 4140:
+ type = SMDSEntity_TriQuad_Hexa;
break;
default:;
}
}
catch (const SALOME::SALOME_Exception& S_ex) {
SalomeApp_Tools::QtCatchCorbaException(S_ex);
- }
+ }
catch (...) {
}
}
case 6025:
case 6026:
case 6027:
+ case 6028:
+ case 6029:
+ case 6030:
+ case 6031:
if ( vtkwnd ) {
LightApp_SelectionMgr* mgr = selectionMgr();
// function : createSMESHAction
// purpose :
//=======================================================================
-void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id,
+void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id,
const int key, const bool toggle, const QString& shortcutAction )
{
QIcon icon;
menu = tr( QString( "MEN_%1" ).arg( po_id ).toLatin1().data() ),
status_bar = tr( QString( "STB_%1" ).arg( po_id ).toLatin1().data() );
- createAction( id, tooltip, icon, menu, status_bar, key, parent,
+ createAction( id, tooltip, icon, menu, status_bar, key, parent,
toggle, this, SLOT( OnGUIEvent() ), shortcutAction );
}
// ----- create actions --------------
- createSMESHAction( 111, "DAT", "", (Qt::CTRL+Qt::Key_B) );
- createSMESHAction( 112, "UNV", "", (Qt::CTRL+Qt::Key_U) );
- createSMESHAction( 113, "MED", "", (Qt::CTRL+Qt::Key_M) );
+ //createSMESHAction( 111, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) );
+ createSMESHAction( 112, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_U) );
+ createSMESHAction( 113, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) );
createSMESHAction( 114, "NUM" );
- createSMESHAction( 115, "STL" );
- createSMESHAction( 116, "CGNS" );
+ createSMESHAction( 115, "IMPORT_STL" );
+ createSMESHAction( 116, "IMPORT_CGNS" );
+ createSMESHAction( 117, "IMPORT_SAUV" );
createSMESHAction( 121, "DAT" );
createSMESHAction( 122, "MED" );
createSMESHAction( 123, "UNV" );
createSMESHAction( 140, "STL" );
createSMESHAction( 142, "CGNS" );
+ createSMESHAction( 144, "SAUV" );
createSMESHAction( 124, "EXPORT_DAT" );
createSMESHAction( 125, "EXPORT_MED" );
createSMESHAction( 126, "EXPORT_UNV" );
createSMESHAction( 141, "EXPORT_STL" );
createSMESHAction( 143, "EXPORT_CGNS" );
+ createSMESHAction( 145, "EXPORT_SAUV" );
createSMESHAction( 150, "FILE_INFO" );
createSMESHAction( 33, "DELETE", "ICON_DELETE", Qt::Key_Delete );
createSMESHAction( 5105, "SEL_FILTER_LIB" );
createSMESHAction( 6001, "LENGTH", "ICON_LENGTH", 0, true );
createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE", 0, true );
createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true );
- createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
- createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
- createSMESHAction( 6024, "BARE_BORDER_VOLUME","ICON_BARE_BORDER_VOLUME", 0, true );
- createSMESHAction( 6025, "BARE_BORDER_FACE","ICON_BARE_BORDER_FACE", 0, true );
+ createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
+ createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
+ createSMESHAction( 6024, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true );
+ createSMESHAction( 6025, "BARE_BORDER_FACE", "ICON_BARE_BORDER_FACE", 0, true );
createSMESHAction( 6026, "OVER_CONSTRAINED_VOLUME","ICON_OVER_CONSTRAINED_VOLUME", 0, true );
- createSMESHAction( 6027, "OVER_CONSTRAINED_FACE","ICON_OVER_CONSTRAINED_FACE", 0, true );
+ createSMESHAction( 6027, "OVER_CONSTRAINED_FACE", "ICON_OVER_CONSTRAINED_FACE", 0, true );
+ createSMESHAction( 6028, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true );
+ createSMESHAction( 6029, "EQUAL_EDGE", "ICON_EQUAL_EDGE", 0, true );
+ createSMESHAction( 6030, "EQUAL_FACE", "ICON_EQUAL_FACE", 0, true );
+ createSMESHAction( 6031, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true );
createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true );
createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true );
createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true );
createSMESHAction( 6009, "VOLUME_3D", "ICON_VOLUME_3D", 0, true );
createSMESHAction( 4000, "NODE", "ICON_DLG_NODE" );
createSMESHAction( 4009, "ELEM0D", "ICON_DLG_ELEM0D" );
+ createSMESHAction( 4008, "BALL", "ICON_DLG_BALL" );
createSMESHAction( 4010, "EDGE", "ICON_DLG_EDGE" );
createSMESHAction( 4021, "TRIANGLE", "ICON_DLG_TRIANGLE" );
createSMESHAction( 4022, "QUAD", "ICON_DLG_QUADRANGLE" );
createSMESHAction( 4023, "POLYGON", "ICON_DLG_POLYGON" );
createSMESHAction( 4031, "TETRA", "ICON_DLG_TETRAS" );
createSMESHAction( 4032, "HEXA", "ICON_DLG_HEXAS" );
- createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" );
- createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" );
- createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
+ createSMESHAction( 4133, "PENTA", "ICON_DLG_PENTA" );
+ createSMESHAction( 4134, "PYRAMID", "ICON_DLG_PYRAMID" );
+ createSMESHAction( 4135, "OCTA", "ICON_DLG_OCTA" );
+ createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" );
+ createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" );
+ createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" );
+ createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" );
+ createSMESHAction( 4136, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" );
+ createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" );
+ createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" );
+ createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" );
+ createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" );
+ createSMESHAction( 4140, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" );
+ createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" );
+ createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" );
+ createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
createSMESHAction( 4043, "CLEAR_MESH" , "ICON_CLEAR_MESH" );
createSMESHAction( 4051, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" );
createSMESHAction( 4052, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" );
createSMESHAction( 417, "CONV_TO_QUAD", "ICON_CONV_TO_QUAD" );
createSMESHAction( 418, "2D_FROM_3D", "ICON_2D_FROM_3D" );
createSMESHAction( 419, "SPLIT_TO_TETRA", "ICON_SPLIT_TO_TETRA" );
+ createSMESHAction( 420, "REORIENT_2D", "ICON_REORIENT_2D" );
createSMESHAction( 200, "RESET" );
createSMESHAction( 201, "SCALAR_BAR_PROP" );
createSMESHAction( 2021, "SAVE_DISTRIBUTION" );
createSMESHAction( 213, "SHRINK", "ICON_SHRINK", 0, true );
createSMESHAction( 214, "UPDATE", "ICON_UPDATE" );
createSMESHAction( 215, "NODES", "ICON_POINTS", 0, true );
+ createSMESHAction( 222, "BALLS", "ICON_DLG_BALL", 0, true );
createSMESHAction( 216, "ELEMS0D", "ICON_DLG_ELEM0D", 0, true );
createSMESHAction( 217, "EDGES", "ICON_DLG_EDGE", 0, true );
createSMESHAction( 218, "FACES", "ICON_DLG_TRIANGLE", 0, true );
createSMESHAction( 501, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" );
createSMESHAction( 502, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" );
- createSMESHAction( 300, "ERASE" );
- createSMESHAction( 301, "DISPLAY" );
+ createSMESHAction( 300, "HIDE" );
+ createSMESHAction( 301, "SHOW" );
createSMESHAction( 302, "DISPLAY_ONLY" );
- createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" );
- createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" );
- createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" );
- createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" );
- createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" );
- createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" );
- createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" );
- createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" );
// ----- create menu --------------
int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ),
renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 );
- createMenu( 111, importId, -1 );
+ //createMenu( 111, importId, -1 );
createMenu( 112, importId, -1 );
createMenu( 113, importId, -1 );
createMenu( 115, importId, -1 );
#ifdef WITH_CGNS
createMenu( 116, importId, -1 );
#endif
+ createMenu( 117, importId, -1 );
createMenu( 121, exportId, -1 );
createMenu( 122, exportId, -1 );
createMenu( 123, exportId, -1 );
#ifdef WITH_CGNS
createMenu( 142, exportId, -1 ); // export to CGNS
#endif
+ createMenu( 144, exportId, -1 ); // export to SAUV
createMenu( separator(), fileId, 10 );
createMenu( 33, editId, -1 );
createMenu( separator(), meshId, -1 );
createMenu( 6005, nodeId, -1 );
+ createMenu( 6028, nodeId, -1 );
createMenu( 6002, edgeId, -1 );
createMenu( 6003, edgeId, -1 );
createMenu( 6001, edgeId, -1 );
createMenu( 6004, edgeId, -1 );
+ createMenu( 6029, edgeId, -1 );
createMenu( 6021, faceId, -1 );
createMenu( 6025, faceId, -1 );
createMenu( 6027, faceId, -1 );
createMenu( 6015, faceId, -1 );
createMenu( 6016, faceId, -1 );
createMenu( 6022, faceId, -1 );
+ createMenu( 6030, faceId, -1 );
createMenu( 6017, volumeId, -1 );
createMenu( 6009, volumeId, -1 );
createMenu( 6023, volumeId, -1 );
createMenu( 6024, volumeId, -1 );
createMenu( 6026, volumeId, -1 );
+ createMenu( 6031, volumeId, -1 );
createMenu( 4000, addId, -1 );
createMenu( 4009, addId, -1 );
+ createMenu( 4008, addId, -1 );
createMenu( 4010, addId, -1 );
createMenu( 4021, addId, -1 );
createMenu( 4022, addId, -1 );
createMenu( 4023, addId, -1 );
createMenu( 4031, addId, -1 );
createMenu( 4032, addId, -1 );
+ createMenu( 4133, addId, -1 );
+ createMenu( 4134, addId, -1 );
+ createMenu( 4135, addId, -1 );
createMenu( 4033, addId, -1 );
createMenu( separator(), addId, -1 );
createMenu( 4034, addId, -1 );
createMenu( 4035, addId, -1 );
createMenu( 4036, addId, -1 );
+ createMenu( 4136, addId, -1 );
createMenu( 4037, addId, -1 );
createMenu( 4038, addId, -1 );
createMenu( 4039, addId, -1 );
createMenu( 4040, addId, -1 );
+ createMenu( 4140, addId, -1 );
createMenu( 4041, removeId, -1 );
createMenu( 4042, removeId, -1 );
createMenu( 407, modifyId, -1 );
createMenu( 408, modifyId, -1 );
createMenu( 409, modifyId, -1 );
+ createMenu( 420, modifyId, -1 );
createMenu( 410, modifyId, -1 );
createMenu( 411, modifyId, -1 );
createMenu( 419, modifyId, -1 );
createTool( separator(), meshTb );
createTool( 6005, ctrlTb );
+ createTool( 6028, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6002, ctrlTb );
createTool( 6003, ctrlTb );
createTool( 6001, ctrlTb );
createTool( 6004, ctrlTb );
+ createTool( 6029, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6021, ctrlTb );
createTool( 6025, ctrlTb );
createTool( 6015, ctrlTb );
createTool( 6016, ctrlTb );
createTool( 6022, ctrlTb );
+ createTool( 6030, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 6017, ctrlTb );
createTool( 6009, ctrlTb );
createTool( 6023, ctrlTb );
createTool( 6024, ctrlTb );
createTool( 6026, ctrlTb );
+ createTool( 6031, ctrlTb );
createTool( separator(), ctrlTb );
createTool( 4000, addRemTb );
createTool( 4009, addRemTb );
+ createTool( 4008, addRemTb );
createTool( 4010, addRemTb );
createTool( 4021, addRemTb );
createTool( 4022, addRemTb );
createTool( 4023, addRemTb );
createTool( 4031, addRemTb );
createTool( 4032, addRemTb );
+ createTool( 4133, addRemTb );
+ createTool( 4134, addRemTb );
+ createTool( 4135, addRemTb );
createTool( 4033, addRemTb );
createTool( separator(), addRemTb );
createTool( 4034, addRemTb );
createTool( 4035, addRemTb );
createTool( 4036, addRemTb );
+ createTool( 4136, addRemTb );
createTool( 4037, addRemTb );
createTool( 4038, addRemTb );
createTool( 4039, addRemTb );
createTool( 4040, addRemTb );
+ createTool( 4140, addRemTb );
createTool( separator(), addRemTb );
createTool( 4041, addRemTb );
createTool( 4042, addRemTb );
createTool( 407, modifyTb );
createTool( 408, modifyTb );
createTool( 409, modifyTb );
+ createTool( 420, modifyTb );
createTool( 410, modifyTb );
createTool( 411, modifyTb );
createTool( 419, modifyTb );
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)"),
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( 417, OB, mesh + " " + subMesh ); // convert to quadratic
createPopupItem( 418, OB, mesh + " " + group, // create 2D mesh from 3D
- "&& dim>=2");
+ "&& dim>=2");
popupMgr()->insert( separator(), -1, 0 );
QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc );
#ifdef WITH_CGNS
createPopupItem( 143, OB, mesh_group, multiple_non_empty ); // EXPORT_CGNS
#endif
+ createPopupItem( 145, OB, mesh_group, multiple_non_empty ); // EXPORT_SAUV
createPopupItem( 33, OB, mesh_part + " " + hyp_alg ); // DELETE
+ createPopupItem( 813, OB, group ); // DEL_GROUP with contents
popupMgr()->insert( separator(), -1, 0 );
// popup for viewer
popupMgr()->setRule( action( 219 ), aDiffElemsInVTK + "&& isVisible &&" + hasVolumes, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 219 ), "{'Volume'} in entityMode", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert( action( 222 ), anId, -1 ); // BALLS
+ popupMgr()->setRule( action( 222 ), aDiffElemsInVTK + "&& isVisible &&" + hasBalls, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 222 ), "{'BallElem'} in entityMode", QtxPopupMgr::ToggleRule );
+
popupMgr()->insert( separator(), anId, -1 );
popupMgr()->insert( action( 220 ), anId, -1 ); // ALL
popupMgr()->setRule( action( 6005 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6005 ), "controlMode = 'eFreeNodes'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6028 ), aSubId, -1 ); // EQUAL_NODE
+ popupMgr()->setRule( action( 6028 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6028 ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule);
+
aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS
popupMgr()->insert( action( 6002 ), aSubId, -1 ); // FREE_EDGE
popupMgr()->insert( action( 6004 ), aSubId, -1 ); // CONNECTION
popupMgr()->setRule( action( 6004 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6004 ), "controlMode = 'eMultiConnection'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6029 ), aSubId, -1 ); // EQUAL_EDGE
+ popupMgr()->setRule( action( 6029 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6029 ), "controlMode = 'eCoincidentElems1D'", QtxPopupMgr::ToggleRule);
aSubId = popupMgr()->insert( tr( "MEN_FACE_CTRL" ), anId, -1 ); // FACE CONTROLS
popupMgr()->insert ( action( 6027 ), aSubId, -1 ); // OVER_CONSTRAINED_FACE
popupMgr()->setRule( action( 6027 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6027 ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6030 ), aSubId, -1 ); // EQUAL_FACE
+ popupMgr()->setRule( action( 6030 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6030 ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule );
aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
popupMgr()->setRule( action( 6026 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
popupMgr()->setRule( action( 6026 ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule );
+ popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME
+ popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
+ popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule );
+
popupMgr()->insert( separator(), anId, -1 );
popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP
// end of GEOM plugins loading
// Reset actions accelerator keys
- action(111)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); // Import DAT
+ //action(111)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); // Import DAT
action(112)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_U)); // Import UNV
action(113)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); // Import MED
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();
EmitSignalCloseAllDialogs();
// Unset actions accelerator keys
- action(111)->setShortcut(QKeySequence()); // Import DAT
+ //action(111)->setShortcut(QKeySequence()); // Import DAT
action(112)->setShortcut(QKeySequence()); // Import UNV
action(113)->setShortcut(QKeySequence()); // Import MED
{
if ( dynamic_cast<SVTK_ViewManager*>( mgr ) ) {
SMESH::UpdateSelectionProp( this );
-
+
QVector<SUIT_ViewWindow*> aViews = mgr->getViews();
for(int i = 0; i < aViews.count() ; i++){
SUIT_ViewWindow *sf = aViews[i];
int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
setPreferenceProperty( prec, "min", 0 );
setPreferenceProperty( prec, "max", 16 );
+ int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
+ setPreferenceProperty( doubleNodesTol, "precision", 10 );
+ setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
+ setPreferenceProperty( doubleNodesTol, "max", 1000000.0 );
+ setPreferenceProperty( doubleNodesTol, "step", 0.0000001 );
int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab );
setPreferenceProperty( dispgroup, "columns", 2 );
setPreferenceProperty( notifyMode, "indexes", indices );
int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab );
- setPreferenceProperty( computeGroup, "columns", 2 );
+ setPreferenceProperty( infoGroup, "columns", 4 );
int elemInfo = addPreference( tr( "PREF_ELEM_INFO" ), infoGroup, LightApp_Preferences::Selector, "SMESH", "mesh_elem_info" );
modes.clear();
modes.append( tr( "PREF_ELEM_INFO_SIMPLE" ) );
indices.append( 1 );
setPreferenceProperty( elemInfo, "strings", modes );
setPreferenceProperty( elemInfo, "indexes", indices );
+ int nodesLim = addPreference( tr( "PREF_GPP_NODES_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_groups_nodes_limit" );
+ setPreferenceProperty( nodesLim, "min", 0 );
+ setPreferenceProperty( nodesLim, "max", 10000000 );
+ setPreferenceProperty( nodesLim, "step", 10000 );
+ setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab );
setPreferenceProperty( segGroup, "columns", 2 );
setPreferenceProperty( nbSeg, "min", 1 );
setPreferenceProperty( nbSeg, "max", 10000000 );
+ int loadGroup = addPreference( tr( "SMESH_PREF_MESH_LOADING" ), genTab );
+ addPreference( tr( "PREF_FORGET_MESH_AT_HYP_MODIF" ), loadGroup, LightApp_Preferences::Bool,
+ "SMESH", "forget_mesh_on_hyp_modif" );
+
+
// Quantities with individual precision settings
int precGroup = addPreference( tr( "SMESH_PREF_GROUP_PRECISION" ), genTab );
setPreferenceProperty( precGroup, "columns", 2 );
setPreferenceProperty( chunkSize, "min", 0 );
setPreferenceProperty( chunkSize, "max", 1000 );
setPreferenceProperty( chunkSize, "step", 50 );
-
+
+ int pyDumpGroup = addPreference( tr( "PREF_PYTHON_DUMP" ), genTab );
+ addPreference( tr( "PREF_HISTORICAL_PYTHON_DUMP" ), pyDumpGroup, LightApp_Preferences::Bool, "SMESH", "historical_python_dump" );
+
// Mesh tab ------------------------------------------------------------------------
int meshTab = addPreference( tr( "PREF_TAB_MESH" ) );
int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab );
int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" );
addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" );
-
+ addPreference( tr( "PREF_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" );
-
- setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") );
- int grpSelection = addPreference( tr( "PREF_GROUP_SELECTION" ), meshTab );
- setPreferenceProperty( grpSelection, "columns", 2 );
- addPreference( tr( "PREF_SELECTION" ), grpSelection, LightApp_Preferences::Color, "SMESH", "selection_object_color" );
- addPreference( tr( "PREF_PRE_SELECTION" ), grpSelection, LightApp_Preferences::Color, "SMESH", "highlight_color" );
+ setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") );
int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab );
setPreferenceProperty( grpGroup, "columns", 2 );
int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "elem0d_size");
+ int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup,
+ LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size");
int elemW = addPreference(tr("PREF_WIDTH"), elemGroup,
LightApp_Preferences::IntSpin, "SMESH", "element_width");
int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
setPreferenceProperty( size0d, "min", 1 );
setPreferenceProperty( size0d, "max", 10 );
+ setPreferenceProperty( ballSize, "min", 1 );
+ setPreferenceProperty( ballSize, "max", 10 );
+
setPreferenceProperty( elemW, "min", 1 );
setPreferenceProperty( elemW, "max", 5 );
addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_object_color" );
addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_element_color" );
- int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, LightApp_Preferences::IntSpin, "SMESH", "selection_width" );
-
- setPreferenceProperty( selW, "min", 1 );
- setPreferenceProperty( selW, "max", 5 );
int preGroup = addPreference( tr( "PREF_GROUP_PRESELECTION" ), selTab );
setPreferenceProperty( preGroup, "columns", 2 );
addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, LightApp_Preferences::Color, "SMESH", "highlight_color" );
- int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, LightApp_Preferences::IntSpin, "SMESH", "highlight_width" );
-
- setPreferenceProperty( preW, "min", 1 );
- setPreferenceProperty( preW, "max", 5 );
int precSelGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), selTab );
setPreferenceProperty( precSelGroup, "columns", 2 );
setPreferenceProperty( hh, "min", 0.0 );
setPreferenceProperty( hh, "max", 1.0 );
setPreferenceProperty( hh, "step", 0.1 );
-
+
int distributionGr = addPreference( tr( "SMESH_DISTRIBUTION_SCALARBAR" ), sbarTab, LightApp_Preferences::Auto, "SMESH", "distribution_visibility" );
int coloringType = addPreference( tr( "SMESH_DISTRIBUTION_COLORING_TYPE" ), distributionGr, LightApp_Preferences::Selector, "SMESH", "distribution_coloring_type" );
setPreferenceProperty( distributionGr, "columns", 3 );
QStringList types;
- types.append( tr( "SMESH_MONOCOLOR" ) );
+ types.append( tr( "SMESH_MONOCOLOR" ) );
types.append( tr( "SMESH_MULTICOLOR" ) );
indices.clear(); indices.append( 0 ); indices.append( 1 );
setPreferenceProperty( coloringType, "strings", types );
std::string aWarning;
SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
if( name=="selection_object_color" || name=="selection_element_color" ||
- name=="selection_width" || name=="highlight_color" || name=="highlight_width" ||
+ name=="highlight_color" ||
name=="selection_precision_node" || name=="selection_precision_element" ||
name=="selection_precision_object")
SMESH::UpdateSelectionProp( this );
int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg );
}
+ else if ( name == "historical_python_dump" ||
+ name == "forget_mesh_on_hyp_modif") {
+ QString val = aResourceMgr->stringValue( "SMESH", name );
+ myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() );
+ }
if(aWarning.size() != 0){
aWarning += "The default values are applied instead.";
case 418: // create 2D mesh as boundary on 3D
op = new SMESHGUI_Make2DFrom3DOp();
break;
+ case 420: // Reorient faces
+ op = new SMESHGUI_ReorientFacesOp();
+ break;
case 701: // Compute mesh
op = new SMESHGUI_ComputeOp();
break;
// Colors (surface:edge:)
vtkFloatingPointType r, g, b;
- int delta;
-
+ int delta;
+
aSmeshActor->GetSufaceColor(r, g, b, delta);
QString colorStr ("surface");
colorStr += gDigitsSep; colorStr += QString::number(r);
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
- colorStr += gDigitsSep; colorStr += "backsurface";
- colorStr += gDigitsSep; colorStr += QString::number(delta);
-
+ colorStr += gDigitsSep; colorStr += "backsurface";
+ colorStr += gDigitsSep; colorStr += QString::number(delta);
+
aSmeshActor->GetEdgeColor(r, g, b);
colorStr += gDigitsSep; colorStr += "edge";
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
- aSmeshActor->GetOutlineColor(r, g, b);
- colorStr += gDigitsSep; colorStr += "outline";
+ aSmeshActor->GetNodeColor(r, g, b);
+ colorStr += gDigitsSep; colorStr += "node";
colorStr += gDigitsSep; colorStr += QString::number(r);
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
- aSmeshActor->GetNodeColor(r, g, b);
- colorStr += gDigitsSep; colorStr += "node";
+ aSmeshActor->GetOutlineColor(r, g, b);
+ colorStr += gDigitsSep; colorStr += "outline";
colorStr += gDigitsSep; colorStr += QString::number(r);
colorStr += gDigitsSep; colorStr += QString::number(g);
colorStr += gDigitsSep; colorStr += QString::number(b);
for ( ; anIter2 != anActorList.end(); anIter2++ ) {
if( aSmeshActor == *anIter2 ) {
ip->setParameter( entry, param + QString::number( ++aPlaneId ).toLatin1().constData(),
- QString::number( anId ).toLatin1().constData() );
+ QString::number( anId ).toLatin1().constData() );
break;
}
}
continue;
TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ];
- aPlaneDataList.push_back( aPlaneData );
+ aPlaneDataList.push_back( aPlaneData );
}
}
// Colors
else if (paramNameStr == "Colors") {
QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts);
- if (colors.count() == 16 || colors.count() == 17 ) {
+ if (colors.count() == 16 || colors.count() == 18 ) {
if (colors[0] != "surface" || colors[4] != "backsurface" ||
- (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node")) {
+ (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node") ||
+ (colors.count() == 18 && colors[14] != "outline")) {
MESSAGE("Invalid order of data in Colors, must be: "
"surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b");
}
else {
- int delta = 0;
- float er,eg,eb;
- float nr,ng,nb;
- vtkFloatingPointType otr,otg,otb;
- //Old case backsurface color is independent
- if( colors.count() == 16 ) {
- QColor ffc;
- SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ;
- er = colors[9].toFloat();
- eg = colors[10].toFloat();
- eb = colors[11].toFloat();
-
- nr = colors[13].toFloat();
- ng = colors[14].toFloat();
- nb = colors[15].toFloat();
- SMESH::GetColor("SMESH", "outline_color", otr, otg, otb, QColor( 0, 70, 0 ) );
- } else {
- //New case backsurface color depends on surface color
- delta = colors[5].toInt();
-
- er = colors[7].toFloat();
- eg = colors[8].toFloat();
- eb = colors[9].toFloat();
-
- nr = colors[11].toFloat();
- ng = colors[12].toFloat();
- nb = colors[13].toFloat();
-
- otr = colors[14].toFloat();
- otg = colors[15].toFloat();
- otb = colors[16].toFloat();
- }
+ int delta = 0;
+ float er,eg,eb;
+ float nr,ng,nb;
+ vtkFloatingPointType otr,otg,otb;
+ //Old case backsurface color is independent
+ if( colors.count() == 16 ) {
+ QColor ffc;
+ SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ;
+ er = colors[9].toFloat();
+ eg = colors[10].toFloat();
+ eb = colors[11].toFloat();
+
+ nr = colors[13].toFloat();
+ ng = colors[14].toFloat();
+ nb = colors[15].toFloat();
+ SMESH::GetColor("SMESH", "outline_color", otr, otg, otb, QColor( 0, 70, 0 ) );
+ } else {
+ //New case backsurface color depends on surface color
+ delta = colors[5].toInt();
+
+ er = colors[7].toFloat();
+ eg = colors[8].toFloat();
+ eb = colors[9].toFloat();
+
+ nr = colors[11].toFloat();
+ ng = colors[12].toFloat();
+ nb = colors[13].toFloat();
+
+ otr = colors[15].toFloat();
+ otg = colors[16].toFloat();
+ otb = colors[17].toFloat();
+ }
aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat(), delta);
aSmeshActor->SetEdgeColor(er,eg,eb);
aSmeshActor->SetNodeColor(nr,ng,nb);
#ifndef DISABLE_PLOT2DVIEWER
//Crear all Plot2d Viewers if need.
SMESH::ClearPlot2Viewers(pview);
-#endif
+#endif
+}
+
+void SMESHGUI::message( const QString& msg )
+{
+ // dispatch message
+ QStringList data = msg.split("/");
+ if ( data.count() > 0 ) {
+ if ( data.first() == "mesh_loading" ) {
+ // get mesh entry
+ QString entry = data.count() > 1 ? data[1] : QString();
+ if ( entry.isEmpty() )
+ return;
+ // get study
+ _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() )->studyDS();
+ // get mesh name
+ _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() );
+ QString name;
+ if ( obj )
+ name = obj->GetName().c_str();
+ if ( name.isEmpty() )
+ return;
+
+ if ( data.last() == "stop" )
+ application()->putInfo( tr( "MESH_LOADING_MSG_FINISHED" ).arg( name ) );
+ else
+ application()->putInfo( tr( "MESH_LOADING_MSG" ).arg( name ) );
+ QApplication::processEvents();
+ }
+ }
}
/*!
void SMESHGUI::connectView( const SUIT_ViewWindow* pview ) {
if(!pview)
return;
-
+
SUIT_ViewManager* viewMgr = pview->getViewManager();
if ( viewMgr ) {
disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
-
+
connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
}
}
-
+
/*!
\brief Return \c true if object can be renamed
*/
if( !anApp )
return false;
- _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
- if( !aStudy )
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
+ if( !appStudy )
return false;
- bool appRes = SalomeApp_Module::renameAllowed(entry);
- if( !appRes )
- 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), aStudy);
+ int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument());
if (aType == MESH || aType == GROUP ||
aType == SUBMESH || aType == SUBMESH_COMPOUND ||
aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
\brief Return \c true if rename operation finished successfully, \c false otherwise.
*/
bool SMESHGUI::renameObject( const QString& entry, const QString& name) {
-
+
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( application() );
if( !anApp )
return false;
-
- _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
- if( !aStudy )
- return false;
+
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
- bool appRes = SalomeApp_Module::renameObject(entry,name);
- if( !appRes )
+ if(!appStudy)
+ return false;
+
+ _PTR(Study) aStudy = appStudy->studyDS();
+
+ if(!aStudy)
return false;
+ bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
+ if ( aLocked ) {
+ SUIT_MessageBox::warning ( anApp->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
+ return false;
+ }
+
+
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable(entry) );
_PTR(GenericAttribute) anAttr;
_PTR(AttributeName) aName;
if ( obj->FindAttribute(anAttr, "AttributeName") ) {
aName = anAttr;
// check type to prevent renaming of inappropriate objects
- int aType = SMESHGUI_Selection::type( qPrintable(entry), aStudy );
+ int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() );
if (aType == MESH || aType == GROUP ||
aType == SUBMESH || aType == SUBMESH_COMPOUND ||
aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
aType == HYPOTHESIS || aType == ALGORITHM) {
if ( !name.isEmpty() ) {
SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qPrintable(name) );
-
+
// update name of group object and its actor
- Handle(SALOME_InteractiveObject) IObject =
+ 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) );
}
return true;
}
- }
+ }
}
}
return false;