1 // SMESH SMESHGUI : GUI for SMESH component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
22 // File : SMESHGUI.cxx
23 // Author : Nicolas REJNERI
28 #include "SMESHGUI_InitMeshDlg.h"
29 #include "SMESHGUI_AddSubMeshDlg.h"
30 #include "SMESHGUI_NodesDlg.h"
31 #include "SMESHGUI_TransparencyDlg.h"
32 #include "SMESHGUI_ClippingDlg.h"
33 #include "SMESHGUI_GroupDlg.h"
34 #include "SMESHGUI_RemoveNodesDlg.h"
35 #include "SMESHGUI_RemoveElementsDlg.h"
36 #include "SMESHGUI_MeshInfosDlg.h"
37 #include "SMESHGUI_StandardMeshInfosDlg.h"
38 #include "SMESHGUI_Preferences_ColorDlg.h"
39 #include "SMESHGUI_Preferences_ScalarBarDlg.h"
40 #include "SMESHGUI_Preferences_SelectionDlg.h"
41 #include "SMESHGUI_Hypotheses.h"
42 #include "SMESHGUI_HypothesesUtils.h"
43 #include "SMESHGUI_MoveNodesDlg.h"
44 #include "SMESHGUI_AddMeshElementDlg.h"
45 #include "SMESHGUI_EditHypothesesDlg.h"
46 #include "SMESHGUI_CreateHypothesesDlg.h"
47 #include "SMESHGUI_FilterDlg.h"
48 #include "SMESHGUI_FilterLibraryDlg.h"
49 #include "SMESHGUI_SingleEditDlg.h"
50 #include "SMESHGUI_MultiEditDlg.h"
51 #include "SMESHGUI_GroupOpDlg.h"
52 #include "SMESHGUI_DeleteGroupDlg.h"
53 #include "SMESHGUI_SmoothingDlg.h"
54 #include "SMESHGUI_RenumberingDlg.h"
55 #include "SMESHGUI_ExtrusionDlg.h"
56 #include "SMESHGUI_ExtrusionAlongPathDlg.h"
57 #include "SMESHGUI_RevolutionDlg.h"
58 #include "SMESHGUI_TranslationDlg.h"
59 #include "SMESHGUI_RotationDlg.h"
60 #include "SMESHGUI_SymmetryDlg.h"
61 #include "SMESHGUI_SewingDlg.h"
62 #include "SMESHGUI_MergeNodesDlg.h"
63 #include "SMESHGUI_MeshPatternDlg.h"
64 #include "SMESHGUI_PrecisionDlg.h"
66 #include "VTKViewer_ViewFrame.h"
67 #include "VTKViewer_InteractorStyleSALOME.h"
68 #include "VTKViewer_RenderWindowInteractor.h"
70 #include "SMESH_Actor.h"
71 #include "SMESH_Object.h"
74 #include "QAD_Tools.h"
75 #include "QAD_Config.h"
76 #include "QAD_Settings.h"
77 #include "QAD_RightFrame.h"
78 #include "QAD_MessageBox.h"
79 #include "QAD_Resource.h"
80 #include "QAD_FileDlg.h"
81 #include "QAD_Desktop.h"
82 #include "QAD_ResourceMgr.h"
83 #include "QAD_WaitCursor.h"
85 #include "SALOME_NamingService.hxx"
86 #include "SALOME_ListIteratorOfListIO.hxx"
87 #include "SALOME_InteractiveObject.hxx"
89 #include "SALOMEGUI_Desktop.h"
90 #include "SALOMEGUI_NameDlg.h"
91 #include "SALOMEGUI_ImportOperation.h"
92 #include "SALOMEGUI_QtCatchCorbaException.hxx"
94 #include "SMESHGUI_Utils.h"
95 #include "SMESHGUI_SMESHGenUtils.h"
96 #include "SMESHGUI_GEOMGenUtils.h"
97 #include "SMESHGUI_MeshUtils.h"
98 #include "SMESHGUI_GroupUtils.h"
99 #include "SMESHGUI_FilterUtils.h"
100 #include "SMESHGUI_PatternUtils.h"
101 #include "SMESHGUI_VTKUtils.h"
103 #include "SALOMEconfig.h"
104 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
107 #define INCLUDE_MENUITEM_DEF
108 #include <qapplication.h>
109 #include <qlineedit.h>
110 #include <qmenudata.h>
111 #include <qmenubar.h>
112 #include <qpopupmenu.h>
115 #include <qpainter.h>
116 #include <qcheckbox.h>
117 #include <qcolordialog.h>
118 #include <qspinbox.h>
122 #include <qradiobutton.h>
124 #include <boost/shared_ptr.hpp>
126 #include <vtkRenderer.h>
127 #include <vtkRenderWindow.h>
128 #include <vtkActorCollection.h>
129 #include <vtkScalarBarActor.h>
130 #include <vtkUnstructuredGrid.h>
132 #include "utilities.h"
138 //=============================================================
139 void ImportMeshesFromFile(QAD_Desktop * parent,
140 SMESH::SMESH_Gen_ptr theComponentMesh,
143 void ExportMeshToFile(QAD_Desktop * parent, int theCommandID);
145 void SetDisplayMode(int theCommandID);
147 void SetDisplayEntity(int theCommandID);
149 void Control( int theCommandID );
151 void SetDisplaySettings();
155 //=============================================================
156 void ImportMeshesFromFile(QAD_Desktop * parent,
157 SMESH::SMESH_Gen_ptr theComponentMesh,
163 if(theCommandID == 113){
164 filter.append(QObject::tr("MED files (*.med)"));
165 filter.append(QObject::tr("All files (*)"));
166 }else if (theCommandID == 112){
167 filter.append(QObject::tr("IDEAS files (*.unv)"));
168 }else if (theCommandID == 111){
169 filter.append(QObject::tr("DAT files (*.dat)"));
171 QString filename = QAD_FileDlg::getFileName(parent,
174 QObject::tr("Import mesh"),
176 if(!filename.isEmpty()) {
178 SALOMEDS::Study_var aStudy = SMESH::GetActiveStudyDocument();
181 SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
182 switch ( theCommandID ) {
185 aMeshes->length( 1 );
186 aMeshes[0] = theComponentMesh->CreateMeshesFromUNV(filename.latin1());
191 SMESH::DriverMED_ReadStatus res;
192 aMeshes = theComponentMesh->CreateMeshesFromMED(filename.latin1(),res);
193 if ( res != SMESH::DRS_OK ) {
195 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
196 QObject::tr("SMESH_WRN_WARNING"),
197 QObject::tr(QString("SMESH_DRS_%1").arg(res)),
198 QObject::tr("SMESH_BUT_OK"));
199 aMeshes->length( 0 );
206 bool isEmpty = false;
207 for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ ) {
208 SALOMEDS::SObject_var aMeshSO = SMESH::FindSObject( aMeshes[i] );
209 if ( !aMeshSO->_is_nil() ) {
210 SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
211 SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow( aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" ) );
212 aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_IMPORTED");
213 if ( theCommandID == 112 ) // mesh names aren't taken from the file for UNV import
214 SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() );
221 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
222 QObject::tr("SMESH_WRN_WARNING"),
223 QObject::tr("SMESH_DRS_EMPTY"),
224 QObject::tr("SMESH_BUT_OK"));
228 catch (const SALOME::SALOME_Exception& S_ex){
230 QtCatchCorbaException(S_ex);
237 void ExportMeshToFile(QAD_Desktop * parent, int theCommandID)
239 SALOME_Selection *aSel = SALOME_Selection::Selection(SMESH::GetActiveStudy()->getSelection());
240 if(aSel->IObjectCount()){
241 Handle(SALOME_InteractiveObject) anIObject = aSel->firstIObject();
242 SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIObject);
243 if ( !aMesh->_is_nil() ) {
244 QString aFilter, aTitle = QObject::tr("Export mesh");
245 QMap<QString, SMESH::MED_VERSION> aFilterMap;
246 switch ( theCommandID ) {
248 aFilterMap.insert( QObject::tr("MED 2.1 (*.med)"), SMESH::MED_V2_1 );
249 aFilterMap.insert( QObject::tr("MED 2.2 (*.med)"), SMESH::MED_V2_2 );
252 aFilter = QObject::tr("DAT files (*.dat)");
255 if(aMesh->NbPyramids()){
256 int aRet = QAD_MessageBox::warn2(QAD_Application::getDesktop(),
257 QObject::tr("SMESH_WRN_WARNING"),
258 QObject::tr("SMESH_EXPORT_UNV").arg(anIObject->getName()),
259 QObject::tr("SMESH_BUT_YES"),
260 QObject::tr("SMESH_BUT_NO"),
265 aFilter = QObject::tr("IDEAS files (*.unv)");
272 SMESH::MED_VERSION aFormat;
274 if ( theCommandID != 122)
275 aFilename = QAD_FileDlg::getFileName(parent, "", aFilter, aTitle, false);
279 for ( QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin(); it != aFilterMap.end(); ++it )
280 filters.push_back( it.key() );
282 QAD_FileDlg* fd = new QAD_FileDlg( parent, false, true, true );
283 fd->setCaption( aTitle );
284 fd->setFilters( filters );
286 aFilename = fd->selectedFile();
287 aFormat = aFilterMap[fd->selectedFilter()];
290 if ( !aFilename.isEmpty() ) {
291 // Check whether the file already exists and delete it if yes
292 QFile aFile( aFilename );
293 if ( aFile.exists() )
296 switch ( theCommandID ) {
298 aMesh->ExportToMED( aFilename.latin1(), false, aFormat ); // currently, automatic groups are never created
301 aMesh->ExportDAT( aFilename.latin1() );
304 aMesh->ExportUNV( aFilename.latin1() );
314 inline void InverseEntityMode(unsigned int& theOutputMode,
315 unsigned int theMode)
317 bool anIsNotPresent = ~theOutputMode & theMode;
319 theOutputMode |= theMode;
321 theOutputMode &= ~theMode;
324 void SetDisplayEntity(int theCommandID){
325 SALOME_Selection *Sel = SALOME_Selection::Selection(SMESH::GetActiveStudy()->getSelection());
326 if(Sel->IObjectCount() >= 1){
327 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
328 for(; It.More(); It.Next()){
329 Handle(SALOME_InteractiveObject) IObject = It.Value();
330 if(IObject->hasEntry()){
331 if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
332 unsigned int aMode = anActor->GetEntityMode();
333 switch(theCommandID){
335 InverseEntityMode(aMode,SMESH_Actor::eEdges);
338 InverseEntityMode(aMode,SMESH_Actor::eFaces);
341 InverseEntityMode(aMode,SMESH_Actor::eVolumes);
344 aMode = SMESH_Actor::eAllEntity;
348 anActor->SetEntityMode(aMode);
355 void SetDisplayMode(int theCommandID){
356 SALOME_Selection *Sel = SALOME_Selection::Selection(SMESH::GetActiveStudy()->getSelection());
357 if(Sel->IObjectCount() >= 1){
358 switch(theCommandID){
360 SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
361 new SMESHGUI_ClippingDlg(QAD_Application::getDesktop(),"",false);
365 SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
366 new SMESHGUI_TransparencyDlg(QAD_Application::getDesktop(),"",false);
369 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
370 for(; It.More(); It.Next()){
371 Handle(SALOME_InteractiveObject) IObject = It.Value();
372 if(IObject->hasEntry()){
373 if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
374 switch(theCommandID){
376 anActor->SetRepresentation(SMESH_Actor::eEdge);
379 anActor->SetRepresentation(SMESH_Actor::eSurface);
382 if(anActor->IsShrunk())
385 anActor->SetShrink();
388 anActor->SetRepresentation(SMESH_Actor::ePoint);
392 anActor->GetSufaceColor(color[0], color[1], color[2]);
393 int c0 = int (color[0] * 255);
394 int c1 = int (color[1] * 255);
395 int c2 = int (color[2] * 255);
396 QColor c(c0, c1, c2);
399 anActor->GetEdgeColor(edgecolor[0], edgecolor[1], edgecolor[2]);
400 c0 = int (edgecolor[0] * 255);
401 c1 = int (edgecolor[1] * 255);
402 c2 = int (edgecolor[2] * 255);
403 QColor e(c0, c1, c2);
405 float backfacecolor[3];
406 anActor->GetBackSufaceColor(backfacecolor[0], backfacecolor[1], backfacecolor[2]);
407 c0 = int (backfacecolor[0] * 255);
408 c1 = int (backfacecolor[1] * 255);
409 c2 = int (backfacecolor[2] * 255);
410 QColor b(c0, c1, c2);
413 anActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]);
414 c0 = int (nodecolor[0] * 255);
415 c1 = int (nodecolor[1] * 255);
416 c2 = int (nodecolor[2] * 255);
417 QColor n(c0, c1, c2);
419 int Edgewidth = (int)anActor->GetLineWidth();
422 int intValue = int(anActor->GetNodeSize());
423 float Shrink = anActor->GetShrinkFactor();
425 SMESHGUI_Preferences_ColorDlg *aDlg =
426 new SMESHGUI_Preferences_ColorDlg(QAD_Application::getDesktop(),"");
427 aDlg->SetColor(1, c);
428 aDlg->SetColor(2, e);
429 aDlg->SetColor(3, n);
430 aDlg->SetColor(4, b);
431 aDlg->SetIntValue(1, Edgewidth);
432 aDlg->SetIntValue(2, intValue);
433 aDlg->SetIntValue(3, int(Shrink*100.));
435 QColor color = aDlg->GetColor(1);
436 QColor edgecolor = aDlg->GetColor(2);
437 QColor nodecolor = aDlg->GetColor(3);
438 QColor backfacecolor = aDlg->GetColor(4);
439 /* actor color and backface color */
440 anActor->SetSufaceColor(float (color.red()) / 255.,
441 float (color.green()) / 255.,
442 float (color.blue()) / 255.);
443 anActor->SetBackSufaceColor(float (backfacecolor.red()) / 255.,
444 float (backfacecolor.green()) / 255.,
445 float (backfacecolor.blue()) / 255.);
448 anActor->SetEdgeColor(float (edgecolor.red()) / 255.,
449 float (edgecolor.green()) / 255.,
450 float (edgecolor.blue()) / 255.);
452 /* Shrink factor and size edges */
453 anActor->SetShrinkFactor(aDlg->GetIntValue(3) / 100.);
454 anActor->SetLineWidth(aDlg->GetIntValue(1));
456 /* Nodes color and size */
457 anActor->SetNodeColor(float (nodecolor.red()) / 255.,
458 float (nodecolor.green()) / 255.,
459 float (nodecolor.blue()) / 255.);
460 anActor->SetNodeSize(aDlg->GetIntValue(2));
469 SMESH::RepaintCurrentView();
474 void SetDisplaySettings()
476 SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
477 SMESHGUI_Preferences_ColorDlg *aDlg =
478 new SMESHGUI_Preferences_ColorDlg(QAD_Application::getDesktop(), "");
481 QString SCr, SCg, SCb;
482 SCr = QAD_CONFIG->getSetting("SMESH:SettingsFillColorRed");
483 SCg = QAD_CONFIG->getSetting("SMESH:SettingsFillColorGreen");
484 SCb = QAD_CONFIG->getSetting("SMESH:SettingsFillColorBlue");
485 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
486 color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
487 else color = QColor(0, 170, 255);
488 aDlg->SetColor(1, color);
490 SCr = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorRed");
491 SCg = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorGreen");
492 SCb = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorBlue");
493 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
494 color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
495 else color = QColor(0, 170, 255);
496 aDlg->SetColor(2, color);
498 SCr = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorRed");
499 SCg = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorGreen");
500 SCb = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorBlue");
501 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
502 color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
503 else color = Qt::red;
504 aDlg->SetColor(3, color);
506 QString SBr = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorRed");
507 QString SBg = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorGreen");
508 QString SBb = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorBlue");
509 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
510 color = QColor(SBr.toInt(), SBg.toInt(), SBb.toInt());
511 else color = Qt::blue;
512 aDlg->SetColor(4, color);
514 QString intValue = QAD_CONFIG->getSetting("SMESH:SettingsWidth");
515 if (intValue.isEmpty()) intValue = "1";
516 aDlg->SetIntValue(1, intValue.toInt());
517 intValue = QAD_CONFIG->getSetting("SMESH:SettingsNodesSize");
518 if (intValue.isEmpty()) intValue = "3";
519 aDlg->SetIntValue(2, intValue.toInt());
520 intValue = QAD_CONFIG->getSetting("SMESH:SettingsShrinkCoeff");
521 if (intValue.isEmpty()) intValue = "75";
522 aDlg->SetIntValue(3, intValue.toInt());
525 QColor colorFill = aDlg->GetColor(1);
526 QAD_CONFIG->addSetting("SMESH:SettingsFillColorRed", colorFill.red());
527 QAD_CONFIG->addSetting("SMESH:SettingsFillColorGreen", colorFill.green());
528 QAD_CONFIG->addSetting("SMESH:SettingsFillColorBlue", colorFill.blue());
530 QColor colorOutline = aDlg->GetColor(2);
531 QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorRed", colorOutline.red());
532 QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorGreen", colorOutline.green());
533 QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorBlue", colorOutline.blue());
535 QColor colorNode = aDlg->GetColor(3);
536 QAD_CONFIG->addSetting("SMESH:SettingsNodeColorRed", colorNode.red());
537 QAD_CONFIG->addSetting("SMESH:SettingsNodeColorGreen", colorNode.green());
538 QAD_CONFIG->addSetting("SMESH:SettingsNodeColorBlue", colorNode.blue());
540 QColor colorBackFace = aDlg->GetColor(4);
541 QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorRed", colorBackFace.red());
542 QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorGreen", colorBackFace.green());
543 QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorBlue", colorBackFace.blue());
545 int width = aDlg->GetIntValue(1);
546 QAD_CONFIG->addSetting("SMESH:SettingsWidth", width);
548 int nodes_size = aDlg->GetIntValue(2);
549 QAD_CONFIG->addSetting("SMESH:SettingsNodesSize", nodes_size);
551 int shrink_coeff = aDlg->GetIntValue(3);
552 QAD_CONFIG->addSetting("SMESH:SettingsShrinkCoeff", shrink_coeff);
559 void Control( int theCommandID )
561 SALOME_Selection *Sel = SALOME_Selection::Selection( SMESH::GetActiveStudy()->getSelection() );
563 Handle(SALOME_InteractiveObject) anIO = Sel->firstIObject();
566 SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
567 if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())){
568 switch ( theCommandID ){
570 aTitle = QObject::tr( "LENGTH_EDGES" );
571 aControl = SMESH_Actor::eLength;
574 aTitle = QObject::tr( "LENGTH2D_EDGES" );
575 aControl = SMESH_Actor::eLength2D;
578 aTitle = QObject::tr( "FREE_EDGES" );
579 aControl = SMESH_Actor::eFreeEdges;
582 aTitle = QObject::tr( "FREE_BORDERS" );
583 aControl = SMESH_Actor::eFreeBorders;
586 aTitle = QObject::tr( "MULTI_BORDERS" );
587 aControl = SMESH_Actor::eMultiConnection;
590 aTitle = QObject::tr( "MULTI2D_BORDERS" );
591 aControl = SMESH_Actor::eMultiConnection2D;
594 aTitle = QObject::tr( "AREA_ELEMENTS" );
595 aControl = SMESH_Actor::eArea;
598 aTitle = QObject::tr( "TAPER_ELEMENTS" );
599 aControl = SMESH_Actor::eTaper;
602 aTitle = QObject::tr( "ASPECTRATIO_ELEMENTS" );
603 aControl = SMESH_Actor::eAspectRatio;
606 aTitle = QObject::tr( "ASPECTRATIO_3D_ELEMENTS" );
607 aControl = SMESH_Actor::eAspectRatio3D;
610 aTitle = QObject::tr( "MINIMUMANGLE_ELEMENTS" );
611 aControl = SMESH_Actor::eMinimumAngle;
614 aTitle = QObject::tr( "WARP_ELEMENTS" );
615 aControl = SMESH_Actor::eWarping;
618 aTitle = QObject::tr( "SKEW_ELEMENTS" );
619 aControl = SMESH_Actor::eSkew;
622 anActor->SetControlMode(aControl);
623 anActor->GetScalarBarActor()->SetTitle(aTitle.latin1());
630 bool CheckOIType(const Handle(SALOME_InteractiveObject) & theIO,
631 MeshObjectType theType,
632 const QString theInTypeName,
633 QString & theOutTypeName)
635 SMESH_TypeFilter aTypeFilter( theType );
636 if ( aTypeFilter.IsOk( theIO )) {
637 theOutTypeName = theInTypeName;
644 QString CheckTypeObject(const Handle(SALOME_InteractiveObject) & theIO)
646 SALOMEDS::Study_var aStudy = SMESH::GetActiveStudyDocument();
647 SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theIO->getEntry());
648 if (!aSObj->_is_nil()) {
649 SALOMEDS::SComponent_var aSComp = aSObj->GetFatherComponent();
650 CORBA::String_var anID = aSComp->GetID();
651 if (!strcmp(anID.in(),theIO->getEntry()))
657 CheckOIType ( theIO, HYPOTHESIS, "Hypothesis", aTypeName ) ||
658 CheckOIType ( theIO, ALGORITHM, "Algorithm", aTypeName ) ||
659 CheckOIType ( theIO, MESH, "Mesh", aTypeName ) ||
660 CheckOIType ( theIO, SUBMESH, "SubMesh", aTypeName ) ||
661 CheckOIType ( theIO, GROUP, "Group", aTypeName )
669 QString CheckHomogeneousSelection()
671 QAD_Study* aStudy = SMESH::GetActiveStudy();
672 SALOME_Selection *aSel = SALOME_Selection::Selection(aStudy->getSelection());
675 SALOME_ListIteratorOfListIO Itinit(aSel->StoredIObjects());
676 for (; Itinit.More(); Itinit.Next())
678 List.Append(Itinit.Value());
681 QString RefType = CheckTypeObject(aSel->firstIObject());
682 SALOME_ListIteratorOfListIO It(List);
683 for (; It.More(); It.Next())
685 Handle(SALOME_InteractiveObject) IObject = It.Value();
686 QString Type = CheckTypeObject(IObject);
687 if (Type.compare(RefType) != 0)
688 return "Heterogeneous Selection";
691 aSel->ClearIObjects();
692 SALOME_ListIteratorOfListIO It1(List);
693 for (; It1.More(); It1.Next())
695 int res = aSel->AddIObject(It1.Value());
697 aStudy->highlight(It1.Value(), false);
699 aStudy->highlight(It1.Value(), true);
706 // VSR 17/11/04: check if all objects selected belong to SMESH component --> start
707 QString aParentComponent = ((SALOMEGUI_Desktop*)QAD_Application::getDesktop())->getComponentFromSelection();
708 if ( aParentComponent != QAD_Application::getDesktop()->getActiveComponent() ) {
709 QAD_MessageBox::warn1 ( QAD_Application::getDesktop(),
710 QObject::tr("ERR_ERROR"),
711 QObject::tr("NON_SMESH_OBJECTS_SELECTED").arg(QAD_Application::getDesktop()->getComponentUserName( "SMESH" )),
712 QObject::tr("BUT_OK") );
715 // VSR 17/11/04: check if all objects selected belong to SMESH component <-- finish
716 if (QAD_MessageBox::warn2
717 (QAD_Application::getDesktop(),
718 QObject::tr("SMESH_WRN_WARNING"),
719 QObject::tr("SMESH_REALLY_DELETE"),
720 QObject::tr("SMESH_BUT_YES"), QObject::tr("SMESH_BUT_NO"), 1, 0, 0) != 1)
723 QAD_Study* anActiveStudy = SMESH::GetActiveStudy();
724 int nbSf = anActiveStudy->getStudyFramesCount();
726 SALOMEDS::Study_var aStudy = SMESH::GetActiveStudyDocument();
727 SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
728 SALOMEDS::GenericAttribute_var anAttr;
729 SALOMEDS::AttributeIOR_var anIOR;
731 SALOME_Selection *Sel = SALOME_Selection::Selection(anActiveStudy->getSelection());
732 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
734 aStudyBuilder->NewCommand(); // There is a transaction
735 for(; It.More(); It.Next()){
736 Handle(SALOME_InteractiveObject) IObject = It.Value();
737 if(IObject->hasEntry()){
738 SALOMEDS::SObject_var SO = aStudy->FindObjectID(IObject->getEntry());
740 /* Erase child graphical objects */
741 SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(SO);
742 for(it->InitEx(true); it->More(); it->Next()){
743 SALOMEDS::SObject_var CSO = it->Value();
744 if(CSO->FindAttribute(anAttr, "AttributeIOR")){
745 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
747 for(int i = 0; i < nbSf; i++){
748 QAD_StudyFrame *sf = anActiveStudy->getStudyFrame(i);
749 CORBA::String_var anEntry = CSO->GetID();
750 if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.in())){
751 SMESH::RemoveActor(sf,anActor);
757 /* Erase main graphical object */
758 for(int i = 0; i < nbSf; i++){
759 QAD_StudyFrame *sf = anActiveStudy->getStudyFrame(i);
760 if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,IObject->getEntry())){
761 SMESH::RemoveActor(sf,anActor);
765 // Remove object(s) from data structures
766 SALOMEDS::SObject_var obj = aStudy->FindObjectID(IObject->getEntry());
768 SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(obj->GetObject());
769 SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(obj->GetObject());
770 QString objType = CheckTypeObject(IObject);
771 if ( !aGroup->_is_nil() ) { // DELETE GROUP
772 SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh();
773 aMesh->RemoveGroup( aGroup );
775 else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH
776 SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
777 aMesh->RemoveSubMesh( aSubMesh );
779 else if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS
780 SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject);
781 aStudyBuilder->RemoveObjectWithChildren( obj );
783 else {// default action: remove SObject from the study
784 // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
785 //QAD_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
787 aStudyBuilder->RemoveObjectWithChildren( obj );
792 } /* IObject->hasEntry() */
794 aStudyBuilder->CommitCommand();
796 /* Clear any previous selection */
797 Sel->ClearIObjects();
798 anActiveStudy->updateObjBrowser();
804 //=============================================================================
808 //=============================================================================
809 class CustomItem : public QCustomMenuItem
812 CustomItem(const QString& s, const QFont& f) : myString(s), myFont(f) {}
815 void paint(QPainter* p, const QColorGroup& cg, bool act, bool /*enabled*/, int x, int y, int w, int h)
818 p->fillRect( x, y, w, h, act ? cg.highlight() : cg.mid() );
819 p->setPen( act ? cg.highlightedText() : cg.buttonText() );
820 p->setFont( myFont );
821 p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
827 return QFontMetrics( myFont ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
830 bool fullSpan() const
840 //=============================================================================
844 //=============================================================================
845 SMESHGUI::SMESHGUI( const QString& theName, QObject* theParent ) :
846 SALOMEGUI( theName, theParent )
848 myActiveDialogBox = 0 ;
851 SMESH::GetSMESHGen();
852 SMESH::GetFilterManager();
855 /* load resources for all available meshers */
856 SMESH::InitAvailableHypotheses();
859 //=============================================================================
863 //=============================================================================
864 SMESHGUI::~SMESHGUI()
866 SMESH::GetFilterManager()->Destroy();
869 //=============================================================================
873 //=============================================================================
874 SMESHGUI* SMESHGUI::GetSMESHGUI()
876 static SMESHGUI aSMESHGUI;
877 aSMESHGUI.myActiveStudy = SMESH::GetActiveStudy();
878 SMESH::GetSMESHGen()->SetCurrentStudy( SMESH::GetActiveStudyDocument() );
880 /* Automatic Update flag */
881 aSMESHGUI.myAutomaticUpdate = ( QAD_CONFIG->getSetting( "SMESH:AutomaticUpdate" ).compare( "true" ) == 0 );
888 Standard_EXPORT SALOMEGUI* GetComponentGUI() {
889 return SMESHGUI::GetSMESHGUI();
893 //=============================================================================
897 //=============================================================================
898 void SMESHGUI::SetState(int aState)
900 this->myState = aState;
904 //=============================================================================
908 //=============================================================================
909 void SMESHGUI::ResetState()
915 //=============================================================================
919 //=============================================================================
920 void SMESHGUI::EmitSignalDeactivateDialog()
922 emit this->SignalDeactivateActiveDialog();
926 //=============================================================================
930 //=============================================================================
931 void SMESHGUI::EmitSignalStudyFrameChanged()
933 emit this->SignalStudyFrameChanged();
937 //=============================================================================
941 //=============================================================================
942 void SMESHGUI::EmitSignalCloseAllDialogs()
944 emit SignalCloseAllDialogs();
948 //=============================================================================
952 //=============================================================================
953 QDialog *SMESHGUI::GetActiveDialogBox()
955 return this->myActiveDialogBox;
958 //=============================================================================
962 //=============================================================================
963 void SMESHGUI::SetActiveDialogBox(QDialog * aDlg)
965 this->myActiveDialogBox = (QDialog *) aDlg;
969 //=============================================================================
973 //=============================================================================
974 QAD_Study *SMESHGUI::GetActiveStudy()
976 return this->myActiveStudy;
979 //=============================================================================
983 //=============================================================================
984 QAD_Desktop *SMESHGUI::GetDesktop()
986 return QAD_Application::getDesktop();
989 //=============================================================================
993 //=============================================================================
994 bool SMESHGUI::ActiveStudyChanged(QAD_Desktop* parent)
996 MESSAGE("SMESHGUI::activeStudyChanged init.");
997 QAD_Study* prevStudy = myActiveStudy;
998 /* Create or retrieve an object SMESHGUI */
999 MESSAGE("Active study changed : prev study =" << prevStudy);
1000 SMESHGUI::GetSMESHGUI();
1001 EmitSignalStudyFrameChanged();
1002 MESSAGE("Active study changed : active study =" << myActiveStudy);
1003 if ( prevStudy != myActiveStudy ) {
1004 EmitSignalCloseAllDialogs();
1005 MESSAGE("Active study changed : SMESHGUI nullified" << endl);
1007 SMESH::UpdateSelectionProp();
1009 MESSAGE("SMESHGUI::activeStudyChanged done.");
1013 //=============================================================================
1017 //=============================================================================
1018 bool SMESHGUI::DefineDlgPosition(QWidget * aDlg, int &x, int &y)
1020 /* Here the position is on the bottom right corner - 10 */
1021 // aDlg->resize(QSize().expandedTo(aDlg->minimumSizeHint()));
1023 QAD_Desktop *PP = QAD_Application::getDesktop();
1024 x = abs(PP->x() + PP->size().width() - aDlg->size().width() - 10);
1025 y = abs(PP->y() + PP->size().height() - aDlg->size().height() - 10);
1029 //=============================================================================
1033 //=============================================================================
1034 static int isStudyLocked(const SALOMEDS::Study_var& theStudy){
1035 return theStudy->GetProperties()->IsLocked();
1038 static bool checkLock(const SALOMEDS::Study_var& theStudy) {
1039 if (isStudyLocked(theStudy)) {
1040 QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
1041 QObject::tr("WRN_WARNING"),
1042 QObject::tr("WRN_STUDY_LOCKED"),
1043 QObject::tr("BUT_OK") );
1049 //=======================================================================
1050 //function : CheckActiveStudyLocked
1052 //=======================================================================
1054 bool SMESHGUI::ActiveStudyLocked()
1056 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
1057 return checkLock( aStudy );
1060 //=============================================================================
1064 //=============================================================================
1065 bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
1067 SALOMEDS::Study_var aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
1069 switch (theCommandID) {
1071 if(checkLock(aStudy)) break;
1079 if(checkLock(aStudy)) break;
1080 ::ImportMeshesFromFile(parent,SMESH::GetSMESHGen(),theCommandID);
1084 case 122: // EXPORT MED
1088 ::ExportMeshToFile(parent, theCommandID);
1092 case 200: // SCALAR BAR
1094 SALOME_Selection *Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1095 if( Sel && Sel->IObjectCount() ) {
1096 Handle(SALOME_InteractiveObject) anIO = Sel->firstIObject();
1097 if( anIO->hasEntry() ) {
1098 if( SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ) ) {
1099 anActor->SetControlMode( SMESH_Actor::eNone );
1107 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1108 SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( parent, Sel );
1112 case 1134: // Clipping
1113 case 1133: // Tranparency
1114 case 1132: // Colors / Size
1121 ::SetDisplayMode(theCommandID);
1127 case 219: // Volumes
1128 case 220: // All Entity
1129 ::SetDisplayEntity(theCommandID);
1134 if(checkLock(aStudy)) break;
1135 SMESH::UpdateView();
1140 case 301: // DISPLAY
1141 case 302: // DISPLAY ONLY
1143 SMESH::EDisplaing anAction;
1144 switch(theCommandID){
1145 case 300: anAction = SMESH::eErase; break;
1146 case 301: anAction = SMESH::eDisplay; break;
1147 case 302: anAction = SMESH::eDisplayOnly; break;
1150 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1151 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1152 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
1153 for (; It.More(); It.Next()) {
1154 Handle(SALOME_InteractiveObject) IOS = It.Value();
1155 if (IOS->hasEntry()) {
1156 SMESH::UpdateView(anAction,IOS->getEntry());
1160 Sel->ClearIObjects();
1166 if(checkLock(aStudy)) break;
1167 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1168 EmitSignalDeactivateDialog();
1169 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1170 new SMESHGUI_NodesDlg(parent, "", Sel);
1173 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1174 tr("SMESH_WRN_WARNING"),
1175 tr("SMESH_WRN_VIEWER_VTK"),
1176 tr("SMESH_BUT_OK"));
1181 case 2151: // FILTER
1183 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
1185 EmitSignalDeactivateDialog();
1186 new SMESHGUI_FilterDlg( parent, SMESH::EDGE );
1191 case 406: // MOVE NODE
1193 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK )
1195 QAD_MessageBox::warn1( GetDesktop(), tr( "SMESH_WRN_WARNING" ),
1196 tr( "NOT_A_VTK_VIEWER" ),tr( "SMESH_BUT_OK" ) );
1200 if(checkLock(aStudy)) break;
1201 SALOME_Selection *Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
1202 new SMESHGUI_MoveNodesDlg( parent, Sel );
1206 case 701: // COMPUTE MESH
1208 if(checkLock(aStudy)) break;
1209 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1210 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1211 int nbSel = Sel->IObjectCount();
1216 SMESH::SMESH_Mesh_var aMesh;
1217 SMESH::SMESH_subMesh_var aSubMesh;
1218 Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
1219 if (IObject->hasEntry()){
1220 SALOMEDS::SObject_var aMeshSObj = aStudy->FindObjectID(IObject->getEntry());
1221 GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh( aMeshSObj );
1222 if ( aShapeObject->_is_nil() ) {
1226 if(!aMeshSObj->_is_nil()) {
1227 SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(aMeshSObj);
1228 SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(aMeshSObj);
1230 if (!aMesh->_is_nil()){
1231 GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj);
1232 if (!refShapeObject->_is_nil()) {
1233 if(!SMESH::GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject)){
1234 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1235 tr("SMESH_WRN_WARNING"),
1236 tr("SMESH_WRN_MISSING_PARAMETERS"),
1237 tr("SMESH_BUT_OK"));
1241 if (SMESH::GetSMESHGen()->Compute(aMesh,refShapeObject))
1242 SMESH::ModifiedMesh(aMeshSObj,true);
1243 // TO Do : change icon of all submeshes
1245 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1246 tr("SMESH_WRN_WARNING"),
1247 tr("SMESH_WRN_COMPUTE_FAILED"),
1248 tr("SMESH_BUT_OK"));
1250 catch(const SALOME::SALOME_Exception & S_ex){
1251 QtCatchCorbaException(S_ex);
1254 }else if(!aSubMesh->_is_nil()){
1255 aMesh = aSubMesh->GetFather();
1256 GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj);
1257 if(!refShapeObject->_is_nil()){
1258 bool compute = SMESH::GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject);
1260 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1261 tr("SMESH_WRN_WARNING"),
1262 tr("SMESH_WRN_MISSING_PARAMETERS"),
1263 tr("SMESH_BUT_OK"));
1267 if ( SMESH::GetSMESHGen()->Compute(aMesh,refShapeObject) )
1268 SMESH::ModifiedMesh(aMeshSObj,true);
1269 // TO Do : change icon of all submeshes
1271 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1272 tr("SMESH_WRN_WARNING"),
1273 tr("SMESH_WRN_COMPUTE_FAILED"),
1274 tr("SMESH_BUT_OK"));
1275 }catch(const SALOME::SALOME_Exception & S_ex){
1276 QtCatchCorbaException(S_ex);
1282 CORBA::Long anId = aStudy->StudyId();
1283 TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry());
1284 cout<<"myAutomaticUpdate - "<<myAutomaticUpdate<<endl;
1285 if(myAutomaticUpdate && aVisualObj){
1286 aVisualObj->Update();
1287 SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
1289 anActor = SMESH::CreateActor(aStudy,IObject->getEntry());
1291 SMESH::DisplayActor(myActiveStudy->getActiveStudyFrame(),anActor); //apo
1297 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1298 tr("SMESH_WRN_WARNING"),
1299 tr("SMESH_WRN_VIEWER_VTK"),
1300 tr("SMESH_BUT_OK"));
1305 case 702: // ADD SUB MESH
1307 if(checkLock(aStudy)) break;
1308 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1309 EmitSignalDeactivateDialog();
1310 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1311 new SMESHGUI_AddSubMeshDlg(parent, "", Sel);
1314 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1315 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1316 tr("SMESH_BUT_OK"));
1321 case 703: // INIT MESH
1323 if(checkLock(aStudy)) break;
1324 EmitSignalDeactivateDialog();
1325 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1326 new SMESHGUI_InitMeshDlg(parent, "", Sel);
1330 case 704: // EDIT Hypothesis
1332 if(checkLock(aStudy)) break;
1333 EmitSignalDeactivateDialog();
1334 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1335 new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
1339 case 705: // EDIT Global Hypothesis
1341 if(checkLock(aStudy)) break;
1342 EmitSignalDeactivateDialog();
1343 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1344 new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
1348 case 706: // EDIT Local Hypothesis
1350 if(checkLock(aStudy)) break;
1351 EmitSignalDeactivateDialog();
1352 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1353 new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
1357 case 407: // DIAGONAL INVERSION
1358 case 408: // Delete diagonal
1360 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK )
1362 QAD_MessageBox::warn1( GetDesktop(), tr( "SMESH_WRN_WARNING" ),
1363 tr( "NOT_A_VTK_VIEWER" ),tr( "SMESH_BUT_OK" ) );
1367 if ( checkLock( aStudy ) )
1370 SALOME_Selection *aSel =
1371 SALOME_Selection::Selection( myActiveStudy->getSelection() );
1372 /*Standard_Boolean aRes;
1373 SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IObject);
1374 if ( aMesh->_is_nil() )
1376 QAD_MessageBox::warn1(GetDesktop(), tr( "SMESH_WRN_WARNING" ),
1377 tr( "SMESH_BAD_SELECTION" ), tr( "SMESH_BUT_OK" ) );
1381 EmitSignalDeactivateDialog();
1382 if ( theCommandID == 407 )
1383 new SMESHGUI_TrianglesInversionDlg( parent, aSel );
1385 new SMESHGUI_UnionOfTwoTrianglesDlg( parent, aSel );
1388 case 409: // Change orientation
1389 case 410: // Union of triangles
1390 case 411: // Cutting of quadrangles
1392 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK )
1394 QAD_MessageBox::warn1( GetDesktop(), tr( "SMESH_WRN_WARNING" ),
1395 tr( "NOT_A_VTK_VIEWER" ),tr( "SMESH_BUT_OK" ) );
1399 if ( checkLock( aStudy ) )
1402 SALOME_Selection *aSel =
1403 SALOME_Selection::Selection( myActiveStudy->getSelection() );
1405 EmitSignalDeactivateDialog();
1406 SMESHGUI_MultiEditDlg* aDlg;
1407 if ( theCommandID == 409 )
1408 aDlg = new SMESHGUI_ChangeOrientationDlg( parent, aSel );
1409 else if ( theCommandID == 410 )
1410 aDlg = new SMESHGUI_UnionOfTrianglesDlg( parent, aSel );
1412 aDlg = new SMESHGUI_CuttingOfQuadsDlg( parent, aSel );
1415 DefineDlgPosition( aDlg, x, y );
1420 case 412: // Smoothing
1422 if(checkLock(aStudy)) break;
1423 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1424 EmitSignalDeactivateDialog();
1425 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1426 new SMESHGUI_SmoothingDlg(parent, "", Sel);
1429 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1430 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1431 tr("SMESH_BUT_OK"));
1435 case 413: // Extrusion
1437 if(checkLock(aStudy)) break;
1438 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1439 EmitSignalDeactivateDialog();
1440 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1441 new SMESHGUI_ExtrusionDlg(parent, "", Sel);
1444 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1445 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1446 tr("SMESH_BUT_OK"));
1450 case 414: // Revolution
1452 if(checkLock(aStudy)) break;
1453 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1454 EmitSignalDeactivateDialog();
1455 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1456 new SMESHGUI_RevolutionDlg(parent, "", Sel);
1459 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1460 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1461 tr("SMESH_BUT_OK"));
1465 case 415: // Pattern mapping
1467 if ( checkLock( aStudy ) )
1469 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
1471 EmitSignalDeactivateDialog();
1472 SALOME_Selection *Sel = SALOME_Selection::Selection(
1473 myActiveStudy->getSelection() );
1474 new SMESHGUI_MeshPatternDlg( parent, Sel );
1477 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1478 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1479 tr("SMESH_BUT_OK"));
1483 case 416: // Extrusion along a path
1485 if(checkLock(aStudy)) break;
1486 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1487 EmitSignalDeactivateDialog();
1488 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1489 new SMESHGUI_ExtrusionAlongPathDlg(parent, Sel);
1492 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1493 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1494 tr("SMESH_BUT_OK"));
1498 case 801: // CREATE GROUP
1500 if(checkLock(aStudy)) break;
1501 EmitSignalDeactivateDialog();
1502 SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil();
1503 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1504 int nbSel = Sel->IObjectCount();
1506 // check if mesh is selected
1507 aMesh = SMESH::GetMeshByIO(Sel->firstIObject());
1509 SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg(parent, "", Sel, aMesh);
1514 case 802: // CONSTRUCT GROUP
1516 if(checkLock(aStudy)) break;
1517 EmitSignalDeactivateDialog();
1518 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1519 int nbSel = Sel->IObjectCount();
1521 // check if submesh is selected
1522 Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
1523 if (IObject->hasEntry()) {
1524 SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(IObject->getEntry());
1525 if(!aSObj->_is_nil()) {
1526 SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(aSObj->GetObject());
1527 if (!aSubMesh->_is_nil()) {
1529 SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
1530 // get submesh elements list by types
1531 SMESH::long_array_var aNodes = aSubMesh->GetElementsByType(SMESH::NODE);
1532 SMESH::long_array_var aEdges = aSubMesh->GetElementsByType(SMESH::EDGE);
1533 SMESH::long_array_var aFaces = aSubMesh->GetElementsByType(SMESH::FACE);
1534 SMESH::long_array_var aVolumes = aSubMesh->GetElementsByType(SMESH::VOLUME);
1535 // create group for each type o elements
1536 QString aName = IObject->getName();
1537 if (aNodes->length() > 0) {
1538 SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::NODE, aName + "_Nodes");
1539 aGroup->Add(aNodes.inout());
1541 if (aEdges->length() > 0) {
1542 SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::EDGE, aName + "_Edges");
1543 aGroup->Add(aEdges.inout());
1545 if (aFaces->length() > 0) {
1546 SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::FACE, aName + "_Faces");
1547 aGroup->Add(aFaces.inout());
1549 if (aVolumes->length() > 0) {
1550 SMESH::SMESH_Group_var aGroup = SMESH::AddGroup(aMesh, SMESH::VOLUME, aName + "_Volumes");
1551 aGroup->Add(aVolumes.inout());
1553 myActiveStudy->updateObjBrowser(true);
1554 }catch(const SALOME::SALOME_Exception & S_ex){
1555 QtCatchCorbaException(S_ex);
1564 case 803: // EDIT GROUP
1566 if(checkLock(aStudy)) break;
1567 EmitSignalDeactivateDialog();
1568 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1569 SALOME_ListIO IOs; IOs = Sel->StoredIObjects(); // list copy
1570 SALOME_ListIteratorOfListIO It (IOs);
1571 int nbSelectedGroups = 0;
1572 for ( ; It.More(); It.Next() )
1574 SMESH::SMESH_Group_var aGroup =
1575 SMESH::IObjectToInterface<SMESH::SMESH_Group>(It.Value());
1576 if (!aGroup->_is_nil()) {
1578 SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg(parent, "", Sel, aGroup);
1582 if (nbSelectedGroups == 0)
1584 SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg(parent, "", Sel, SMESH::SMESH_Group::_nil());
1590 case 804: // Add elements to group
1592 if(checkLock(aStudy)) break;
1593 if (myState == 800) {
1594 SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox;
1595 if (aDlg) aDlg->onAdd();
1600 case 805: // Remove elements from group
1602 if(checkLock(aStudy)) break;
1603 if (myState == 800) {
1604 SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox;
1605 if (aDlg) aDlg->onRemove();
1610 case 810: // Union Groups
1611 case 811: // Intersect groups
1612 case 812: // Cut groups
1614 if ( checkLock( aStudy ) )
1617 EmitSignalDeactivateDialog();
1618 SALOME_Selection *Sel = SALOME_Selection::Selection(
1619 myActiveStudy->getSelection() );
1622 if ( theCommandID == 810 ) aMode = SMESHGUI_GroupOpDlg::UNION;
1623 else if ( theCommandID == 811 ) aMode = SMESHGUI_GroupOpDlg::INTERSECT;
1624 else aMode = SMESHGUI_GroupOpDlg::CUT;
1626 ( new SMESHGUI_GroupOpDlg( parent, Sel, aMode ) )->show();
1630 case 813: // Delete groups with their contents
1632 if ( checkLock( aStudy ) )
1635 EmitSignalDeactivateDialog();
1636 SALOME_Selection *Sel = SALOME_Selection::Selection(
1637 myActiveStudy->getSelection() );
1639 ( new SMESHGUI_DeleteGroupDlg( parent, Sel ) )->show();
1643 case 900: // MESH INFOS
1645 EmitSignalDeactivateDialog();
1646 SALOME_Selection *Sel =
1647 SALOME_Selection::Selection(myActiveStudy->getSelection());
1648 if ( Sel->IObjectCount() > 1 ) { // a dlg for each IO
1649 SALOME_ListIO IOs; IOs = Sel->StoredIObjects(); // list copy
1650 SALOME_ListIteratorOfListIO It (IOs);
1651 for ( ; It.More(); It.Next() ) {
1652 Sel->ClearIObjects();
1653 Sel->AddIObject( It.Value() );
1654 new SMESHGUI_MeshInfosDlg(parent, "", false);
1656 // restore selection
1657 Sel->ClearIObjects();
1658 for (It.Initialize( IOs ) ; It.More(); It.Next() )
1659 Sel->AddIObject( It.Value() );
1662 new SMESHGUI_MeshInfosDlg(parent, "", false);
1666 case 902: // STANDARD MESH INFOS
1668 EmitSignalDeactivateDialog();
1669 SALOME_Selection *Sel =
1670 SALOME_Selection::Selection(myActiveStudy->getSelection());
1671 if ( Sel->IObjectCount() > 1 ) { // a dlg for each IO
1672 SALOME_ListIO IOs; IOs = Sel->StoredIObjects(); // list copy
1673 SALOME_ListIteratorOfListIO It (IOs);
1674 for ( ; It.More(); It.Next() ) {
1675 Sel->ClearIObjects();
1676 Sel->AddIObject( It.Value() );
1677 new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
1679 // restore selection
1680 Sel->ClearIObjects();
1681 for (It.Initialize( IOs ) ; It.More(); It.Next() )
1682 Sel->AddIObject( It.Value() );
1685 new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
1689 case 1001: // AUTOMATIC UPDATE PREFERENCES
1691 parent->menuBar()->setItemChecked(1001, !parent->menuBar()->isItemChecked(1001));
1692 if (parent->menuBar()->isItemChecked(1001)) {
1693 QAD_CONFIG->addSetting("SMESH:AutomaticUpdate", "true");
1694 myAutomaticUpdate = true;
1697 QAD_CONFIG->addSetting("SMESH:AutomaticUpdate", "false");
1698 myAutomaticUpdate = false;
1703 case 1003: // MESH PREFERENCES
1705 ::SetDisplaySettings();
1711 SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( parent );
1717 ( new SMESHGUI_PrecisionDlg( parent ) )->exec();
1723 parent->menuBar()->setItemChecked(10071, !parent->menuBar()->isItemChecked(10071));
1724 if (parent->menuBar()->isItemChecked(10071)) {
1725 QAD_CONFIG->addSetting("SMESH:DispayEntity","true");
1728 QAD_CONFIG->addSetting("SMESH:DispayEntity","false");
1734 SMESHGUI_Preferences_SelectionDlg* aDlg =
1735 new SMESHGUI_Preferences_SelectionDlg(parent);
1738 QString SCr, SCg, SCb;
1739 SCr = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorRed");
1740 SCg = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorGreen");
1741 SCb = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorBlue");
1742 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
1743 aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
1744 else aColor = Qt::cyan;
1745 aDlg->SetColor(1, aColor);
1747 SCr = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorRed");
1748 SCg = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorGreen");
1749 SCb = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorBlue");
1750 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
1751 aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
1752 else aColor = Qt::yellow;
1753 aDlg->SetColor(2, aColor);
1755 SCr = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorRed");
1756 SCg = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorGreen");
1757 SCb = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorBlue");
1758 if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
1759 aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
1760 else aColor = Qt::white;
1761 aDlg->SetColor(3, aColor);
1763 QString SW1 = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectWidth");
1764 if (SW1.isEmpty()) SW1 = "5";
1765 aDlg->SetWidth(1, SW1.toInt());
1767 QString SW2 = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectWidth");
1768 if (SW2.isEmpty()) SW2 = "5";
1769 aDlg->SetWidth(2, SW2.toInt());
1771 QString SP1 = QAD_CONFIG->getSetting("SMESH:SettingsNodeSelectTol");
1772 if (SP1.isEmpty()) SP1 = "0.025";
1773 aDlg->SetPrecision(1, SP1.toDouble());
1775 QString SP2 = QAD_CONFIG->getSetting("SMESH:SettingsElementsSelectTol");
1776 if (SP2.isEmpty()) SP2 = "0.001";
1777 aDlg->SetPrecision(2, SP2.toDouble());
1780 QColor aPreColor = aDlg->GetColor(1);
1781 QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorRed", aPreColor.red());
1782 QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorGreen", aPreColor.green());
1783 QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorBlue", aPreColor.blue());
1785 QColor aSelColor = aDlg->GetColor(2);
1786 QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorRed", aSelColor.red());
1787 QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorGreen", aSelColor.green());
1788 QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorBlue", aSelColor.blue());
1790 QColor aHiColor = aDlg->GetColor(3);
1791 QAD_CONFIG->addSetting("SMESH:SettingsSelectColorRed", aHiColor.red());
1792 QAD_CONFIG->addSetting("SMESH:SettingsSelectColorGreen", aHiColor.green());
1793 QAD_CONFIG->addSetting("SMESH:SettingsSelectColorBlue", aHiColor.blue());
1795 int aPreWidth = aDlg->GetWidth(1);
1796 QAD_CONFIG->addSetting("SMESH:SettingsPreSelectWidth", aPreWidth);
1797 int aSelWidth = aDlg->GetWidth(2);
1798 QAD_CONFIG->addSetting("SMESH:SettingsItemSelectWidth", aSelWidth);
1800 double aTolNodes = aDlg->GetPrecision(1);
1801 QAD_CONFIG->addSetting("SMESH:SettingsNodeSelectTol", aTolNodes);
1802 double aTolItems = aDlg->GetPrecision(2);
1803 QAD_CONFIG->addSetting("SMESH:SettingsElementsSelectTol", aTolItems);
1805 // update current study settings
1806 SMESH::UpdateSelectionProp();
1808 QAD_StudyFrame* studyFrame = myActiveStudy->getActiveStudyFrame();
1809 if (studyFrame->getTypeView() == VIEW_VTK) {
1810 VTKViewer_ViewFrame* aViewFrame = SMESH::GetVtkViewFrame(studyFrame);
1811 // update VTK viewer properties
1812 VTKViewer_RenderWindowInteractor* anInteractor = aViewFrame->getRWInteractor();
1814 anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
1815 aSelColor.blue()/255., aSelWidth);
1816 anInteractor->SetSelectionTolerance(aTolNodes, aTolItems);
1817 VTKViewer_InteractorStyleSALOME* aStyle = anInteractor->GetInteractorStyleSALOME();
1819 aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
1820 aPreColor.blue()/255., aPreWidth);
1823 vtkRenderer* aRenderer = aViewFrame->getRenderer();
1824 vtkActorCollection *aCollection = aRenderer->GetActors();
1825 aCollection->InitTraversal();
1826 while(vtkActor *anAct = aCollection->GetNextActor()){
1827 if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
1828 anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
1829 aHiColor.blue()/255.);
1830 anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
1831 aPreColor.blue()/255.);
1840 case 1100: // EDIT HYPOTHESIS
1842 if(checkLock(aStudy)) break;
1843 SALOME_Selection *Sel =
1844 SALOME_Selection::Selection(myActiveStudy->getSelection());
1845 int nbSel = Sel->IObjectCount();
1848 SMESH::SMESH_Hypothesis_var Hyp = SMESH::IObjectToInterface<SMESH::SMESH_Hypothesis>(Sel->firstIObject());
1850 /* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */
1851 /* At end below '...->updateObjBrowser(true)' will change icon of mesh objects */
1852 /* Warning : however by internal mechanism all subMeshes icons are changed ! */
1853 if ( !Hyp->_is_nil() )
1855 char* sName = Hyp->GetName();
1856 SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(sName);
1859 aCreator->EditHypothesis(Hyp);
1870 case 1101: // RENAME
1872 if ( checkLock( aStudy ) )
1875 SALOME_Selection *Sel =
1876 SALOME_Selection::Selection( myActiveStudy->getSelection() );
1878 SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
1879 for ( ; It.More(); It.Next() )
1881 Handle(SALOME_InteractiveObject) IObject = It.Value();
1882 SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
1883 SALOMEDS::GenericAttribute_var anAttr;
1884 SALOMEDS::AttributeName_var aName;
1885 if ( !obj->_is_nil() )
1887 if ( obj->FindAttribute(anAttr, "AttributeName") )
1889 aName = SALOMEDS::AttributeName::_narrow( anAttr );
1890 QString newName = QString(aName->Value());
1891 newName = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), newName );
1892 if ( !newName.isEmpty() )
1894 myActiveStudy->renameIObject( IObject, newName );
1896 // if current object is group update group's name
1897 SMESH::SMESH_GroupBase_var aGroup =
1898 SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
1899 if (!aGroup->_is_nil() )
1900 aGroup->SetName( newName.latin1() );
1908 case 1102: // REMOVE HYPOTHESIS / ALGORITHMS
1910 if(checkLock(aStudy)) break;
1912 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1913 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
1914 for (int i = 0; It.More(); It.Next(), i++) {
1915 Handle(SALOME_InteractiveObject) IObject = It.Value();
1916 SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject);
1918 Sel->ClearIObjects();
1919 myActiveStudy->updateObjBrowser(true);
1923 case 401: // GEOM::EDGE
1924 case 4021: // TRIANGLE
1929 if(checkLock(aStudy)) break;
1930 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1931 EmitSignalDeactivateDialog();
1932 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1933 SMDSAbs_ElementType type = SMDSAbs_Edge;
1935 switch (theCommandID) {
1936 case 4021: // TRIANGLE
1937 type = SMDSAbs_Face; nbNodes = 3; break;
1939 type = SMDSAbs_Face; nbNodes = 4; break;
1941 type = SMDSAbs_Volume; nbNodes = 4; break;
1943 type = SMDSAbs_Volume; nbNodes = 8; break;
1946 new SMESHGUI_AddMeshElementDlg(parent, "", Sel, type, nbNodes);
1949 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1950 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1951 tr("SMESH_BUT_OK"));
1956 case 4041: // REMOVES NODES
1958 if(checkLock(aStudy)) break;
1959 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1960 EmitSignalDeactivateDialog();
1961 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1962 new SMESHGUI_RemoveNodesDlg(parent, "", Sel);
1965 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1966 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1967 tr("SMESH_BUT_OK"));
1971 case 4042: // REMOVES ELEMENTS
1973 if(checkLock(aStudy)) break;
1974 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1975 EmitSignalDeactivateDialog();
1976 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1977 new SMESHGUI_RemoveElementsDlg(parent, "", Sel);
1981 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1982 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1983 tr("SMESH_BUT_OK"));
1987 case 4051: // RENUMBERING NODES
1989 if(checkLock(aStudy)) break;
1990 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
1991 EmitSignalDeactivateDialog();
1992 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
1993 new SMESHGUI_RenumberingDlg(parent, "", Sel, 0);
1997 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
1998 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
1999 tr("SMESH_BUT_OK"));
2003 case 4052: // RENUMBERING ELEMENTS
2005 if(checkLock(aStudy)) break;
2006 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2007 EmitSignalDeactivateDialog();
2008 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2009 new SMESHGUI_RenumberingDlg(parent, "", Sel, 1);
2013 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2014 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2015 tr("SMESH_BUT_OK"));
2019 case 4061: // TRANSLATION
2021 if(checkLock(aStudy)) break;
2022 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2023 EmitSignalDeactivateDialog();
2024 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2025 new SMESHGUI_TranslationDlg(parent, "", Sel);
2028 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2029 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2030 tr("SMESH_BUT_OK"));
2034 case 4062: // ROTATION
2036 if(checkLock(aStudy)) break;
2037 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2038 EmitSignalDeactivateDialog();
2039 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2040 new SMESHGUI_RotationDlg(parent, "", Sel);
2043 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2044 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2045 tr("SMESH_BUT_OK"));
2049 case 4063: // SYMMETRY
2051 if(checkLock(aStudy)) break;
2052 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2053 EmitSignalDeactivateDialog();
2054 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2055 new SMESHGUI_SymmetryDlg(parent, "", Sel);
2058 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2059 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2060 tr("SMESH_BUT_OK"));
2064 case 4064: // SEWING
2066 if(checkLock(aStudy)) break;
2067 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2068 EmitSignalDeactivateDialog();
2069 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2070 new SMESHGUI_SewingDlg(parent, "", Sel);
2073 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2074 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2075 tr("SMESH_BUT_OK"));
2079 case 4065: // MERGE NODES
2081 if(checkLock(aStudy)) break;
2082 if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
2083 EmitSignalDeactivateDialog();
2084 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2085 new SMESHGUI_MergeNodesDlg(parent, "", Sel);
2088 QAD_MessageBox::warn1(QAD_Application::getDesktop(),
2089 tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
2090 tr("SMESH_BUT_OK"));
2096 case 5000: // HYPOTHESIS
2098 if(checkLock(aStudy)) break;
2099 EmitSignalDeactivateDialog();
2100 new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, false);
2105 if(checkLock(aStudy)) break;
2106 EmitSignalDeactivateDialog();
2107 new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, true);
2111 case 5105: // Library of selection filters
2113 static QValueList<int> aTypes;
2114 if ( aTypes.isEmpty() )
2116 aTypes.append( SMESH::NODE );
2117 aTypes.append( SMESH::EDGE );
2118 aTypes.append( SMESH::FACE );
2119 aTypes.append( SMESH::VOLUME );
2121 new SMESHGUI_FilterLibraryDlg( parent, aTypes, SMESHGUI_FilterLibraryDlg::EDIT );
2125 case 6017: // CONTROLS
2138 if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
2139 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2140 if ( Sel->IObjectCount() == 1 && Sel->firstIObject()->hasEntry() ) {
2141 SALOMEDS::SObject_var SO = aStudy->FindObjectID( Sel->firstIObject()->getEntry() );
2142 if ( !SO->_is_nil() ) {
2143 CORBA::Object_var aObject = SO->GetObject();
2144 SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject );
2145 SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject );
2146 SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject );
2147 if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) {
2148 ::Control( theCommandID );
2153 QAD_MessageBox::warn1(GetDesktop(),
2154 tr( "SMESH_WRN_WARNING" ),
2155 tr( "SMESH_BAD_SELECTION" ),
2156 tr( "SMESH_BUT_OK" ) );
2160 QAD_MessageBox::warn1(GetDesktop(),
2161 tr( "SMESH_WRN_WARNING" ),
2162 tr( "NOT_A_VTK_VIEWER" ),
2163 tr( "SMESH_BUT_OK" ) );
2168 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2169 if (Sel->IObjectCount() == 1) {
2170 Handle(SALOME_InteractiveObject) anIObject = Sel->firstIObject();
2171 if(anIObject->hasEntry())
2172 if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIObject->getEntry())){
2173 anActor->SetPointsLabeled( !anActor->GetPointsLabeled() );
2180 SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
2181 if (Sel->IObjectCount() == 1) {
2182 Handle(SALOME_InteractiveObject) anIObject = Sel->firstIObject();
2183 if(anIObject->hasEntry())
2184 if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIObject->getEntry())){
2185 anActor->SetCellsLabeled( !anActor->GetCellsLabeled() );
2190 case 10001: // DISPLAY MODE PREFERENCE
2193 parent->menuBar()->setItemChecked(10001, true);
2194 parent->menuBar()->setItemChecked(10002, false);
2195 parent->menuBar()->setItemChecked(10004, false);
2196 parent->menuBar()->setItemEnabled(10003, true);
2197 QAD_CONFIG->addSetting("SMESH:DisplayMode", "Wireframe");
2202 parent->menuBar()->setItemChecked(10002, true);
2203 parent->menuBar()->setItemChecked(10001, false);
2204 parent->menuBar()->setItemChecked(10004, false);
2205 parent->menuBar()->setItemEnabled(10003, true);
2206 QAD_CONFIG->addSetting("SMESH:DisplayMode", "Shading");
2211 parent->menuBar()->setItemChecked(10003,!parent->menuBar()->isItemChecked(10003));
2212 QAD_CONFIG->addSetting("SMESH:Shrink", parent->menuBar()->isItemChecked(10003) ? "yes" : "no");
2217 parent->menuBar()->setItemChecked(10001, false);
2218 parent->menuBar()->setItemChecked(10004, true);
2219 parent->menuBar()->setItemChecked(10002, false);
2220 parent->menuBar()->setItemEnabled(10003, false);
2221 QAD_CONFIG->addSetting("SMESH:DisplayMode", "Nodes");
2227 myActiveStudy->updateObjBrowser(true);
2231 //=============================================================================
2235 //=============================================================================
2236 bool SMESHGUI::OnMousePress(QMouseEvent * pe, QAD_Desktop * parent,
2237 QAD_StudyFrame * studyFrame)
2242 //=============================================================================
2246 //=============================================================================
2247 bool SMESHGUI::OnMouseMove(QMouseEvent * pe, QAD_Desktop * parent,
2248 QAD_StudyFrame * studyFrame)
2253 //=============================================================================
2257 //=============================================================================
2258 bool SMESHGUI::OnKeyPress(QKeyEvent * pe, QAD_Desktop * parent,
2259 QAD_StudyFrame * studyFrame)
2264 //=============================================================================
2268 //=============================================================================
2269 bool SMESHGUI::SetSettings(QAD_Desktop * parent)
2271 MESSAGE("SMESHGUI::SetSettings.");
2272 SMESHGUI::GetSMESHGUI();
2275 QString DisplayMode = "Shading";
2276 if ( QAD_CONFIG->hasSetting("SMESH:DisplayMode") )
2277 DisplayMode = QAD_CONFIG->getSetting("SMESH:DisplayMode");
2279 QAD_CONFIG->addSetting("SMESH:DisplayMode", "Shading");
2281 bool Shrink = false;
2282 if ( QAD_CONFIG->hasSetting("SMESH:Shrink") )
2283 Shrink = QAD_CONFIG->getSetting("SMESH:Shrink") == "yes";
2285 if (DisplayMode == "Wireframe") {
2287 parent->menuBar()->setItemChecked(10004, false);
2288 parent->menuBar()->setItemChecked(10002, false);
2289 parent->menuBar()->setItemChecked(10001, true);
2290 parent->menuBar()->setItemEnabled(10003, true);
2292 else if (DisplayMode == "Nodes") {
2294 parent->menuBar()->setItemChecked(10004, true);
2295 parent->menuBar()->setItemChecked(10002, false);
2296 parent->menuBar()->setItemChecked(10001, false);
2297 parent->menuBar()->setItemEnabled(10003, false);
2300 // default is shading
2301 parent->menuBar()->setItemChecked(10004, false);
2302 parent->menuBar()->setItemChecked(10002, true);
2303 parent->menuBar()->setItemChecked(10001, false);
2304 parent->menuBar()->setItemEnabled(10003, true);
2306 parent->menuBar()->setItemChecked(10003, Shrink);
2308 /* Automatic Update */
2309 QString AutoUpdate = QAD_CONFIG->getSetting("SMESH:AutomaticUpdate");
2310 if (AutoUpdate.compare("true") == 0) {
2311 parent->menuBar()->setItemChecked(1001, true);
2312 myAutomaticUpdate = true;
2315 parent->menuBar()->setItemChecked(1001, false);
2316 myAutomaticUpdate = false;
2319 QString anIsDisplayEntity = QAD_CONFIG->getSetting("SMESH:DispayEntity");
2320 if(anIsDisplayEntity.compare("true") == 0)
2321 parent->menuBar()->setItemChecked(10071,true);
2323 parent->menuBar()->setItemChecked(10071,false);
2326 SMESH::UpdateSelectionProp();
2329 parent->menuBar()->setItemEnabled(111, false); // IMPORT DAT
2330 //parent->menuBar()->setItemEnabled(112, false); // IMPORT UNV
2335 //=============================================================================
2339 //=============================================================================
2340 void SMESHGUI::DefinePopup(QString & theContext, QString & theParent, QString & theObject)
2342 // NRI : Temporary added
2343 // if ( myStudy->GetProperties()->IsLocked() ) {
2344 // theObject = "NothingSelected";
2345 // theContext = "NothingSelected";
2349 SALOME_Selection *Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
2350 int nbSel = Sel->IObjectCount();
2353 theObject = "NothingSelected";
2354 theContext = "NothingSelected";
2357 if ( myState == 800 && Sel->HasIndex( Sel->firstIObject() ) )
2358 theObject = "Elements";
2360 theObject = ::CheckTypeObject( Sel->firstIObject() );
2364 theObject = ::CheckHomogeneousSelection();
2369 //=============================================================================
2373 //=============================================================================
2374 bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext,
2375 const QString& theParent, const QString& theObject)
2377 // get active study frame
2378 QAD_StudyFrame* studyFrame = myActiveStudy->getActiveStudyFrame();
2380 // get parent component which selected object(s) belongs to
2381 QString parentComp = ( (SALOMEGUI_Desktop*)parent )->getComponentFromSelection();
2384 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
2385 int nbSel = Sel->IObjectCount();
2390 else if ( nbSel == 1 ) {
2391 if ( parentComp != parent->getActiveComponent() ) {
2392 // object not belongs to SMESH module - remove all commands except common Display/Erase...
2394 int id = popup->idAt( 0 );
2395 if ( id <= QAD_TopLabel_Popup_ID )
2396 popup->removeItemAt( 0 );
2402 // get selected interactive object
2403 Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
2404 SALOMEDS::SObject_var SO = SMESH::GetActiveStudyDocument()->FindObjectID( IObject->getEntry() );
2405 // find popup menu's TopLabel item
2406 int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
2407 if ( topItem >= 0 ) {
2408 if ( theParent == "Viewer" ) {
2409 // set bold font for popup menu's TopLabel item (Viewer popup)
2410 QFont fnt = popup->font(); fnt.setBold( TRUE );
2411 popup->removeItem( QAD_TopLabel_Popup_ID );
2412 popup->insertItem( new CustomItem( QString( IObject->getName() ), fnt ), QAD_TopLabel_Popup_ID, topItem );
2414 else if ( theParent == "ObjectBrowser" ) {
2415 // remove popup menu's TopLabel item (Object Browser popup)
2416 popup->removeItem( QAD_TopLabel_Popup_ID );
2420 if ( theObject == "Hypothesis" || theObject == "Algorithm" ) {
2421 // remove Display/Erase commands
2422 popup->removeItem( QAD_Display_Popup_ID );
2423 popup->removeItem( QAD_DisplayOnly_Popup_ID );
2424 popup->removeItem( QAD_Erase_Popup_ID );
2425 // remove "Unassign ..." command if hyp/algo is not assigned
2426 if ( SO->_is_nil() || !IObject->hasReference()/* !IsReferencedObject( SO ) */)
2427 popup->removeItem( 1102 );
2429 else if ( theObject == "Mesh" || theObject == "SubMesh" || theObject == "Group" ) {
2431 GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh( SO );
2432 if ( aShapeObject->_is_nil() ) {
2434 popup->removeItem( 701 ); // Compute
2435 popup->removeItem( 705 ); // Edit hypothesis
2436 popup->removeItem( 706 ); // ...
2438 SMESH::SMESH_GroupOnGeom_var aGeomGroup =
2439 SMESH::SMESH_GroupOnGeom::_narrow( SO->GetObject() );
2440 if ( !aGeomGroup->_is_nil() ) // group linked on geometry
2441 popup->removeItem( 803 ); // EDIT GROUP
2443 SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
2444 // if object has actor
2445 if ( anActor && studyFrame->getTypeView() == VIEW_VTK ) {
2446 VTKViewer_RenderWindowInteractor* myRenderInter = SMESH::GetCurrentVtkView()->getRWInteractor();
2447 if ( myRenderInter->isVisible( IObject ) ) {
2448 popup->removeItem( QAD_Display_Popup_ID );
2449 popup->setItemChecked( 9010, anActor->GetPointsLabeled() ); // Numbering / Display Nodes #
2450 popup->setItemChecked( 9011, anActor->GetCellsLabeled() ); // Numbering / Display Elements #
2451 TVisualObjPtr aVisualObj = anActor->GetObject();
2452 int aNbEdges = aVisualObj->GetNbEntities(SMDSAbs_Edge);
2453 int aNbFaces = aVisualObj->GetNbEntities(SMDSAbs_Face);
2454 int aNbVolumes = aVisualObj->GetNbEntities(SMDSAbs_Volume);
2456 QMenuItem* mi = popup->findItem( 1131 );
2457 if ( mi && mi->popup() ) {
2458 int prType = anActor->GetRepresentation();
2459 // Display Mode / Wireframe
2460 if(aNbVolumes == 0 && aNbFaces == 0 && aNbEdges == 0){
2461 mi->popup()->removeItem( 211 );
2463 mi->popup()->setItemChecked( 211, prType == SMESH_Actor::eEdge );
2465 // Display Mode / Shading
2466 if(aNbFaces == 0 && aNbVolumes == 0){
2467 mi->popup()->removeItem( 212 );
2469 mi->popup()->setItemChecked( 212, prType == SMESH_Actor::eSurface );
2471 // Display Mode / Points
2472 mi->popup()->setItemChecked( 215, prType == SMESH_Actor::ePoint );
2473 // Display Mode / Shrink
2474 bool isShrunk = anActor->IsShrunk();
2475 bool isShrunkable = anActor->IsShrunkable();
2476 mi->popup()->setItemChecked( 213, isShrunk );
2477 mi->popup()->setItemEnabled( 213, prType != SMESH_Actor::ePoint && isShrunkable);
2481 mi = popup->findItem( 1135 );
2483 if (aNbVolumes>0) aIsSomething++;
2484 if (aNbFaces>0) aIsSomething++;
2485 if (aNbEdges>0) aIsSomething++;
2486 if ( mi && (aIsSomething <= 1)){
2487 popup->removeItem(1135);
2488 }else if ( mi && mi->popup() ) {
2489 QPopupMenu* aPopup = mi->popup();
2490 unsigned int aMode = anActor->GetEntityMode();
2492 bool aIsVolumesMode = aMode & SMESH_Actor::eVolumes;
2493 bool aIsFacesMode = aMode & SMESH_Actor::eFaces;
2494 bool aIsEdgesMode = aMode & SMESH_Actor::eEdges;
2497 aPopup->removeItem( 219 );
2499 aPopup->setItemChecked( 219, aIsVolumesMode );
2502 aPopup->removeItem( 218 );
2504 aPopup->setItemChecked( 218, aIsFacesMode );
2508 aPopup->removeItem( 217 );
2510 aPopup->setItemChecked( 217, aIsEdgesMode );
2513 bool aIsRemove = (aNbVolumes == 0 || aIsVolumesMode);
2514 aIsRemove &= (aNbFaces == 0 || aIsFacesMode);
2515 aIsRemove &= (aNbEdges == 0 || aIsEdgesMode);
2518 aPopup->removeItem( 220 );
2522 mi = popup->findItem( 2000 );
2523 if ( mi && mi->popup() ) {
2524 SMESH_Actor::eControl cMode = anActor->GetControlMode();
2526 case SMESH_Actor::eLength:
2527 mi->popup()->setItemChecked( 6001, true ); break;
2528 case SMESH_Actor::eLength2D:
2529 mi->popup()->setItemChecked( 6018, true ); break;
2530 case SMESH_Actor::eFreeEdges:
2531 mi->popup()->setItemChecked( 6002, true );
2532 mi->popup()->removeItem( 201 );
2534 case SMESH_Actor::eFreeBorders:
2535 mi->popup()->setItemChecked( 6003, true );
2536 mi->popup()->removeItem( 201 );
2538 case SMESH_Actor::eMultiConnection:
2539 mi->popup()->setItemChecked( 6004, true ); break;
2540 case SMESH_Actor::eMultiConnection2D:
2541 mi->popup()->setItemChecked( 6019, true ); break;
2542 case SMESH_Actor::eArea:
2543 mi->popup()->setItemChecked( 6011, true ); break;
2544 case SMESH_Actor::eTaper:
2545 mi->popup()->setItemChecked( 6012, true ); break;
2546 case SMESH_Actor::eAspectRatio:
2547 mi->popup()->setItemChecked( 6013, true ); break;
2548 case SMESH_Actor::eAspectRatio3D:
2549 mi->popup()->setItemChecked( 6017, true ); break;
2550 case SMESH_Actor::eMinimumAngle:
2551 mi->popup()->setItemChecked( 6014, true ); break;
2552 case SMESH_Actor::eWarping:
2553 mi->popup()->setItemChecked( 6015, true ); break;
2554 case SMESH_Actor::eSkew:
2555 mi->popup()->setItemChecked( 6016, true ); break;
2556 case SMESH_Actor::eNone:
2558 mi->popup()->removeItem( 200 );
2559 mi->popup()->removeItem( 201 );
2562 TVisualObjPtr aVisualObj = anActor->GetObject();
2564 mi->popup()->removeItem( 6001 );
2565 mi->popup()->removeItem( 6003 );
2566 mi->popup()->removeItem( 6004 );
2569 mi->popup()->removeItem( 6018 );
2570 mi->popup()->removeItem( 6002 );
2571 mi->popup()->removeItem( 6011 );
2572 mi->popup()->removeItem( 6012 );
2573 mi->popup()->removeItem( 6013 );
2574 mi->popup()->removeItem( 6014 );
2575 mi->popup()->removeItem( 6015 );
2576 mi->popup()->removeItem( 6016 );
2577 mi->popup()->removeItem( 6019 );
2579 if(aNbVolumes == 0){
2580 mi->popup()->removeItem( 6017 );
2582 if(aNbFaces == 0 && aNbEdges == 0 && aNbVolumes == 0)
2583 popup->removeItem( 2000 ); // Scalar Bar
2587 popup->removeItem( QAD_Erase_Popup_ID );
2588 popup->removeItem( 114 ); // Numbering popup menu
2589 popup->removeItem( 1131 ); // Display mode
2590 popup->removeItem( 1132 ); // Color / size
2591 popup->removeItem( 1133 ); // Transparency
2592 popup->removeItem( 1134 ); // Clipping
2593 popup->removeItem( 2000 ); // Scalar Bar
2595 // VSR 03/02/05 - check if actor is empty ----- start -----
2596 vtkUnstructuredGrid* vtkGrid = anActor->GetUnstructuredGrid();
2597 if ( vtkGrid->GetNumberOfPoints() + vtkGrid->GetNumberOfCells() == 0 ) {
2598 popup->removeItem( QAD_Display_Popup_ID );
2599 popup->removeItem( QAD_DisplayOnly_Popup_ID );
2600 popup->removeItem( QAD_Erase_Popup_ID );
2602 // VSR 03/02/05 - check if actor is empty ----- finish -----
2605 // object doesn't have actor
2606 CORBA::Object_var anObject = SO->GetObject();
2607 bool bDisplay = false;
2608 if ( !CORBA::is_nil( anObject ) ) {
2609 SMESH::SMESH_Mesh_var aMeshObj = SMESH::SMESH_Mesh::_narrow( anObject );
2610 if ( !aMeshObj->_is_nil() && ( aMeshObj->NbNodes() > 0 || aMeshObj->NbFaces() > 0 || aMeshObj->NbVolumes() > 0 ) )
2612 SMESH::SMESH_subMesh_var aSubMeshObj = SMESH::SMESH_subMesh::_narrow( anObject );
2613 if ( !aSubMeshObj->_is_nil() && ( aSubMeshObj->GetNumberOfNodes(false) > 0 || aSubMeshObj->GetNumberOfElements() > 0 ) )
2615 SMESH::SMESH_GroupBase_var aGroupObj = SMESH::SMESH_GroupBase::_narrow( anObject );
2616 if ( !aGroupObj->_is_nil() && aGroupObj->Size() > 0 )
2620 popup->removeItem( QAD_Display_Popup_ID );
2621 popup->removeItem( QAD_DisplayOnly_Popup_ID );
2623 popup->removeItem( QAD_Erase_Popup_ID );
2624 popup->removeItem( 114 ); // Numbering popup menu
2625 popup->removeItem( 1131 ); // Display mode
2626 popup->removeItem( 1132 ); // Color / size
2627 popup->removeItem( 1133 ); // Transparency
2628 popup->removeItem( 1134 ); // Clipping
2629 popup->removeItem( 2000 ); // Scalar Bar
2632 else if( theObject!="Component" ) {
2633 // another SMESH object
2634 popup->removeItem( QAD_Display_Popup_ID );
2635 popup->removeItem( QAD_DisplayOnly_Popup_ID );
2636 popup->removeItem( QAD_Erase_Popup_ID );
2641 // multiple selection
2642 if ( parentComp != parent->getActiveComponent() ) {
2643 // object not belongs to SMESH module - remove all commands except common Display/Erase...
2645 int id = popup->idAt( 0 );
2646 if ( id <= QAD_TopLabel_Popup_ID )
2647 popup->removeItemAt( 0 );
2651 if ( parentComp.isNull() ) {
2652 // objects from different components are selected
2653 popup->removeItem( QAD_DisplayOnly_Popup_ID );
2654 popup->removeItem( QAD_Display_Popup_ID );
2655 popup->removeItem( QAD_Erase_Popup_ID );
2659 QString type = ::CheckHomogeneousSelection();
2660 if ( type != "Heterogeneous Selection" ) {
2661 int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
2662 if ( topItem >= 0 ) {
2663 // set bold font for popup menu's TopLabel item
2664 QFont fnt = popup->font(); fnt.setBold( TRUE );
2665 popup->removeItem( QAD_TopLabel_Popup_ID );
2666 popup->insertItem( new CustomItem( QString("%1 ").arg( nbSel ) + type + "(s) ", fnt ), QAD_TopLabel_Popup_ID, topItem );
2674 //=============================================================================
2675 /*! Method: BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
2676 * Purpose: ensures that the actor for the given <theIO> exists in the active VTK view
2678 //=============================================================================
2679 void SMESHGUI::BuildPresentation( const Handle(SALOME_InteractiveObject) & theIO,
2682 if(theIO->hasEntry()){
2683 QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
2684 QAD_StudyFrame *aStudyFrame = aStudy->getActiveStudyFrame();
2685 SMESH::UpdateView(aStudyFrame,SMESH::eDisplay,theIO->getEntry());
2689 void SMESHGUI::SupportedViewType(int *buffer, int bufferSize)
2691 if (!buffer || !bufferSize)
2693 buffer[0] = (int)VIEW_VTK;
2696 void SMESHGUI::Deactivate()
2698 if ( SMESHGUI::GetSMESHGUI() ) {
2699 SMESHGUI::GetSMESHGUI()->EmitSignalCloseAllDialogs();