From 16d15847f8e62e2d15606ab03720db2fe15fbaf1 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 7 Sep 2005 06:10:05 +0000 Subject: [PATCH] This commit was generated by cvs2git to create branch 'BR-D5-38-2003'. Cherrypick from master 2005-09-07 06:10:04 UTC apo 'To customize popup actions': src/VISUGUI/VisuGUI.cxx src/VISUGUI/VisuGUI.h src/VISUGUI/VisuGUI_PopupTools.cxx --- src/VISUGUI/VisuGUI.cxx | 2896 ++++++++++++++++++++++++++++ src/VISUGUI/VisuGUI.h | 152 ++ src/VISUGUI/VisuGUI_PopupTools.cxx | 217 +++ 3 files changed, 3265 insertions(+) create mode 100644 src/VISUGUI/VisuGUI.cxx create mode 100644 src/VISUGUI/VisuGUI.h create mode 100644 src/VISUGUI/VisuGUI_PopupTools.cxx diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx new file mode 100644 index 00000000..80b469c3 --- /dev/null +++ b/src/VISUGUI/VisuGUI.cxx @@ -0,0 +1,2896 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI.cxx +// Author : Laurent CORNABE +// Module : VISU +// $Header$ + +#include "VisuGUI.h" + +// STL Includes +#include +#include +#include + +// QT Includes +#include +#include +#include + +// VTK Includes +#include +#include +#include + +// SALOME Includes +#include "SALOME_LifeCycleCORBA.hxx" + +#include "SUIT_ResourceMgr.h" +#include "SUIT_MessageBox.h" + +#include "SUIT_ViewWindow.h" +#include "SUIT_ViewManager.h" + +#include "CAM_Module.h" + +#include "SVTK_RenderWindow.h" +#include "SVTK_ViewWindow.h" +#include "SVTK_ViewModel.h" +#include "SVTK_Functor.h" + +#include "SPlot2d_ViewModel.h" +#include "SPlot2d_SetupPlot2dDlg.h" +#include "Plot2d_SetupCurveDlg.h" + +#include "OB_Browser.h" + +#include "SALOME_ListIO.hxx" +#include "SALOME_ListIteratorOfListIO.hxx" + +#include "SalomeApp_Application.h" +#include "SalomeApp_DataModel.h" +#include "SalomeApp_Study.h" +#include "SalomeApp_SelectionMgr.h" +#include "SalomeApp_Selection.h" +#include "SalomeApp_Preferences.h" + +#include "VISUConfig.hh" +#include "VISU_Gen_i.hh" +#include "VISU_Mesh_i.hh" +#include "VISU_Table_i.hh" +#include "VISU_Result_i.hh" +#include "VISU_View_i.hh" +#include "VISU_ViewManager_i.hh" +#include "VISU_Plot3D_i.hh" + +#include "VISU_Actor.h" + +#include "VisuGUI_Prs3dTools.h" +#include "VisuGUI_Tools.h" + +#include "VisuGUI_PopupTools.h" +#include "VisuGUI_NameDlg.h" +#include "VisuGUI_FileDlg.h" +#include "VisuGUI_CursorDlg.h" +#include "VisuGUI_Selection.h" +#include "VisuGUI_TimeAnimation.h" +#include "VisuGUI_EditContainerDlg.h" +#include "VisuGUI_NonIsometricDlg.h" +#include "VisuGUI_ClippingDlg.h" +#include "VisuGUI_Plot3DDlg.h" +#include "VisuGUI_CubeAxesDlg.h" +#include "VisuGUI_OffsetDlg.h" + +#include "VISU_ScalarMap_i.hh" +#include "VisuGUI_ScalarBarDlg.h" + +#include "VISU_DeformedShape_i.hh" +#include "VisuGUI_DeformedShapeDlg.h" + +#include "VISU_IsoSurfaces_i.hh" +#include "VisuGUI_IsoSurfacesDlg.h" + +#include "VISU_CutPlanes_i.hh" +#include "VisuGUI_CutPlanesDlg.h" + +#include "VISU_CutLines_i.hh" +#include "VisuGUI_CutLinesDlg.h" + +#include "VISU_StreamLines_i.hh" +#include "VisuGUI_StreamLinesDlg.h" + +#include "VISU_Vectors_i.hh" +#include "VisuGUI_VectorsDlg.h" + +#include "VisuGUI_TableDlg.h" + +#include "SALOMEconfig.h" +#include CORBA_SERVER_HEADER(MED_Gen) + +#include "utilities.h" + +#include "VisuGUI_ActionsDef.h" + +using namespace VISU; + +#ifdef _DEBUG_ +static int MYDEBUG = 1; +#else +static int MYDEBUG = 0; +#endif + +////////////////////////////////////////////////// +// Class: VisuGUI +////////////////////////////////////////////////// + +VisuGUI::VisuGUI(): + SalomeApp_Module( "VISU" ) +{ +} + + +VisuGUI::~VisuGUI() +{ +} + + +void +VisuGUI:: +OnImportFromFile() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()"); + CheckLock(GetCStudy(GetAppStudy(this))); + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + + QStringList aFilter; + aFilter.append( tr("FLT_MED_FILES") ); + aFilter.append( tr("FLT_ALL_FILES") ); + + QFileInfo aFileInfo = + SUIT_FileDlg::getFileName(GetDesktop(this), + "", + aFilter, + tr("MEN_IMPORT_FROM_FILE"), + true); + if(aFileInfo.exists()) { + application()->putInfo( "Importing From File " + aFileInfo.filePath() + "..." ); + + VISU::Result_var aResult; + bool anIsBuild = aResourceMgr->booleanValue("VISU", "full_med_loading", false); + if (VisuGUI_FileDlg::IsBuild) { + aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath()); + if (!CORBA::is_nil(aResult.in())) + if (Result_i* aRes = dynamic_cast(GetServant(aResult).in())) { + if (!aRes->IsPossible()) + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_CANT_BUILD_PRESENTATION"), + tr("BUT_OK")); + else + aRes->BuildAll(); + } + } else { + aResourceMgr->setValue("VISU", "full_med_loading", false); + aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath()); + aResourceMgr->setValue("VISU", "full_med_loading", anIsBuild); + } + + if (CORBA::is_nil(aResult.in())) { + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ERROR_IN_THE_FILE"), + tr("BUT_OK")); + }else{ + application()->putInfo(aFileInfo.filePath() + tr("INF_DONE")); + UpdateObjBrowser(this); + } + } +} + + +void +VisuGUI:: +OnExploreMEDFile() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnExploreMEDFile()"); + _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); + CheckLock(aStudy); + + SALOME_MED::MED_Gen_var aGen = GetMEDEngine(); + + QStringList aFilter; + aFilter.append( tr("FLT_MED_FILES") ); + aFilter.append( tr("FLT_ALL_FILES") ); + + QFileInfo aFileInfo = + SUIT_FileDlg::getFileName(GetDesktop(this), + "", + aFilter, + tr("MEN_EXPLORE_MED_FILE"), + true); + if(aFileInfo.exists()){ + application()->putInfo( tr("MEN_EXPLORE_MED_FILE") + " " + aFileInfo.filePath() + "..." ); + std::string aStudyName = aStudy->Name(); + try + { + aGen->readStructFileWithFieldType(aFileInfo.filePath(),aStudyName.c_str()); + } + catch(...) + { + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ERROR_IN_THE_FILE"), + tr("BUT_OK")); + } + application()->putInfo(aFileInfo.filePath()+tr("INF_DONE")); + getApp()->updateObjectBrowser(true); // as need to update MED tree + getApp()->updateActions(); + } +} + + +void +VisuGUI:: +OnImportTableFromFile() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnImportTableFromFile()"); + CheckLock(GetCStudy(GetAppStudy(this))); + + QStringList aFilter; + aFilter.append( tr("FLT_TABLE_FILES") ); + aFilter.append( tr("FLT_ALL_FILES") ); + + QFileInfo aFileInfo = + SUIT_FileDlg::getFileName(GetDesktop(this), + "", + aFilter, + tr("MEN_IMPORT_TABLE"), + true); + if (aFileInfo.exists()) { + application()->putInfo( tr("MEN_IMPORT_TABLE") + " " + aFileInfo.filePath() + " ..." ); + + CORBA::Object_var anObject = GetVisuGen(this)->ImportTables(aFileInfo.filePath()); + + if (CORBA::is_nil(anObject.in())) { + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ERROR_IN_THE_FILE"), + tr("BUT_OK")); + } else { + application()->putInfo(aFileInfo.filePath()+tr("INF_DONE")); + UpdateObjBrowser(this); + } + } +} + +void +VisuGUI:: +OnExportTableToFile() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnExportTableToFile()"); + + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + if (aListIO.Extent() > 0) { + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + if (anIO->hasEntry()) { + _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry()); + if (!aSObj) return; + + // find table attribute + bool isTOR = true; + _PTR(GenericAttribute) anAttr; + + if (!aSObj->FindAttribute(anAttr, "AttributeTableOfReal")) { + isTOR = false; + if (!aSObj->FindAttribute(anAttr, "AttributeTableOfInteger")) { + // if the current SObject is a table title + // we take a father contaning the table + aSObj = aSObj->GetFather(); + + if (aSObj->FindAttribute(anAttr, "AttributeTableOfReal")) { + isTOR = true; + } else { + if (!aSObj->FindAttribute(anAttr, "AttributeTableOfInteger")) { + return; + } + } + } + } + + // get table title in order to have default name of the file + QString aTitle; + if (isTOR) { + _PTR(AttributeTableOfReal) aTabAttr (anAttr); + if (!aTabAttr) return; + aTitle = aTabAttr->GetTitle().c_str(); + } else { + _PTR(AttributeTableOfInteger) aTabAttr (anAttr); + if (!aTabAttr) return; + aTitle = aTabAttr->GetTitle().c_str(); + } + aTitle.simplifyWhiteSpace(); + aTitle = aTitle.replace(QRegExp(" "), "_"); + + // get default path for the file + SUIT_ResourceMgr* aResourceMgr = GetResourceMgr(); + QString aDir = aResourceMgr->stringValue("VISU","OutputDir",""); + if (aDir.isEmpty()) { + aDir = aResourceMgr->stringValue("VISU","InputDir",""); + if (aDir.isEmpty()) { + aDir = getenv("CSF_PATHData"); + } + } + QString aPath = Qtx::addSlash(aDir) + aTitle; + + // get name for the file + QStringList aFilter; + aFilter.append("Table Files (*.xls)"); + + QFileInfo aFileInfo = + SUIT_FileDlg::getFileName(GetDesktop(this), + aPath, + aFilter, + tr("MEN_EXPORT_TABLE"), // "Export Table To File" + false); + + // export + QString aFile = aFileInfo.filePath(); + if (!aFile.isEmpty()) { + application()->putInfo(tr("MEN_EXPORT_TABLE") + " " + aFile + " ..."); + aDir = Qtx::dir(aFile, true); + aResourceMgr->setValue("VISU", "OutputDir", aDir); + + try { + GetVisuGen(this)->ExportTableToFile(GetSObject(aSObj), aFile.latin1()); + application()->putInfo(aFile + " " + tr("INF_DONE")); + } catch(std::exception& ex) { + INFOS(ex.what()); + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ERROR_DURING_EXPORT") + " " + tr(ex.what()), + tr("BUT_OK")); + } catch(...) { + INFOS(tr("ERR_ERROR_DURING_EXPORT")); + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ERROR_DURING_EXPORT"), + tr("BUT_OK") ); + } + } + } + } +} + +void +VisuGUI:: +OnImportMedField() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + SALOMEDS::Study_var aStudy = GetDSStudy(aCStudy); + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + SALOME_ListIteratorOfListIO It (aListIO); + QApplication::setOverrideCursor(Qt::waitCursor); + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject) anIO = It.Value(); + SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry()); + if (!aSObject->_is_nil()) { + CORBA::Object_var anObject = VISU::SObjectToObject(aSObject); + if (!CORBA::is_nil(anObject)) { + SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject); + if (!CORBA::is_nil(aMED.in())) + GetVisuGen(this)->ImportMed(aSObject); + SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject); + if (!CORBA::is_nil(aField.in())) + GetVisuGen(this)->ImportMedField(aField); + } else { + SALOMEDS::SObject_var aSFather = aSObject->GetFather(); + SALOMEDS::GenericAttribute_var anAttr; + aSFather->FindAttribute(anAttr, "AttributeName"); + SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); + CORBA::String_var aValue = aName->Value(); + if (strcmp(aValue.in(), "MEDFIELD") == 0) + GetVisuGen(this)->ImportMed(aSObject); + } + } + } + UpdateObjBrowser(this, true); + QApplication::restoreOverrideCursor(); +} + +void +CreateCurves( SalomeApp_Module* theModule, + VISU::CutLines_i* thePrs, + QDialog* theDlg, + const bool theCreate = true ) +{ + if ( !thePrs ) + return; + VisuGUI_CutLinesDlg* aCutDlg = dynamic_cast( theDlg ); + if ( !aCutDlg ) + return; + + _PTR(Study) aStudy = GetCStudy( GetAppStudy( theModule ) ); + _PTR(SObject) aSObject = aStudy->FindObjectID( thePrs->GetEntry().latin1() ); + + if ( !theCreate && aSObject ) { + // Remove old Table + _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aSObject); + for (; aIter->More(); aIter->Next()) { + _PTR(SObject) aTblObj = aIter->Value(); + if ( aTblObj ) { + _PTR(GenericAttribute) anAttr; + if (aTblObj->FindAttribute( anAttr, "AttributeName" ) ) { + aBuilder->RemoveObjectWithChildren( aIter->Value() ); // We should have only one child + break; + } + } + } + } + + if ( aCutDlg->isGenerateTable() ) { + GetVisuGen( theModule )->CreateTable( thePrs->GetEntry() ); + if ( aCutDlg->isGenerateCurves() ) { + if ( aSObject ) { + _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aSObject); + for (; aIter->More(); aIter->Next()) { + _PTR(SObject) aTblObj = aIter->Value(); + if ( aTblObj ) { + _PTR(GenericAttribute) anAttr; + if ( aTblObj->FindAttribute( anAttr, "AttributeName" ) ) { + CreatePlot( theModule, aTblObj ); + } + } + } + } + } + } + + if (!theCreate && aSObject) { + UpdateObjBrowser(theModule); + } +} + +void +VisuGUI:: +OnCreateMesh() +{ + _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aStudy)) + return; + + // Get selected SObject + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (anIO.IsNull() || !anIO->hasEntry()) + return; + + // create a VTK view window if it does not exist + GetViewWindow( this, /*create=*/true ); + + CreateMesh(this, anIO); +} + +void +VisuGUI:: +OnCreateManyMesh() +{ + _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aStudy)) + return; + + // create a VTK view window if it does not exist + GetViewWindow( this, /*create=*/true ); + + // Get selected SObject + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + SALOME_ListIteratorOfListIO anIter (aListIO); + for (; anIter.More(); anIter.Next()) { + Handle(SALOME_InteractiveObject) anIO = anIter.Value(); + if (anIO.IsNull() || !anIO->hasEntry()) + return; + + CreateMesh(this, anIO); + } +} + +void +VisuGUI:: +OnCreateScalarMap() +{ + CreatePrs3d(this); +} + + +void +VisuGUI:: +OnCreateDeformedShape() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreateVectors() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreateIsoSurfaces() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreateCutPlanes() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreateCutLines() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreateStreamLines() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreatePlot3D() +{ + CreatePrs3d(this); +} + +void +VisuGUI:: +OnCreatePlot2dView() +{ + CheckLock(GetCStudy(GetAppStudy(this))); + GetVisuGen( this )->CreateContainer(); + UpdateObjBrowser(this); +} + +void +VisuGUI:: +OnDisplayPrs() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs"); + + SVTK_ViewWindow* vw = GetViewWindow( this, /*create=*/true ); + + QApplication::setOverrideCursor(Qt::waitCursor); + SALOME_ListIO aList; + SalomeApp_SelectionMgr* mgr = GetSelectionMgr(this); + mgr->selectedObjects(aList); + + Handle(SALOME_InteractiveObject) anIO; + for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { + anIO = it.Value(); + CORBA::Object_var anObject = GetSelectedObj( GetAppStudy(this), anIO->getEntry() ); + if ( !CORBA::is_nil( anObject ) ) { + // is it Prs3d object ? + VISU::Prs3d_i* aPrsObject = dynamic_cast(VISU::GetServant(anObject).in()); + if(aPrsObject){ + if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Prs3d object"); + UpdateViewer( this, aPrsObject ); + if ( vw ) { + vw->highlight(anIO, 1); + } + continue; + } + // is it Curve ? + VISU::Curve_i* aCurve = dynamic_cast(VISU::GetServant(anObject).in()); + if(aCurve){ + if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Curve object"); + PlotCurve( this, aCurve, VISU::eDisplay ); + continue; + } + // is it Container ? + VISU::Container_i* aContainer = dynamic_cast(VISU::GetServant(anObject).in()); + if(aContainer){ + if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Container object"); + PlotContainer( this, aContainer, VISU::eDisplay ); + continue; + } + // is it Table ? + VISU::Table_i* aTable = dynamic_cast(VISU::GetServant(anObject).in()); + if(aTable){ + if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Table object"); + PlotTable( this, aTable, VISU::eDisplay ); + continue; + } + } + } + if ( vw ) { + vw->getRenderer()->ResetCameraClippingRange(); + vw->Repaint(); + } + QApplication::restoreOverrideCursor(); +} + +void +VisuGUI:: +OnDisplayOnlyPrs() +{ + OnEraseAll(); + OnDisplayPrs(); +} + +void +VisuGUI:: +OnErasePrs() +{ + if(MYDEBUG) MESSAGE("OnErasePrs"); + + QApplication::setOverrideCursor(Qt::waitCursor); + + SVTK_ViewWindow* vw = GetViewWindow( this ); + if (vw) + vw->unHighlightAll(); + + SALOME_ListIO aList; + SalomeApp_SelectionMgr* mgr = GetSelectionMgr(this); + mgr->selectedObjects(aList); + + Handle(SALOME_InteractiveObject) anIO; + for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { + anIO = it.Value(); + CORBA::Object_var anObject = GetSelectedObj( GetAppStudy(this), anIO->getEntry() ); + ErasePrs( this, anObject, false ); + } + + if (vw) + vw->Repaint(); + + QApplication::restoreOverrideCursor(); +} + + +void +VisuGUI:: +OnEditScalarMap() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditDeformedShape() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditCutPlanes() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditCutLines() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditIsoSurfaces() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditVectors() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditStreamLines() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEditPlot3D() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + aViewWindow->highlight(anIO, 1); + } + } +} + + +void +VisuGUI:: +OnEraseAll() +{ + if (SVTK_ViewWindow* vw = GetViewWindow()) { + vw->unHighlightAll(); + if (vtkRenderer *aRen = vw->getRenderer()) { + vtkActor *anActor; + vtkActorCollection *anActColl = aRen->GetActors(); + for (anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ) { + if (anActor->GetVisibility() > 0) + if (VISU_Actor* anVISUActor = VISU_Actor::SafeDownCast(anActor)) { + anVISUActor = anVISUActor->GetParent(); + anVISUActor->VisibilityOff(); + } + } + vw->Repaint(); + } + } else if (SPlot2d_Viewer* aPlot2d = GetPlot2dViewer(this, false)) { + aPlot2d->EraseAll(); + } +} + +void +VisuGUI:: +OnMakeSurfaceframe() +{ + ChangeRepresentation(this, VISU::SURFACEFRAME); +} + +void +VisuGUI:: +OnMakeInsideframe() +{ + ChangeRepresentation(this, VISU::INSIDEFRAME); +} + +void +VisuGUI:: +OnMakeWireframe() +{ + ChangeRepresentation(this, VISU::WIREFRAME); +} + +void +VisuGUI:: +OnMakeSurface() +{ + ChangeRepresentation(this, VISU::SHADED); +} + +void +VisuGUI:: +OnMakePoints() +{ + ChangeRepresentation(this, VISU::POINT); +} + +void +VisuGUI:: +OnMakeShrink() +{ + ChangeRepresentation(this, VISU::SHRINK); +} + +void +VisuGUI:: +OnChangeColor() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in()); + if (!aPrs3d) return; + + SVTK_ViewWindow* vw = GetViewWindow(); + if (!vw) return; + + VISU_Actor* anActor = GetActor(aPrs3d, vw); + if (!anActor) return; + + VISU::Mesh_i* aMesh = dynamic_cast(aPrs3d); + VISU::DeformedShape_i* aDeformedShape = dynamic_cast(aPrs3d); + SALOMEDS::Color anOldColor, aNewColor; + int aRepresent = anActor->GetRepresentation(); + if (aMesh) { + switch (aRepresent) { + case VISU::POINT : + anOldColor = aMesh->GetNodeColor(); + break; + case VISU::WIREFRAME : + case VISU::INSIDEFRAME : + anOldColor = aMesh->GetLinkColor(); + break; + case VISU::SHADED : + case VISU::SURFACEFRAME : + anOldColor = aMesh->GetCellColor(); + break; + } + } else if (aDeformedShape) { + anOldColor = aDeformedShape->GetColor(); + } else { + return; + } + + QColor aColor (int(255*anOldColor.R), + int(255*anOldColor.G), + int(255*anOldColor.B)); + QColor aColorNew = QColorDialog::getColor(aColor, GetDesktop(this)); + if (aColorNew.isValid()) { + aNewColor.R = aColorNew.red()/255.; + aNewColor.G = aColorNew.green()/255.; + aNewColor.B = aColorNew.blue()/255.; + if (aMesh) { + switch (aRepresent) { + case VISU::POINT : + aMesh->SetNodeColor(aNewColor); + break; + case VISU::WIREFRAME : + case VISU::INSIDEFRAME : + aMesh->SetLinkColor(aNewColor); + break; + case VISU::SHADED : + case VISU::SURFACEFRAME : + aMesh->SetCellColor(aNewColor); + break; + } + } else { + aDeformedShape->SetColor(aNewColor); + } + RecreateActor(this, aPrs3d); + } +} + +void +VisuGUI:: +OnChangeWireframeColor() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in()); + if (!aPrs3d) return; + + SVTK_ViewWindow* vw = GetViewWindow(); + if (!vw) return; + + VISU_Actor* anActor = GetActor(aPrs3d, vw); + if (!anActor) return; + + if (VISU::Mesh_i* aMesh = dynamic_cast(aPrs3d)) { + SALOMEDS::Color anOldColor = aMesh->GetLinkColor(), aNewColor; + QColor aColor (int(255*anOldColor.R), + int(255*anOldColor.G), + int(255*anOldColor.B)); + QColor aColorNew = QColorDialog::getColor(aColor, GetDesktop(this)); + if (aColorNew.isValid()) { + aNewColor.R = aColorNew.red()/255.; + aNewColor.G = aColorNew.green()/255.; + aNewColor.B = aColorNew.blue()/255.; + aMesh->SetLinkColor(aNewColor); + RecreateActor(this, aMesh); + } + } +} + +void +VisuGUI:: +OnChangeOpacity() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); + if (!aPrsObject) return; + + SVTK_ViewWindow* vw = GetViewWindow(); + if (!vw) return; + + VISU_Actor* anActor = GetActor(aPrsObject, vw); + if (!anActor) return; + + VisuGUI_CursorDlg* CursorDlg = + new VisuGUI_CursorDlg (GetDesktop(this), tr("DLG_OPACITY_TITLE"), TRUE); + + CursorDlg->Comment1->setText(tr("DLG_OPACITY_CMT1")); + CursorDlg->Comment2->setText(tr("DLG_OPACITY_CMT2")); + CursorDlg->SpinBox1->setMinValue(0); + CursorDlg->SpinBox1->setMaxValue(100); + + float oldopac = anActor->GetOpacity(); + int intopac = int(oldopac*100. + 0.5); + CursorDlg->SpinBox1->setValue(intopac); + + int ret = CursorDlg->exec(); + if (ret == 1) { + intopac = CursorDlg->SpinBox1->value(); + float newopac = intopac/100.; + anActor->SetOpacity(newopac); + } + delete CursorDlg; +} + +void +VisuGUI:: +OnChangeLines() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); + if (!aPrsObject) return; + + SVTK_ViewWindow* vw = GetViewWindow(); + if (!vw) return; + + VISU_Actor* anActor = GetActor(aPrsObject, vw); + if (!anActor) return; + + VisuGUI_CursorDlg* CursorDlg = + new VisuGUI_CursorDlg (GetDesktop(this), tr("DLG_LINEWIDTH_TITLE"), TRUE); + + CursorDlg->Comment1->setText(tr("DLG_LINEWIDTH_CMT1")); + CursorDlg->Comment2->setText(tr("DLG_LINEWIDTH_CMT2")); + CursorDlg->SpinBox1->setMinValue(1); + CursorDlg->SpinBox1->setMaxValue(10); + + float oldlwid = anActor->GetLineWidth(); + int intlwid = int(oldlwid); + CursorDlg->SpinBox1->setValue(intlwid); + + int ret = CursorDlg->exec(); + if (ret == 1) { + intlwid = CursorDlg->SpinBox1->value(); + float newlwid = intlwid; + anActor->SetLineWidth(newlwid); + } + delete CursorDlg; +} + +void +VisuGUI:: +OnShowTable() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj( this, &anIO ); + _PTR(SObject) SO; + if ( !CORBA::is_nil( anObject ) ) { + VISU::Base_var aVisuObj = VISU::Base::_narrow( anObject ); + if ( !CORBA::is_nil( aVisuObj ) && aVisuObj->GetType() == VISU::TTABLE ) { + CORBA::Object_ptr aTable = VISU::Table::_narrow( anObject ); + if( !CORBA::is_nil( aTable ) ) { + VISU::Table_i* table = dynamic_cast( VISU::GetServant(aTable).in() ); + if ( table ) { + SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( table->GetObjectEntry() ); + } + } + } + } else { + // possibly this is Table SObject + SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( anIO->getEntry() ); + } + + if( !IsSObjectTable( SO ) ) + return; + + VisuGUI_TableDlg* dlg = new VisuGUI_TableDlg( GetDesktop( this ), + SO, + false, + //SAL2670 Orientation of show tables + VisuGUI_TableDlg::ttAuto, + Qt::Vertical ); + dlg->show(); +} + +void +VisuGUI:: +OnCreateTable() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj( this, &anIO ); + _PTR(Study) aStudy = GetCStudy( GetAppStudy( this ) ); + _PTR(SObject) aSObject = aStudy->FindObjectID(anIO->getEntry()); + VISU::CutLines_var aCutLines = VISU::CutLines::_narrow( anObject ); + if(!aCutLines->_is_nil() || IsSObjectTable(aSObject)) { + GetVisuGen( this )->CreateTable( aSObject->GetID().c_str() ); + UpdateObjBrowser(this); + } +} + +void +VisuGUI:: +OnDeleteObjects() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + + SALOME_ListIO aList; + SalomeApp_SelectionMgr* mgr = GetSelectionMgr(this); + mgr->selectedObjects(aList); + int i = 0, nbSelected = aList.Extent(); + if (nbSelected < 1) return; + + const char* entries [nbSelected]; + Handle(SALOME_InteractiveObject) anIO; + for (SALOME_ListIteratorOfListIO it (aList); it.More(); it.Next()) { + anIO = it.Value(); + if (anIO->hasEntry()) + entries[i++] = anIO->getEntry(); + } + nbSelected = i; + if (nbSelected < 1) return; + + // There is a transaction + _PTR(StudyBuilder) aStudyBuilder = aCStudy->NewBuilder(); + aStudyBuilder->NewCommand(); + + for (i = 0; i < nbSelected; i++) { + _PTR(SObject) aSObject = aCStudy->FindObjectID(entries[i]); + if (aSObject) { + DeleteSObject(this, aCStudy, aSObject); + } + } + + // Finish transaction + aStudyBuilder->CommitCommand(); + + //GetActiveStudy()->unHighlightAll(); + UpdateObjBrowser(this, true); +} + +void +VisuGUI:: +OnPlotData() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj( this, &anIO ); + _PTR(SObject) SO; + _PTR(GenericAttribute) anAttr; + _PTR(AttributeName) aName; + QString SOName; + _PTR(Study) aStudy = GetCStudy( GetAppStudy( this ) ); + + if ( !CORBA::is_nil( anObject ) ) { + VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject); + if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TTABLE) { + // Table (VISU object) is selected + CORBA::Object_ptr aTbl = VISU::Table::_narrow( anObject ); + if( !CORBA::is_nil( aTbl ) ) { + VISU::Table_i* table = dynamic_cast(VISU::GetServant(aTbl).in()); + if ( table ) { + _PTR(SObject) SO = aStudy->FindObjectID( table->GetObjectEntry() ); + if ( IsSObjectTable(SO) ) { + // get name of SObject + if ( SO->FindAttribute( anAttr, "AttributeName" ) ) { + aName = anAttr; + SOName = QString( aName->Value().c_str() ); + } + SPlot2d_SetupPlot2dDlg* dlg = new SPlot2d_SetupPlot2dDlg( SO, GetDesktop( this ) ); + if ( dlg->exec() == QDialog::Accepted ) { + if ( !IsStudyLocked( aStudy ) ) { + // if study is not locked - create new container, create curves and insert them + // into container, then plot container if current viewer is of VIEW_PLOT2D type + int horIndex; + QValueList verIndices; + dlg->getCurvesSource( horIndex, verIndices ); + if ( horIndex >= 0 && verIndices.count() > 0 ) { + CORBA::Object_var aContainer = GetVisuGen(this)->CreateContainer(); + if( !CORBA::is_nil( aContainer ) ) { + VISU::Container_i* pContainer = + dynamic_cast(VISU::GetServant(aContainer).in()); + if ( pContainer ) { + for ( int i = 0; i < verIndices.count(); i++ ) { + CORBA::Object_var aNewCurve = + GetVisuGen(this)->CreateCurve( table->_this(), horIndex+1, verIndices[i]+1 ); + if( !CORBA::is_nil( aNewCurve ) ) { + VISU::Curve_i* pCrv = + dynamic_cast(VISU::GetServant(aNewCurve).in()); + if ( pCrv ) { + bool isAuto; + int marker, line, lineWidth; + QColor color; + if ( dlg->getCurveAttributes(verIndices[i], isAuto, marker, + line, lineWidth, color) && !isAuto ) { + SALOMEDS::Color c; + c.R = color.red() /255.; + c.G = color.green()/255.; + c.B = color.blue() /255.; + pCrv->SetColor( c ); + pCrv->SetMarker( ( VISU::Curve::MarkerType )marker ); + pCrv->SetLine( ( VISU::Curve::LineType )line, lineWidth ); + } + pContainer->AddCurve( pCrv->_this() ); + } + } + } + UpdateObjBrowser(this); + PlotContainer( this, pContainer, VISU::eDisplay ); + } + } + } + } + else { + // if study is locked just get curves info and plot them + // if current viewer is of VIEW_PLOT2D type + QPtrList container; + dlg->getCurves( container ); + if ( !container.isEmpty() ) { + GetPlot2dViewer( this )->getActiveViewFrame()->displayCurves( container, true ); + GetPlot2dViewer( this )->getActiveViewFrame()->setTitle( SOName ); + } + } + } + delete dlg; + } + } + } + } + } + else if ( !anIO.IsNull() ) { + // check if Table SObject is selected + SO = aStudy->FindObjectID( anIO->getEntry() ); + if ( IsSObjectTable(SO) ) { + // get name of SObject + if ( SO->FindAttribute( anAttr, "AttributeName" ) ) { + aName = anAttr; + SOName = QString( aName->Value().c_str() ); + } + SPlot2d_SetupPlot2dDlg* dlg = new SPlot2d_SetupPlot2dDlg( SO, GetDesktop( this ) ); + if ( dlg->exec() == QDialog::Accepted ) { + if ( !IsStudyLocked( aStudy ) ) { + // if study is not locked - create new table and container objects, create curves + // and insert them into container, then plot container if current viewer is of VIEW_PLOT2D type + int horIndex; + QValueList verIndices; + dlg->getCurvesSource( horIndex, verIndices ); + if ( horIndex >= 0 && verIndices.count() > 0 ) { + CORBA::Object_var aTable = GetVisuGen(this)->CreateTable( SO->GetID().c_str() ); + CORBA::Object_var aContainer = GetVisuGen(this)->CreateContainer(); + if ( !CORBA::is_nil( aTable ) && !CORBA::is_nil( aContainer ) ) { + VISU::Table_i* pTable = dynamic_cast(VISU::GetServant(aTable).in()); + VISU::Container_i* pContainer = dynamic_cast(VISU::GetServant(aContainer).in()); + + if ( pContainer && pTable ) { + for ( int i = 0; i < verIndices.count(); i++ ) { + CORBA::Object_var aNewCurve = GetVisuGen(this)->CreateCurve + ( pTable->_this(), horIndex+1, verIndices[i]+1 ); + if( !CORBA::is_nil( aNewCurve ) ) { + VISU::Curve_i* pCrv = dynamic_cast(VISU::GetServant(aNewCurve).in()); + if ( pCrv ) { + bool isAuto; + int marker, line, lineWidth; + QColor color; + if ( dlg->getCurveAttributes(verIndices[i], isAuto, marker, + line, lineWidth, color) && !isAuto ) { + SALOMEDS::Color c; + c.R = color.red()/255.; + c.G = color.green()/255.; + c.B = color.blue()/255.; + pCrv->SetColor( c ); + pCrv->SetMarker( ( VISU::Curve::MarkerType )marker ); + pCrv->SetLine( ( VISU::Curve::LineType )line, lineWidth ); + } + pContainer->AddCurve( pCrv->_this() ); + } + } + } + UpdateObjBrowser(this); + PlotContainer( this, pContainer, VISU::eDisplay ); + } + } + } + } else { + // if study is locked just get curves info and plot them + QPtrList container; + dlg->getCurves( container ); + if ( !container.isEmpty() ) { + GetPlot2dViewer( this )->getActiveViewFrame()->displayCurves( container, true ); + GetPlot2dViewer( this )->getActiveViewFrame()->setTitle( SOName ); + } + } + } + delete dlg; + } + } +} + +void +VisuGUI:: +OnCurveProperties() +{ + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + if (aListIO.Extent() != 1) return; + + SalomeApp_Study* aAppStudy = GetAppStudy(this); + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + CORBA::Object_var anObject = GetSelectedObj( aAppStudy, anIO->getEntry() ); + if (CORBA::is_nil( anObject )) return; + + VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject); + if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TCURVE) { + // Curve object + CORBA::Object_ptr aCurve = VISU::Curve::_narrow( anObject ); + if( !CORBA::is_nil( aCurve ) ) { + VISU::Curve_i* aDSCurve = dynamic_cast(VISU::GetServant(aCurve).in()); + if ( aDSCurve && (!IsStudyLocked( GetCStudy(aAppStudy) )) ) { + Plot2d_SetupCurveDlg aDlg(GetDesktop( this )); + + aDlg.setLine( (int)aDSCurve->GetLine(), aDSCurve->GetLineWidth() ); + aDlg.setMarker( (int)aDSCurve->GetMarker() ); + SALOMEDS::Color aColor = aDSCurve->GetColor(); + aDlg.setColor( QColor( (int)(aColor.R*255.), (int)(aColor.G*255.), (int)(aColor.B*255.) ) ); + if( aDlg.exec() == QDialog::Accepted ) { + aDSCurve->SetLine( (VISU::Curve::LineType)aDlg.getLine(), aDlg.getLineWidth() ); + aDSCurve->SetMarker( (VISU::Curve::MarkerType)aDlg.getMarker()); + SALOMEDS::Color newColor; + newColor.R = aDlg.getColor().red()/255.; + newColor.G = aDlg.getColor().green()/255.; + newColor.B = aDlg.getColor().blue()/255.; + aDSCurve->SetColor( newColor ); + PlotCurve(this, aDSCurve, VISU::eDisplay); + } + } + } + } +} + +void +VisuGUI:: +OnClearContainer() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (anIO.IsNull() || CORBA::is_nil(anObject)) + return; + + VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject); + if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TCONTAINER) { + // Container object + CORBA::Object_ptr aCnt = VISU::Container::_narrow(anObject); + if (!CORBA::is_nil(aCnt)) { + VISU::Container_i* container = dynamic_cast(VISU::GetServant(aCnt).in()); + if (container && container->GetNbCurves() > 0) { + container->Clear(); + UpdateObjBrowser(this); + } + } + } +} + +void +VisuGUI:: +OnEditContainer() +{ + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + VISU::Container_i* aContainer = dynamic_cast(aServant.in()); + if (!aContainer) return; + + VisuGUI_EditContainerDlg* aDlg = new VisuGUI_EditContainerDlg (this); + aDlg->initFromPrsObject(aContainer); + if (aDlg->exec()) { + aDlg->storeToPrsObject(aContainer); + UpdateObjBrowser(this, true); + } + delete aDlg; +} + +void +VisuGUI:: +OnSaveViewParams() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + + SUIT_ViewManager* aViewMgr = getApp()->activeViewManager(); + if (aViewMgr->getType() != SVTK_Viewer::Type()) + return; + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + if (aListIO.Extent() > 1) + return; + + if (aListIO.Extent() == 0) { + VISU::View3D_i::SaveViewParams(aViewMgr, VISU::View3D_i::GenerateViewParamsName().latin1()); + } else { + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + VISU::View3D_i::SaveViewParams(aViewMgr, anIO->getName()); + } + UpdateObjBrowser(this); +} + +void +VisuGUI:: +OnRestoreViewParams() +{ + SUIT_ViewManager* aViewMgr = getApp()->activeViewManager(); + if (aViewMgr->getType() != SVTK_Viewer::Type()) + return; + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + if (aListIO.Extent() != 1) + return; + + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + //jfa tmp:VISU::View3D_i::RestoreViewParams(aViewMgr, anIO->getName()); + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));//jfa tmp + _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry());//jfa tmp + VISU::View3D_i::RestoreViewParams(aViewMgr, aSObj->GetName().c_str());//jfa tmp +} + +void +VisuGUI:: +OnRename() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + + _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry()); + if (!aSObj) return; + + //TEST DU PARENT == VISU + _PTR(StudyBuilder) aBuilder = aCStudy->NewBuilder(); + _PTR(GenericAttribute) anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributeName"); + if (anAttr) { + _PTR(AttributeName) aName (anAttr); + QString Name = VisuGUI_NameDlg::getName( GetDesktop( this ), aName->Value().c_str() ); + if (!Name.isEmpty()) { + QApplication::setOverrideCursor(Qt::waitCursor); + + // rename specific objects + if (!CORBA::is_nil(anObject)) { + VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject); + if (!CORBA::is_nil(aVisuObj)) { + switch (aVisuObj->GetType()) { + case VISU::TCURVE: // Curve object + { + CORBA::Object_ptr aCurve = VISU::Curve::_narrow(anObject); + if (!CORBA::is_nil(aCurve)) { + VISU::Curve_i* curve = + dynamic_cast(VISU::GetServant(aCurve).in()); + if (curve) + curve->SetName(Name.latin1()); + } + break; + } + case VISU::TTABLE: // Table object + { + CORBA::Object_ptr aTable = VISU::Table::_narrow(anObject); + if (!CORBA::is_nil(aTable)) { + VISU::Table_i* table = + dynamic_cast(VISU::GetServant(aTable).in()); + if (table) + table->SetName(Name.latin1()); + } + break; + } + case VISU::TCONTAINER: // Container object + { + CORBA::Object_ptr aContainer = VISU::Container::_narrow(anObject); + if (!CORBA::is_nil(aContainer)) { + VISU::Container_i* container = + dynamic_cast(VISU::GetServant(aContainer).in()); + if (container) + container->SetName(Name.latin1()); + } + break; + } + default: + { + } + } + } + } + + // rename the study object + aName->SetValue(Name.latin1()); // rename the SObject + anIO->setName(Name.latin1()); // rename the InteractiveObject + UpdateObjBrowser(this, false); + + QApplication::restoreOverrideCursor(); + } + } +} + +void +VisuGUI:: +OnClippingPlanes() +{ + new VisuGUI_ClippingDlg (this, "", false); +} + +void +VisuGUI:: +OnSweep() +{ + // GetSelectedPrs3d + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::ScalarMap_i* aPrsObject = dynamic_cast(aServant.in()); + if (!aPrsObject) return; + + SVTK_ViewWindow* vw = GetViewWindow(); + if (!vw) return; + + VISU_Actor* aActor = GetActor(aPrsObject, vw); + if (!aActor) return; + + if (!aActor->GetVisibility()) { + aActor->VisibilityOn(); + } + + // Get sweep parameters + SUIT_ResourceMgr* aResourceMgr = GetResourceMgr(); + + double aTempoDbl = aResourceMgr->doubleValue("VISU", "sweeping_time_step", 0.1); + int aTemp = int(1.E6 * aTempoDbl); + + int aCycles = aResourceMgr->integerValue("VISU", "sweeping_number_cycles", 1); + int aSteps = aResourceMgr->integerValue("VISU", "sweeping_time_step", 40); + + // Sweep + QApplication::setOverrideCursor(Qt::waitCursor); + try { + for (int j = 0; j < aCycles; j++) { + for (int i = 0; i <= aSteps; i++) { + float aPercents = float(i)/aSteps; + aPrsObject->SetMapScale(aPercents); + aPrsObject->UpdateActor(aActor); + vw->getRenderWindow()->getRenderWindow()->Render(); + usleep(aTemp); + } + } + } catch (std::exception& exc) { + INFOS("Follow exception was occured :\n" << exc.what()); + } catch (...) { + INFOS("Unknown exception was occured!"); + } + QApplication::restoreOverrideCursor(); +} + +void +VisuGUI:: +OnTimeAnimation() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + VisuGUI_TimeAnimationDlg* aAnimationDlg = +// new VisuGUI_TimeAnimationDlg(GetDesktop(this), aCStudy); + new VisuGUI_TimeAnimationDlg (this, aCStudy); + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + bool isDefined = false; + long aNbTimes = 0; + SALOME_ListIteratorOfListIO It (aListIO); + for (; It.More(); It.Next()) { + _PTR(SObject) aSObject = aCStudy->FindObjectID(It.Value()->getEntry()); + if (!aSObject) continue; + if (getValue(aSObject, "myComment") == QString("FIELD")) { + long aNumber = getValue(aSObject, "myNbTimeStamps").toLong(); + if (aNumber > 1) { + if (!isDefined) { + aNbTimes = aNumber; + aAnimationDlg->addField(aSObject); + isDefined = true; + } else if (aNbTimes == aNumber) { + aAnimationDlg->addField(aSObject); + } + } + } + } + if (isDefined) aAnimationDlg->show(); + else delete aAnimationDlg; +} + +//************************************************************************ +void +VisuGUI:: +OnShowAnimation() +{ + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + if (aListIO.Extent() != 1) + return; + + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + + _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry()); + if (!aSObj) return; + + VISU::Storable::TRestoringMap aMap; + _PTR(GenericAttribute) anAttr; + if (!aSObj->FindAttribute(anAttr, "AttributeComment")) return; + + _PTR(AttributeComment) aComment (anAttr); + string aComm = aComment->Value(); + QString strIn (aComm.c_str()); + VISU::Storable::StrToMap(strIn, aMap); + bool isExist; + VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt(); + if (aType != VISU::TANIMATION) return; + + VisuGUI_TimeAnimationDlg* aAnimationDlg = + new VisuGUI_TimeAnimationDlg(this, aCStudy); + aAnimationDlg->restoreFromStudy(aSObj); + aAnimationDlg->show(); +} + +void +VisuGUI:: +OnCopyPresentation() +{ + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + if (CheckLock(aCStudy)) + return; + + Handle(SALOME_InteractiveObject) anIO; + CORBA::Object_var anObject = GetSelectedObj(this, &anIO); + if (CORBA::is_nil(anObject)) return; + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if (!aServant.in()) return; + + VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); + if (!aPrsObject) return; + + switch (aPrsObject->GetType()) { + case VISU::TMESH: + { + VISU::Mesh_i* aMeshPrs = dynamic_cast(aPrsObject); + VISU::Mesh_i* aSameMesh = new VISU::Mesh_i(aMeshPrs->GetResult()); + aSameMesh->SameAs(aMeshPrs); + UpdateViewer(this, aSameMesh); + } + break; + case VISU::TSCALARMAP: + { + VISU::ScalarMap_i* aScalarPrs = dynamic_cast(aPrsObject); + VISU::ScalarMap_i* aSameScalar = new VISU::ScalarMap_i(aScalarPrs->GetResult(),true); + aSameScalar->SameAs(aScalarPrs); + UpdateViewer(this, aSameScalar); + } + break; + case VISU::TDEFORMEDSHAPE: + { + VISU::DeformedShape_i* aDefPrs = dynamic_cast(aPrsObject); + VISU::DeformedShape_i* aSameDeformed = new VISU::DeformedShape_i(aDefPrs->GetResult(),true); + aSameDeformed->SameAs(aDefPrs); + UpdateViewer(this, aSameDeformed); + } + break; + case VISU::TCUTPLANES: + { + VISU::CutPlanes_i* aCutPrs = dynamic_cast(aPrsObject); + VISU::CutPlanes_i* aSameCut = new VISU::CutPlanes_i(aCutPrs->GetResult(),true); + aSameCut->SameAs(aCutPrs); + UpdateViewer(this, aSameCut); + } + break; + case VISU::TCUTLINES: + { + VISU::CutLines_i* aCutPrs = dynamic_cast(aPrsObject); + VISU::CutLines_i* aSameCut = new VISU::CutLines_i(aCutPrs->GetResult(),true); + aSameCut->SameAs(aCutPrs); + UpdateViewer(this, aSameCut); + } + break; + case VISU::TISOSURFACE: + { + VISU::IsoSurfaces_i* aIsoPrs = dynamic_cast(aPrsObject); + VISU::IsoSurfaces_i* aSameIso = new VISU::IsoSurfaces_i(aIsoPrs->GetResult(),true); + aSameIso->SameAs(aIsoPrs); + UpdateViewer(this, aSameIso); + } + break; + case VISU::TSTREAMLINES: + { + VISU::StreamLines_i* aLinesPrs = dynamic_cast(aPrsObject); + VISU::StreamLines_i* aSameLines = new VISU::StreamLines_i(aLinesPrs->GetResult(),true); + aSameLines->SameAs(aLinesPrs); + UpdateViewer(this, aSameLines); + } + break; + case VISU::TVECTORS: + { + VISU::Vectors_i* aVectorsPrs = dynamic_cast(aPrsObject); + VISU::Vectors_i* aSameVectors = new VISU::Vectors_i(aVectorsPrs->GetResult(),true); + aSameVectors->SameAs(aVectorsPrs); + UpdateViewer(this, aSameVectors); + } + break; + case VISU::TPLOT3D: + { + VISU::Plot3D_i* aPlot3DPrs = dynamic_cast(aPrsObject); + VISU::Plot3D_i* aSamePlot3D = new VISU::Plot3D_i(aPlot3DPrs->GetResult()); + aSamePlot3D->SameAs(aPlot3DPrs); + UpdateViewer(this, aSamePlot3D); + } + break; + } + UpdateObjBrowser(this); +} + +void +VisuGUI:: +OnSelectionInfo() +{ + if (GetViewWindow()) + (new VisuGUI_SelectionDlg(GetDesktop(this)))->show(); + else + SUIT_MessageBox::warn1(GetDesktop(this), + tr("WRN_VISU"), + tr("ERR_ACTIVATE_VIEW3D"), + tr("BUT_OK") ); +} + +void +VisuGUI:: +OnScaling() +{ + VisuGUI_NonIsometricDlg* m_NonIsoDlg = + new VisuGUI_NonIsometricDlg (GetDesktop(this), "m_NonIsoDlg", + false, Qt::WDestructiveClose); + m_NonIsoDlg->show(); +} + +void +VisuGUI:: +OnCubeAxes() +{ + //Show dialog that allows to select scale function and corresponding scale factor + VisuGUI_CubeAxesDlg* aDlg = new VisuGUI_CubeAxesDlg (GetDesktop(this)); + aDlg->show(); +} + +void +VisuGUI:: +OnMergeScalarBars() +{ + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + SALOME_ListIteratorOfListIO It (aListIO); + + // first find the bounds + double aMin, aMax; bool first = true; + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + std::vector aPrsList = GetPrs3dList(this, anIO); + if (!aPrsList.empty()) { + for (int i = 0, n = aPrsList.size(); i < n; i++) { + VISU::Prs3d_i* aPrsObject = aPrsList[i]; + if (aPrsObject) { + VISU::ScalarMap_i* aScalar = dynamic_cast(aPrsObject); + if (aScalar) { + if (first) { + first = false; + aMin = aScalar->GetMin(); aMax = aScalar->GetMax(); + } else { + if (aScalar->GetMin() < aMin) aMin = aScalar->GetMin(); + if (aScalar->GetMax() > aMax) aMax = aScalar->GetMax(); + } + } + } + } + } + } + + // set the computed range to every selected ScalarMap + bool update = false; + for (It.Initialize(aListIO); It.More(); It.Next() ) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + std::vector aPrsList = GetPrs3dList(this, anIO); + if (!aPrsList.empty()) { + for (int i = 0, n = aPrsList.size(); i < n; i++) { + VISU::Prs3d_i* aPrsObject = aPrsList[i]; + if(aPrsObject){ + VISU::ScalarMap_i* aScalar = dynamic_cast(aPrsObject); + if (aScalar) { + aScalar->SetRange(aMin, aMax); + RecreateActor(this, aScalar); + update = true; + } + } + } + } + } + if (update) { + if (SVTK_ViewWindow* vw = GetViewWindow(this)) { +//if (vw->getRenderer()->GetActors()->GetNumberOfItems() > 0) { + vw->getRenderer()->ResetCameraClippingRange(); + vw->Repaint(); +//} + } + } +} + +void +VisuGUI:: +OnFreeScalarBars() +{ + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + SALOME_ListIteratorOfListIO It (aListIO); + + // restore the source range for every ScalarMap + bool update = false; + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + std::vector aPrsList = GetPrs3dList(this, anIO); + if (!aPrsList.empty()) { + for (int i = 0, n = aPrsList.size(); i < n; i++) { + VISU::Prs3d_i* aPrsObject = aPrsList[i]; + if (aPrsObject) { + VISU::ScalarMap_i* aScalar = dynamic_cast(aPrsObject); + if (aScalar) { + aScalar->SetSourceRange(); + RecreateActor(this, aScalar); + update = true; + } + } + } + } + } + if (update) { + if (SVTK_ViewWindow* vw = GetViewWindow(this)) { +//if (vw->getRenderer()->GetActors()->GetNumberOfItems() > 0) { + vw->getRenderer()->ResetCameraClippingRange(); + vw->Repaint(); +//} + } + } +} + +void +VisuGUI:: +OnTranslatePrs() +{ + if(MYDEBUG) MESSAGE("VisuGUI::OnTranslatePrs"); + VisuGUI_OffsetDlg* aDlg = new VisuGUI_OffsetDlg (this); + + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + SALOME_ListIteratorOfListIO It (aListIO); + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + if (anIO->hasEntry()) { + _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry()); + if (aSObject) { + CORBA::Object_var aCORBAObject = VISU::ClientSObjectToObject(aSObject); + if (!CORBA::is_nil(aCORBAObject)) { + PortableServer::ServantBase_var aServant = VISU::GetServant(aCORBAObject); + if (VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in())) { + aDlg->addPresentation(aPrsObject); + } + } + } + } + } + if (aDlg->getPrsCount() > 0) + aDlg->show(); + else + delete aDlg; +} + +void +VisuGUI:: +OnArrangeActors() +{ + SVTK_ViewWindow* vw = GetViewWindow(); + if (vw) { + ArrangeDlg* aDlg = new ArrangeDlg (GetDesktop(this), vw); + aDlg->exec(); + delete aDlg; + } +} + + +void +VisuGUI:: +initialize( CAM_Application* theApp ) +{ + SalomeApp_Module::initialize( theApp ); + + createActions(); + createMenus(); + createToolBars(); + createPopupMenus(); +} + +void +VisuGUI:: +createActions() +{ + QPixmap aPixmap; + QWidget* aParent = application()->desktop(); + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + + // Create actions + createAction( VISU_IMPORT_FROM_FILE, "", QIconSet(), + tr("MEN_IMPORT_FROM_FILE"), "", (CTRL + Key_I), aParent, false, + this, SLOT(OnImportFromFile())); + + createAction( VISU_EXPLORE_MED, "", QIconSet(), + tr("MEN_EXPLORE_MED_FILE"), "", (CTRL + Key_M), aParent, false, + this, SLOT(OnExploreMEDFile())); + + createAction( VISU_IMPORT_TABLE, "", QIconSet(), + tr("MEN_IMPORT_TABLE"), "", 0, aParent, false, + this, SLOT(OnImportTableFromFile())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SCALAR_MAP")); + createAction( VISU_SCALAR_MAP, tr("MEN_SCALAR_MAP"), QIconSet(aPixmap), + tr("MEN_SCALAR_MAP"), "", 0, aParent, false, + this, SLOT(OnCreateScalarMap())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_DEFORMED_SHAPE")); + createAction( VISU_DEFORMED_SHAPE, tr("MEN_DEFORMED_SHAPE"), QIconSet(aPixmap), + tr("MEN_DEFORMED_SHAPE"), "", 0, aParent, false, + this, SLOT(OnCreateDeformedShape())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_VECTORS")); + createAction( VISU_VECTORS, tr("MEN_VECTORS"), QIconSet(aPixmap), + tr("MEN_VECTORS"), "", 0, aParent, false, + this, SLOT(OnCreateVectors())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_ISO_SURFACES")); + createAction( VISU_ISO_SURFACES, tr("MEN_ISO_SURFACES"), QIconSet(aPixmap), + tr("MEN_ISO_SURFACES"), "", 0, aParent, false, + this, SLOT(OnCreateIsoSurfaces())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUT_PLANES")); + createAction( VISU_CUT_PLANES, tr("MEN_CUT_PLANES"), QIconSet(aPixmap), + tr("MEN_CUT_PLANES"), "", 0, aParent, false, + this, SLOT(OnCreateCutPlanes())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_STREAM_LINES")); + createAction( VISU_STREAM_LINES, tr("MEN_STREAM_LINES"), QIconSet(aPixmap), + tr("MEN_STREAM_LINES"), "", 0, aParent, false, + this, SLOT(OnCreateStreamLines())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUT_LINES")); + createAction( VISU_CUT_LINES, tr("MEN_CUT_LINES"), QIconSet(aPixmap), + tr("MEN_CUT_LINES"), "", 0, aParent, false, + this, SLOT(OnCreateCutLines())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PLOT_3D")); + createAction( VISU_PLOT_3D, tr("MEN_PLOT_3D"), QIconSet(aPixmap), + tr("MEN_PLOT_3D"), "", 0, aParent, false, + this, SLOT(OnCreatePlot3D())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PLOT2D")); + createAction( VISU_PLOT2D, tr("MEN_CREATE_PLOT2D"), QIconSet(aPixmap), + tr("MEN_CREATE_PLOT2D"), "", 0, aParent, false, + this, SLOT(OnCreatePlot2dView())); + + createAction( VISU_DELETE_OBJS, tr("MEN_DELETE_OBJS"), QIconSet(), + tr("MEN_DELETE_OBJS"), "", 0, aParent, false, + this, SLOT(OnDeleteObjects())); + + createAction( VISU_SHOW_TABLE, tr("MEN_SHOW_TABLE"), QIconSet(), + tr("MEN_SHOW_TABLE"), "", 0, aParent, false, + this, SLOT(OnShowTable())); + + createAction( VISU_CREATE_CURVES, tr("MEN_CREATE_CURVES"), QIconSet(), + tr("MEN_CREATE_CURVES"), "", 0, aParent, false, + this, SLOT(OnPlotData())); + + createAction( VISU_EXPORT_TABLE, tr("MEN_EXPORT_TABLE"), QIconSet(), + tr("MEN_EXPORT_TABLE"), "", 0, aParent, false, + this, SLOT(OnExportTableToFile())); + + createAction( VISU_IMPORT_MED_STRUCTURE, tr("MEN_IMPORT_MED_STRUCTURE"), QIconSet(), + tr("MEN_IMPORT_MED_STRUCTURE"), "", 0, aParent, false, + this, SLOT(OnImportMedField())); + + createAction( VISU_IMPORT_MED_TIMESTAMP, tr("MEN_IMPORT_MED_TIMESTAMP"), QIconSet(), + tr("MEN_IMPORT_MED_TIMESTAMP"), "", 0, aParent, false, + this, SLOT(OnImportMedField())); + + createAction( VISU_IMPORT_MED_FIELD, tr("MEN_IMPORT_MED_FIELD"), QIconSet(), + tr("MEN_IMPORT_MED_FIELD"), "", 0, aParent, false, + this, SLOT(OnImportMedField())); + + createAction( VISU_CREATE_PRS, tr("MEN_CREATE_PRS"), QIconSet(), + tr("MEN_CREATE_PRS"), "", 0, aParent, false, + this, SLOT(OnCreateMesh())); + + createAction( VISU_CREATE_MANY_PRS, tr("MEN_CREATE_MANY_PRS"), QIconSet(), + tr("MEN_CREATE_MANY_PRS"), "", 0, aParent, false, + this, SLOT(OnCreateManyMesh())); + + createAction( VISU_TRANSLATE_PRS, tr("MEN_TRANSLATE_PRS"), QIconSet(), + tr("MEN_TRANSLATE_PRS"), "", 0, aParent, false, + this, SLOT(OnTranslatePrs())); + + createAction( VISU_MERGE_SCALAR_BARS, tr("MEN_MERGE_SCALAR_BARS"), QIconSet(), + tr("MEN_MERGE_SCALAR_BARS"), "", 0, aParent, false, + this, SLOT(OnMergeScalarBars())); + + createAction( VISU_FREE_SCALAR_BARS, tr("MEN_FREE_SCALAR_BARS"), QIconSet(), + tr("MEN_FREE_SCALAR_BARS"), "", 0, aParent, false, + this, SLOT(OnFreeScalarBars())); + + createAction( VISU_ERASE, tr("MEN_ERASE"), QIconSet(), + tr("MEN_ERASE"), "", 0, aParent, false, + this, SLOT(OnErasePrs())); + + createAction( VISU_DISPLAY, tr("MEN_DISPLAY"), QIconSet(), + tr("MEN_DISPLAY"), "", 0, aParent, false, + this, SLOT(OnDisplayPrs())); + + createAction( VISU_DISPLAY_ONLY, tr("MEN_DISPLAY_ONLY"), QIconSet(), + tr("MEN_DISPLAY_ONLY"), "", 0, aParent, false, + this, SLOT(OnDisplayOnlyPrs())); + + createAction( VISU_COPY_PRS, tr("MEN_COPY_PRS"), QIconSet(), + tr("MEN_COPY_PRS"), "", 0, aParent, false, + this, SLOT(OnCopyPresentation())); + + createAction( VISU_CURVE_PROPS, tr("MEN_CURVE_PROPS"), QIconSet(), + tr("MEN_CURVE_PROPS"), "", 0, aParent, false, + this, SLOT(OnCurveProperties())); + + createAction( VISU_RENAME, tr("MEN_RENAME"), QIconSet(), tr("MEN_RENAME"), "", 0, aParent, false, + this, SLOT(OnRename())); + + createAction( VISU_EDIT_CONTAINER, tr("MEN_EDIT_CONTAINER"), QIconSet(), + tr("MEN_EDIT_CONTAINER"), "", 0, aParent, false, + this, SLOT(OnEditContainer())); + + createAction( VISU_CLEAR_CONTAINER, tr("MEN_CLEAR_CONTAINER"), QIconSet(), + tr("MEN_CLEAR_CONTAINER"), "", 0, aParent, false, + this, SLOT(OnClearContainer())); + + createAction( VISU_SAVE_VIEW_PARAMS, tr("MEN_SAVE_VIEWPARAMS"), QIconSet(), + tr("MEN_SAVE_VIEWPARAMS"), "", 0, aParent, false, + this, SLOT(OnSaveViewParams())); + createAction( VISU_SAVE_VIEW_PARAMS_1, tr("MEN_SAVE_VIEWPARAMS"), QIconSet(), + tr("MEN_SAVE_VIEWPARAMS"), "", 0, aParent, false, + this, SLOT(OnSaveViewParams())); + + createAction( VISU_RESTORE_VIEW_PARAMS, tr("MEN_RESTORE_VIEWPARAMS"), QIconSet(), + tr("MEN_RESTORE_VIEWPARAMS"), "", 0, aParent, false, + this, SLOT(OnRestoreViewParams())); + + //createAction( VISU_DELETE_VIEW_PARAMS, tr("MEN_DELETE_VIEWPARAMS"), QIconSet(), + // tr("MEN_DELETE_VIEWPARAMS"), "", 0, aParent, false, + // this, SLOT(OnDeleteObjects())); + + createAction( VISU_ARRANGE_ACTORS, tr("MEN_ARRANGE_ACTORS"), QIconSet(), + tr("MEN_ARRANGE_ACTORS"), "", 0, aParent, false, + this, SLOT(OnArrangeActors())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_POINTS")); + createAction( VISU_POINTS, tr("MEN_POINTS"), QIconSet(aPixmap), + tr("MEN_POINTS"), "", 0, aParent, false, + this, SLOT(OnMakePoints())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_WIREFRAME")); + createAction( VISU_WIREFRAME, tr("MEN_WIREFRAME"), QIconSet(aPixmap), + tr("MEN_WIREFRAME"), "", 0, aParent, false, + this, SLOT(OnMakeWireframe())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SURFACE")); + createAction( VISU_SURFACE, tr("MEN_SURFACE"), QIconSet(aPixmap), + tr("MEN_SURFACE"), "", 0, aParent, false, + this, SLOT(OnMakeSurface())); + + createAction( VISU_INSIDEFRAME, tr("MEN_INSIDEFRAME"), QIconSet(), + tr("MEN_INSIDEFRAME"), "", 0, aParent, false, + this, SLOT(OnMakeInsideframe())); + + createAction( VISU_SURFACEFRAME, tr("MEN_SURFACEFRAME"), QIconSet(), + tr("MEN_SURFACEFRAME"), "", 0, aParent, false, + this, SLOT(OnMakeSurfaceframe())); + + createAction( VISU_SHRINK, tr("MEN_SHRINK"), QIconSet(), + tr("MEN_SHRINK"), "", 0, aParent, false, + this, SLOT(OnMakeShrink())); + + createAction( VISU_UNSHRINK, tr("MEN_UNSHRINK"), QIconSet(), + tr("MEN_UNSHRINK"), "", 0, aParent, false, + this, SLOT(OnMakeShrink())); + + createAction( VISU_CELL_COLOR, tr("MEN_CELL_COLOR"), QIconSet(), + tr("MEN_CELL_COLOR"), "", 0, aParent, false, + this, SLOT(OnChangeColor())); + + createAction( VISU_COLOR, tr("MEN_COLOR"), QIconSet(), + tr("MEN_COLOR"), "", 0, aParent, false, + this, SLOT(OnChangeColor())); + + createAction( VISU_EDGE_COLOR, tr("MEN_EDGE_COLOR"), QIconSet(), + tr("MEN_EDGE_COLOR"), "", 0, aParent, false, + this, SLOT(OnChangeWireframeColor())); + + createAction( VISU_OPACITY, tr("MEN_OPACITY"), QIconSet(), + tr("MEN_OPACITY"), "", 0, aParent, false, + this, SLOT(OnChangeOpacity())); + + createAction( VISU_LINE_WIDTH, tr("MEN_LINE_WIDTH"), QIconSet(), + tr("MEN_LINE_WIDTH"), "", 0, aParent, false, + this, SLOT(OnChangeLines())); + + + createAction( VISU_EDIT_SCALARMAP, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditScalarMap())); + + createAction( VISU_EDIT_DEFORMEDSHAPE, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditDeformedShape())); + + createAction( VISU_EDIT_CUTPLANES, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditCutPlanes())); + + createAction( VISU_EDIT_CUTLINES, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditCutLines())); + + createAction( VISU_EDIT_ISOSURFACE, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditIsoSurfaces())); + + createAction( VISU_EDIT_VECTORS, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditVectors())); + + createAction( VISU_EDIT_STREAMLINES, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditStreamLines())); + + createAction( VISU_EDIT_PLOT3D, tr("MEN_EDIT_PRS"), QIconSet(), + tr("MEN_EDIT_PRS"), "", 0, aParent, false, + this, SLOT(OnEditPlot3D())); + + + createAction( VISU_CREATE_TABLE, tr("MEN_CREATE_TABLE"), QIconSet(), + tr("MEN_CREATE_TABLE"), "", 0, aParent, false, + this, SLOT(OnCreateTable())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SWEEP")); + createAction( VISU_SWEEP, tr("MEN_SWEEP"), QIconSet(aPixmap), + tr("MEN_SWEEP"), "", 0, aParent, false, + this, SLOT(OnSweep())); + + createAction( VISU_CLIPPING, tr("MEN_CLIPPING"), QIconSet(), + tr("MEN_CLIPPING"), "", 0, aParent, false, + this, SLOT(OnClippingPlanes())); + + createAction( VISU_SELECTION_INFO, tr("MEN_SELECTION_INFO"), QIconSet(), + tr("MEN_SELECTION_INFO"), "", 0, aParent, false, + this, SLOT(OnSelectionInfo())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_TIMEANIMATION")); + createAction( VISU_ANIMATION, tr("MEN_ANIMATION"), QIconSet(aPixmap), + tr("MEN_ANIMATION"), "", 0, aParent, false, + this, SLOT(OnTimeAnimation())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_ERASE_ALL")); + createAction( VISU_ERASE_ALL, tr("MEN_ERASE_ALL"), QIconSet(aPixmap), + tr("MEN_ERASE_ALL"), "", 0, aParent, false, + this, SLOT(OnEraseAll())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GLOBAL_SELECTION")); + createAction( VISU_GLOBAL_SELECTION, tr("MEN_GLOBAL_SELECTION"), QIconSet(aPixmap), + tr("MEN_GLOBAL_SELECTION"), "", 0, aParent, false, + //this, SLOT(OnEraseAll())); + this); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PARTIAL_SELECTION")); + createAction( VISU_PARTIAL_SELECTION, tr("MEN_PARTIAL_SELECTION"), QIconSet(aPixmap), + tr("MEN_PARTIAL_SELECTION"), "", 0, aParent, false, + //this, SLOT(OnEraseAll())); + this); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SCALING")); + createAction( VISU_SCALING, tr("MEN_SCALING"), QIconSet(aPixmap), + tr("MEN_SCALING"), "", 0, aParent, false, + this, SLOT(OnScaling())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUBE_AXES")); + createAction( VISU_CUBE_AXES, tr("MEN_CUBE_AXES"), QIconSet(aPixmap), + tr("MEN_CUBE_AXES"), "", 0, aParent, false, + this, SLOT(OnCubeAxes())); + + createAction( VISU_SHOW_ANIMATION, tr("MEN_SHOW_ANIMATION"), QIconSet(), + tr("MEN_SHOW_ANIMATION"), "", 0, aParent, false, + this, SLOT(OnShowAnimation())); +} + +void +VisuGUI:: +createMenus() +{ + // Add actions to menus + int aMenuId; + aMenuId = createMenu( tr( "MEN_DESK_FILE" ), -1 ); + createMenu( separator(), aMenuId, -1, 10 ); + createMenu( VISU_IMPORT_FROM_FILE, aMenuId, 10 ); // import from file + createMenu( VISU_EXPLORE_MED, aMenuId, 10 ); // explore MED file + createMenu( VISU_IMPORT_TABLE, aMenuId, 10 ); // import table + + aMenuId = createMenu( tr( "MEN_VISUALIZATION" ), -1, -1, 30 ); + createMenu( VISU_SCALAR_MAP, aMenuId, 10 ); // scalar map + createMenu( VISU_DEFORMED_SHAPE, aMenuId, 10 ); // deformed shape + createMenu( VISU_VECTORS, aMenuId, 10 ); // vectors + createMenu( VISU_ISO_SURFACES, aMenuId, 10 ); // iso surfaces + createMenu( VISU_CUT_PLANES, aMenuId, 10 ); // cut planes + createMenu( VISU_CUT_LINES, aMenuId, 10 ); // cut lines + createMenu( VISU_STREAM_LINES, aMenuId, 10 ); // stream lines + createMenu( VISU_PLOT_3D, aMenuId, 10 ); // Plot3d + + aMenuId = createMenu( tr( "MEN_SELECTION" ), -1, -1, 30 ); + createMenu( VISU_SELECTION_INFO, aMenuId, 10 ); // selection info + + aMenuId = createMenu( tr( "MEN_REPRESENTATION" ), -1, -1, 30 ); + int parentId = + createMenu( tr( "MEN_DISPLAY_SELECTION" ), aMenuId, 10 ); // display selection + createMenu( VISU_POINTS, parentId, 10 ); // points + createMenu( VISU_WIREFRAME, parentId, 10 ); // wireframe + createMenu( VISU_SURFACE, parentId, 10 ); // surface + createMenu( VISU_ERASE_ALL, aMenuId, 10 ); // erase all + createMenu( VISU_GLOBAL_SELECTION, aMenuId, 10 ); // global selection + createMenu( VISU_PARTIAL_SELECTION, aMenuId, 10 ); // partial selection + createMenu( VISU_SCALING, aMenuId, 10 ); // scaling + createMenu( VISU_CUBE_AXES, aMenuId, 10 ); // scaling +} + +void +VisuGUI:: +createToolBars() +{ + int aToolId = createTool(tr("TOOL_VISUALISATION")); + createTool( VISU_SCALAR_MAP, aToolId ); + createTool( VISU_DEFORMED_SHAPE, aToolId ); + createTool( VISU_VECTORS, aToolId ); + createTool( VISU_ISO_SURFACES, aToolId ); + createTool( VISU_CUT_PLANES, aToolId ); + createTool( VISU_CUT_LINES, aToolId ); + createTool( VISU_STREAM_LINES, aToolId ); + createTool( VISU_PLOT_3D, aToolId ); + + aToolId = createTool(tr("TOOL_REPRESENTATION")); + createTool( VISU_POINTS, aToolId ); + createTool( VISU_WIREFRAME, aToolId ); + createTool( VISU_SURFACE, aToolId ); + createTool( VISU_ERASE_ALL, aToolId ); + createTool( VISU_GLOBAL_SELECTION, aToolId ); + createTool( VISU_PARTIAL_SELECTION, aToolId ); + createTool( VISU_SCALING, aToolId ); + createTool( VISU_CUBE_AXES, aToolId ); +} + +void +VisuGUI:: +createPopupMenus() +{ + // Prepare popup menus + QtxPopupMgr* mgr = popupMgr(); + + // VISU root commands + mgr->insert( action( VISU_IMPORT_FROM_FILE ), -1, -1, -1 ); // import MED file + mgr->insert( action( VISU_IMPORT_TABLE ), -1, -1, -1 ); // import tables from file + mgr->insert( action( VISU_PLOT2D ), -1, -1, -1 ); // create Plot2d View + + //mgr->insert( action( VISU_IMPORT_MED ), -1, -1, -1 ); // import MED structure from MED module + + // create + mgr->insert( action( VISU_SCALAR_MAP ), -1, -1, -1 ); // scalar bar + mgr->insert( action( VISU_ISO_SURFACES ), -1, -1, -1 ); // iso surface + mgr->insert( action( VISU_CUT_PLANES ), -1, -1, -1 ); // cut planes + mgr->insert( action( VISU_CUT_LINES ), -1, -1, -1 ); // cut lines + mgr->insert( action( VISU_DEFORMED_SHAPE ), -1, -1, -1 ); // deformed shape + mgr->insert( action( VISU_VECTORS ), -1, -1, -1 ); // vectors + mgr->insert( action( VISU_STREAM_LINES ), -1, -1, -1 ); // stream lines + mgr->insert( action( VISU_PLOT_3D ), -1, -1, -1 ); // Plot3d + + mgr->insert( action( VISU_CREATE_PRS ), -1, -1, -1 ); // create presentation + mgr->insert( action( VISU_CREATE_MANY_PRS ), -1, -1, -1 ); // create presentations + + mgr->insert( action( VISU_CREATE_TABLE ), -1, -1, -1 ); // create table + + // edit + mgr->insert( action( VISU_EDIT_SCALARMAP ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_DEFORMEDSHAPE ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_CUTPLANES ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_CUTLINES ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_ISOSURFACE ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_VECTORS ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_STREAMLINES ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_PLOT3D ), -1, -1, -1 ); + mgr->insert( action( VISU_EDIT_CONTAINER ), -1, -1, -1 ); + + // rename + mgr->insert( action( VISU_RENAME ), -1, -1, -1 ); + + // copy + mgr->insert( action( VISU_COPY_PRS ), -1, -1, -1 ); + + // delete + mgr->insert( action( VISU_CLEAR_CONTAINER ), -1, -1, -1 ); + + // table commands + //mgr->insert( action( VISU_SHOW_TABLE ), -1, -1, -1 ); // show table + //mgr->insert( action( VISU_CREATE_CURVES ), -1, -1, -1 ); // create curves + //mgr->insert( action( VISU_EXPORT_TABLE ), -1, -1, -1 ); // export table + + mgr->insert( separator(), -1, -1, -1 ); + + mgr->insert( action( VISU_ERASE ), -1, -1, -1 ); // erase + mgr->insert( action( VISU_DISPLAY ), -1, -1, -1 ); // display + mgr->insert( action( VISU_DISPLAY_ONLY ), -1, -1, -1 ); // display only + + // "Representation" submenu + int parentId = mgr->insert( tr( "MEN_REPRESENTATION" ), -1, -1 ); + mgr->insert( action( VISU_POINTS ) , parentId, -1, -1 ); // points + mgr->insert( action( VISU_WIREFRAME ) , parentId, -1, -1 ); // wireframe + mgr->insert( action( VISU_SURFACE ) , parentId, -1, -1 ); // surface + mgr->insert( action( VISU_INSIDEFRAME ) , parentId, -1, -1 ); // insideframe + mgr->insert( action( VISU_SURFACEFRAME ), parentId, -1, -1 ); // surfaceframe + mgr->insert( action( VISU_SHRINK ) , parentId, -1, -1 ); // shrink + mgr->insert( action( VISU_UNSHRINK ) , parentId, -1, -1 ); // unshrink + + // "Properties" submenu + parentId = mgr->insert( tr( "MEN_PROPERTIES" ), -1, -1 ); + mgr->insert( action( VISU_CELL_COLOR ), parentId, -1, -1 ); // cell color + mgr->insert( action( VISU_EDGE_COLOR ), parentId, -1, -1 ); // edge color + mgr->insert( action( VISU_COLOR ) , parentId, -1, -1 ); // color + mgr->insert( action( VISU_OPACITY ) , parentId, -1, -1 ); // opacity + mgr->insert( action( VISU_LINE_WIDTH ), parentId, -1, -1 ); // line width + + mgr->insert( separator(), -1, -1, -1 ); + + // Other presentations management + mgr->insert( action( VISU_TRANSLATE_PRS ), -1, -1, -1 ); + mgr->insert( action( VISU_CLIPPING ), -1, -1, -1 ); + + mgr->insert( action( VISU_MERGE_SCALAR_BARS ), -1, -1, -1 ); + mgr->insert( action( VISU_FREE_SCALAR_BARS ), -1, -1, -1 ); + + mgr->insert( action( VISU_SWEEP ), -1, -1, -1 ); + mgr->insert( action( VISU_ANIMATION ), -1, -1, -1 ); + + mgr->insert( separator(), -1, -1, -1 ); + + // view parameters commands + mgr->insert( action( VISU_SAVE_VIEW_PARAMS ), -1, -1, -1 ); // save view params + mgr->insert( action( VISU_SAVE_VIEW_PARAMS_1 ), -1, -1, -1 ); // save view params + mgr->insert( action( VISU_RESTORE_VIEW_PARAMS ), -1, -1, -1 ); // restore view params + //mgr->insert( action( VISU_DELETE_VIEW_PARAMS ), -1, -1, -1 ); // delete view params + + mgr->insert( action( VISU_ARRANGE_ACTORS ), -1, -1, -1 ); // arrange actors + + mgr->insert( action( VISU_CURVE_PROPS ), -1, -1, -1 ); // curve properties + + mgr->insert( action( VISU_SELECTION_INFO ), -1, -1, -1 ); // Selection info + + // Rules + + QString aSel_One_ObjBr ("client='ObjectBrowser' and selcount=1"); + QString aSel_Some_ObjBr ("client='ObjectBrowser' and selcount>0"); + QString aSel_Many_ObjBr ("client='ObjectBrowser' and selcount>1"); + + QString aPrsAll ("'VISU::TSCALARMAP' 'VISU::TISOSURFACE' 'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' " + "'VISU::TCUTLINES' 'VISU::TVECTORS' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D'"); + + QString aCurveAll = "'VISU::TTABLE' 'VISU::TCURVE' 'VISU::TCONTAINER'"; + + // VISU root commands + QString aRule = aSel_One_ObjBr + " and type='VISU::TVISUGEN'"; + mgr->setRule( action( VISU_IMPORT_FROM_FILE ), aRule, true ); + mgr->setRule( action( VISU_IMPORT_TABLE ), aRule, true ); + mgr->setRule( action( VISU_PLOT2D ), aRule, true ); + + // timestamp commands + aRule = aSel_One_ObjBr + " and type='VISU::TTIMESTAMP'"; + mgr->setRule( action( VISU_SCALAR_MAP ), aRule, true ); + mgr->setRule( action( VISU_ISO_SURFACES ), aRule, true ); + mgr->setRule( action( VISU_CUT_PLANES ), aRule, true ); + mgr->setRule( action( VISU_CUT_LINES ), aRule, true ); + mgr->setRule( action( VISU_PLOT_3D ), aRule, true ); + aRule += " and nbComponents>1"; + mgr->setRule( action( VISU_DEFORMED_SHAPE ), aRule, true ); + mgr->setRule( action( VISU_VECTORS ), aRule, true ); + mgr->setRule( action( VISU_STREAM_LINES ), aRule, true ); + + // table commands + //aRule = aSel_One_ObjBr + " and type='VISU::TTABLE'"; + //mgr->setRule( action( VISU_SHOW_TABLE ), aRule, true ); + //mgr->setRule( action( VISU_CREATE_CURVES ), aRule, true ); + //mgr->setRule( action( VISU_EXPORT_TABLE ), aRule, true ); + + aRule = "(" + aSel_Some_ObjBr + " and ((type='VISU::TTABLE' and nbChildren>0) or" + " ($type in {'VISU::TCURVE' 'VISU::TCONTAINER'}))" + ") or (selcount>0 and $type in {'VISU::TMESH' " + aPrsAll + "})"; + + mgr->setRule( action( VISU_ERASE ), aRule + "and (isVisible=true)", true );// TODO: aRule.arg(" and isVisible=1"), true ); + mgr->setRule( action( VISU_DISPLAY ), aRule + "and ((isVisible=false and isActiveView=true) or (isActiveView=false))", true );// TODO: aRule.arg(" and isVisible=0"), true ); + mgr->setRule( action( VISU_DISPLAY_ONLY ), aRule, true ); + + aRule = "selcount>0 and $type in {'VISU::TMESH' " + aPrsAll + "}"; + mgr->setRule( action( VISU_TRANSLATE_PRS ), aRule, true ); + + aRule = "selcount>1 and $type in {'VISU::TMESH' " + aPrsAll + "}"; + mgr->setRule( action( VISU_MERGE_SCALAR_BARS ), aRule, true ); + mgr->setRule( action( VISU_FREE_SCALAR_BARS ), aRule, true ); + + // View parameters + aRule = "selcount=1 and type='VISU::TVIEW3D'"; + mgr->setRule( action( VISU_SAVE_VIEW_PARAMS_1 ), aRule, true ); + mgr->setRule( action( VISU_SAVE_VIEW_PARAMS ), "client='VTKViewer' and selcount=0", true ); + mgr->setRule( action( VISU_RESTORE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true ); + //mgr->setRule( action( VISU_DELETE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true ); + + mgr->setRule( action( VISU_ARRANGE_ACTORS ), "client='VTKViewer' and selcount=0", true ); + + // 3D presentations commands + QString aPrsType = " and $type in {'VISU::TMESH' " + aPrsAll + "}"; + QString aInsideType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TDEFORMEDSHAPE'}"; + QString aSurfType = " and $type in {'VISU::TMESH'}"; + QString aShrinkType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TISOSURFACE' " + "'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' 'VISU::TCUTLINES' 'VISU::TPLOT3D'}"; + QString aLineType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TISOSURFACE' 'VISU::TDEFORMEDSHAPE' " + "'VISU::TCUTPLANES' 'VISU::TCUTLINES' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D'}"; + + aRule = "selcount=1"; + mgr->setRule( action( VISU_CLIPPING ), aRule + aPrsType, true ); + + // "Representation" submenu + QString aNotPoints = " and $representation in {'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; + QString aNotWirefr = " and $representation in {'VISU::POINT' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; + QString aNotSurfac = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; + QString aNotInside = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::SURFACEFRAME'}"; + QString aNotSurffr = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME'}"; + + mgr->setRule( action( VISU_POINTS ) , aRule + aPrsType + aNotPoints, true ); + mgr->setRule( action( VISU_WIREFRAME ) , aRule + aPrsType + aNotWirefr, true ); + mgr->setRule( action( VISU_SURFACE ) , aRule + aPrsType + aNotSurfac, true ); + mgr->setRule( action( VISU_INSIDEFRAME ) , aRule + aInsideType + aNotInside, true ); + mgr->setRule( action( VISU_SURFACEFRAME ), aRule + aSurfType + aNotSurffr, true ); + + mgr->setRule( action( VISU_SHRINK ) , aRule + aShrinkType + " and isShrunk=0", true ); + mgr->setRule( action( VISU_UNSHRINK ), aRule + aShrinkType + " and isShrunk=1", true ); + + // "Properties" submenu + mgr->setRule( action( VISU_CELL_COLOR ), aRule + " and type='VISU::TMESH' and representation='VISU::SURFACEFRAME'", true ); + mgr->setRule( action( VISU_EDGE_COLOR ), aRule + " and type='VISU::TMESH' and representation='VISU::SURFACEFRAME'", true ); + mgr->setRule( action( VISU_COLOR ), aRule + " and ((type='VISU::TMESH'" + " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME'}) " + "or (type='VISU::TDEFORMEDSHAPE' and hasActor=1))", true ); + mgr->setRule( action( VISU_OPACITY ), aRule + aShrinkType + " and hasActor=1", true ); + mgr->setRule( action( VISU_LINE_WIDTH ), aRule + aLineType + " and hasActor=1", true ); + + // rename command + aRule = "selcount=1 and ($type in {'VISU::TVIEW3D' 'VISU::TMESH' " + aCurveAll + " " + aPrsAll + "})"; + mgr->setRule( action( VISU_RENAME ), aRule, true ); + + // copy presentation command + aRule = "selcount=1 and ($type in {" + aPrsAll + "})"; + mgr->setRule( action( VISU_COPY_PRS ), aRule, true ); + + // curve commands + aRule = "selcount=1 and type='VISU::TCURVE'"; + mgr->setRule( action( VISU_CURVE_PROPS ), aRule, true ); + + // curve container commands + aRule = aSel_One_ObjBr + " and type='VISU::TCONTAINER'"; + mgr->setRule( action( VISU_EDIT_CONTAINER ), aRule, true ); + mgr->setRule( action( VISU_CLEAR_CONTAINER ), aRule, true ); + + mgr->setRule( action( VISU_EDIT_SCALARMAP ), + "selcount=1 and type='VISU::TSCALARMAP'", true ); + mgr->setRule( action( VISU_EDIT_DEFORMEDSHAPE ), + "selcount=1 and type='VISU::TDEFORMEDSHAPE'", true ); + mgr->setRule( action( VISU_EDIT_CUTPLANES ), + "selcount=1 and type='VISU::TCUTPLANES'", true ); + mgr->setRule( action( VISU_EDIT_CUTLINES ), + "selcount=1 and type='VISU::TCUTLINES'", true ); + mgr->setRule( action( VISU_EDIT_ISOSURFACE ), + "selcount=1 and type='VISU::TISOSURFACE'", true ); + mgr->setRule( action( VISU_EDIT_VECTORS ), + "selcount=1 and type='VISU::TVECTORS'", true ); + mgr->setRule( action( VISU_EDIT_STREAMLINES ), + "selcount=1 and type='VISU::TSTREAMLINES'", true ); + mgr->setRule( action( VISU_EDIT_PLOT3D ), + "selcount=1 and type='VISU::TPLOT3D'", true ); + + aRule = "selcount=1 and type='VISU::TCUTLINES' and nbNamedChildren=0"; + mgr->setRule( action( VISU_CREATE_TABLE ), aRule, true ); + + aRule = "selcount=1 and ($type in {" + aPrsAll + "})"; + mgr->setRule( action( VISU_SWEEP ), aRule, true ); + + // Selection info popup item + aRule = "client='VTKViewer' and selcount=1" + aInsideType; + mgr->setRule( action( VISU_SELECTION_INFO ), aRule, true ); + + aRule = "client='ObjectBrowser' and selcount>0 and $type in {'VISU::TFIELD'} and nbTimeStamps>1"; + mgr->setRule( action( VISU_ANIMATION ), aRule, true ); + + aRule = "client='ObjectBrowser' and $type in {'VISU::TENTITY' 'VISU::TFAMILY' 'VISU::TGROUP'}"; + mgr->setRule( action( VISU_CREATE_PRS ), aRule + " and selcount=1", true ); + mgr->setRule( action( VISU_CREATE_MANY_PRS ), aRule + " and selcount>1", true ); + + //aRule = "client='ObjectBrowser' and type='MEDFIELD'"; + //mgr->setRule( action( VISU_IMPORT_MED ), aRule, true ); +} + +//*************************************************************************** +void VisuGUI::contextMenuPopup( const QString& theClient, QPopupMenu* theMenu, QString& theTitle ) +{ + SalomeApp_Module::contextMenuPopup(theClient, theMenu, theTitle); + + OB_Browser* ob = getApp()->objectBrowser(); + bool isOBClient = (ob && theClient == ob->popupClientType()); + + SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + if (aListIO.Extent() < 1) return; + + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + + // Check if "Merge Scalar Range" can be applied + int nbPrs = 0; + SALOME_ListIteratorOfListIO It (aListIO); + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + + if (!anIO.IsNull() && anIO->hasEntry()) { + _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry()); + CORBA::Object_var aCORBAObject = VISU::ClientSObjectToObject(aSObject); + if (CORBA::is_nil(aCORBAObject)) { + _PTR(GenericAttribute) anAttr; + if (aSObject->FindAttribute(anAttr, "AttributeComment")) { + _PTR(AttributeComment) aComment (anAttr); + string aComm = aComment->Value(); + QString strIn (aComm.c_str()); + VISU::Storable::TRestoringMap pMap; + VISU::Storable::StrToMap(strIn, pMap); + bool isExist; + VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(pMap,"myType",&isExist).toInt(); + if (isExist && aType == VISU::TTIMESTAMP) { + _PTR(ChildIterator) anIter = aCStudy->NewChildIterator(aSObject); + _PTR(SObject) aPrs; + for (; anIter->More(); anIter->Next()) { + aPrs = anIter->Value(); + if (!aPrs) continue; + std::vector aSubList = GetPrs3dList(this, aPrs); + nbPrs += aSubList.size(); + } + } + } + } + } + } + + if (nbPrs > 1) { + theMenu->insertSeparator(); + action( VISU_MERGE_SCALAR_BARS )->addTo(theMenu); + action( VISU_FREE_SCALAR_BARS )->addTo(theMenu); + } + + theMenu->insertSeparator(); + + // Check if some (nb > 0) removable objects selected + if (isOBClient && IsRemovableSelected(this)) { + action( VISU_DELETE_OBJS )->addTo(theMenu); + } + + // Check single selection + if (aListIO.Extent() != 1) return; + + Handle(SALOME_InteractiveObject) anIO; + VISU::Storable::TRestoringMap aMap; + CORBA::Object_var anObject = GetSelectedObj( this, &anIO, &aMap); + + _PTR(SObject) SO = aCStudy->FindObjectID(anIO->getEntry()); + bool isExist; + VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt(); + + if (aType == VISU::TANIMATION) { + action( VISU_SHOW_ANIMATION )->addTo(theMenu); + + } else if (isOBClient) { + if (IsSObjectTable(SO)) { + action( VISU_SHOW_TABLE )->addTo(theMenu); + action( VISU_CREATE_CURVES )->addTo(theMenu); + action( VISU_EXPORT_TABLE )->addTo(theMenu); + theMenu->insertSeparator(); + } else { + if (!CORBA::is_nil(anObject)) { + SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject); + if (!CORBA::is_nil(aMED.in())) { + action( VISU_IMPORT_MED_STRUCTURE )->addTo(theMenu); + } + + SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject); // "Import Structure" + if (!CORBA::is_nil(aField)) { + action( VISU_IMPORT_MED_TIMESTAMP )->addTo(theMenu); // "Import TimeStamp" + } + } else { + _PTR(SObject) aSFather = SO->GetFather(); + if (aSFather) { + _PTR(GenericAttribute) anAttr; + aSFather->FindAttribute(anAttr, "AttributeName"); + if (anAttr) { + _PTR(AttributeName) aName (anAttr); + std::string aValue = aName->Value(); + if (strcmp(aValue.c_str(), "MEDFIELD") == 0) { + action( VISU_IMPORT_MED_FIELD )->addTo(theMenu); // "Import Field" + } + } + } + } + } + } +} + + +//*************************************************************************** +void +VisuGUI:: +windows( QMap& theMap ) const +{ + theMap.clear(); + theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft ); + theMap.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom ); +} + + +void +VisuGUI:: +viewManagers( QStringList& theList ) const +{ + theList.clear(); + theList.append( SVTK_Viewer::Type() ); +} + + +QString +VisuGUI:: +engineIOR() const +{ + CORBA::String_var anIOR = GetVisuGen(this)->GetID(); + return QString(anIOR.in()); +} + + +bool +VisuGUI:: +activateModule( SUIT_Study* theStudy ) +{ + SalomeApp_Module::activateModule( theStudy ); + studyActivated(); + setMenuShown( true ); + setToolShown( true ); + return true; +} + + +bool +VisuGUI:: +deactivateModule( SUIT_Study* theStudy ) +{ + setMenuShown( false ); + setToolShown( false ); + + SalomeApp_Module::deactivateModule( theStudy ); + return true; +} + +SalomeApp_Selection* +VisuGUI:: +createSelection() const +{ + return new VisuGUI_Selection( (SalomeApp_Module*)this ); +} + +//****************************************************************** +void VisuGUI::studyActivated() +{ + GetVisuGen(this)->SetCurrentStudy(GetDSStudy(GetCStudy(GetAppStudy(this)))); +} + +/* +extern "C" { + CAM_Module* + createModule() + { + return new VisuGUI(); + } +} +*/ +void VisuGUI::createPreferences() +{ + int sbarTab = addPreference( tr( "VISU_SCALAR_BAR" ) ); + + int fontGr = addPreference( tr( "VISU_FONT" ), sbarTab ); + int tfont = addPreference( tr( "VISU_TITLE" ), fontGr, SalomeApp_Preferences::Font, "VISU", "scalar_bar_title_font" ); + addPreference( tr( "VISU_TITLE" ), fontGr, SalomeApp_Preferences::Color, "VISU", "scalar_bar_title_color" ); + int lfont = addPreference( tr( "VISU_LABELS" ), fontGr, SalomeApp_Preferences::Font, "VISU", "scalar_bar_label_font" ); + addPreference( tr( "VISU_LABELS" ), fontGr, SalomeApp_Preferences::Color, "VISU", "scalar_bar_label_color" ); + + QStringList fam; + fam.append( tr( "VISU_FONT_ARIAL" ) ); + fam.append( tr( "VISU_FONT_COURIER" ) ); + fam.append( tr( "VISU_FONT_TIMES" ) ); + int wflag = ( QtxListResourceEdit::FontItem::All & ( ~( QtxListResourceEdit::FontItem::Size | QtxListResourceEdit::FontItem::UserSize ) ) ); + + setPreferenceProperty( tfont, "families", fam ); + setPreferenceProperty( tfont, "system", false ); + setPreferenceProperty( tfont, "widget_flags", wflag ); + setPreferenceProperty( lfont, "families", fam ); + setPreferenceProperty( lfont, "system", false ); + setPreferenceProperty( lfont, "widget_flags", wflag ); + + int colorsLabelsGr = addPreference( tr( "VISU_COLORS_AND_LABELS" ), sbarTab ); + + int numcol = addPreference( tr( "VISU_NB_COLORS" ), colorsLabelsGr, SalomeApp_Preferences::IntSpin, "VISU", "scalar_bar_num_colors" ); + setPreferenceProperty( numcol, "min", 2 ); + setPreferenceProperty( numcol, "max", 64 ); + + int numlab = addPreference( tr( "VISU_NB_LABELS" ), colorsLabelsGr, SalomeApp_Preferences::IntSpin, "VISU", "scalar_bar_num_labels" ); + setPreferenceProperty( numlab, "min", 2 ); + setPreferenceProperty( numlab, "max", 65 ); + + int orientGr = addPreference( tr( "VISU_ORIENTATION" ), sbarTab ); + int orient = addPreference( tr( "VISU_ORIENTATION" ), orientGr, SalomeApp_Preferences::Selector, "VISU", "scalar_bar_orientation" ); + QStringList orients; + orients.append( tr( "VISU_VERTICAL" ) ); + orients.append( tr( "VISU_HORIZONTAL" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( orient, "strings", orients ); + setPreferenceProperty( orient, "indexes", indices ); + + int posVSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_VERTICAL" ), sbarTab ); + int xv = addPreference( tr( "VISU_X" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_x" ); + int yv = addPreference( tr( "VISU_Y" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_y" ); + int wv = addPreference( tr( "VISU_WIDTH" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_width" ); + int hv = addPreference( tr( "VISU_HEIGHT" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_height" ); + setPreferenceProperty( xv, "step", 0.1 ); + setPreferenceProperty( yv, "step", 0.1 ); + setPreferenceProperty( wv, "step", 0.1 ); + setPreferenceProperty( hv, "step", 0.1 ); + setPreferenceProperty( xv, "min", 0.0 ); + setPreferenceProperty( yv, "min", 0.0 ); + setPreferenceProperty( wv, "min", 0.0 ); + setPreferenceProperty( hv, "min", 0.0 ); + setPreferenceProperty( xv, "max", 1.0 ); + setPreferenceProperty( yv, "max", 1.0 ); + setPreferenceProperty( wv, "max", 1.0 ); + setPreferenceProperty( hv, "max", 1.0 ); + + int posHSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_HORIZONTAL" ), sbarTab ); + int xh = addPreference( tr( "VISU_X" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_x" ); + int yh = addPreference( tr( "VISU_Y" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_y" ); + int wh = addPreference( tr( "VISU_WIDTH" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_width" ); + int hh = addPreference( tr( "VISU_HEIGHT" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_height" ); + setPreferenceProperty( xh, "step", 0.1 ); + setPreferenceProperty( yh, "step", 0.1 ); + setPreferenceProperty( wh, "step", 0.1 ); + setPreferenceProperty( hh, "step", 0.1 ); + setPreferenceProperty( xh, "min", 0.0 ); + setPreferenceProperty( yh, "min", 0.0 ); + setPreferenceProperty( wh, "min", 0.0 ); + setPreferenceProperty( hh, "min", 0.0 ); + setPreferenceProperty( xh, "max", 1.0 ); + setPreferenceProperty( yh, "max", 1.0 ); + setPreferenceProperty( wh, "max", 1.0 ); + setPreferenceProperty( hh, "max", 1.0 ); + + int srangeTab = addPreference( tr( "Scalar range, Sweep, MED import" ) ); + + int rangeGr = addPreference( tr( "VISU_SCALAR_RANGE" ), srangeTab ); + setPreferenceProperty( rangeGr, "columns", 1 ); + + int mode = addPreference( tr( "VISU_SCALAR_MODE" ), rangeGr, SalomeApp_Preferences::Selector, "VISU", "scalar_bar_mode" ); + QStringList modes; + modes.append( tr( "VISU_MODULUS" ) ); + modes.append( tr( "VISU_COMPONENT" ) + tr("1") ); + modes.append( tr( "VISU_COMPONENT" ) + tr("2") ); + modes.append( tr( "VISU_COMPONENT" ) + tr("3") ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + indices.append( 3 ); + setPreferenceProperty( mode, "strings", modes ); + setPreferenceProperty( mode, "indexes", indices ); + + addPreference( tr( "VISU_LOGARITHMIC_SCALING" ), rangeGr, SalomeApp_Preferences::Bool, "VISU", "scalar_bar_logarithmic" ); + + int rangetype = addPreference( tr( "VISU_RANGE_TO_USE" ), rangeGr, SalomeApp_Preferences::Selector, "VISU", "scalar_range_type" ); + QStringList types; + types.append( tr( "VISU_FIELD_RANGE" ) ); + types.append( tr( "VISU_IMPOSED_RANGE" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( rangetype, "strings", types ); + setPreferenceProperty( rangetype, "indexes", indices ); + + int imposedGr = addPreference( tr( "VISU_MINMAX_IMPOSED_RANGE" ), srangeTab ); + + int min = addPreference( tr( "VISU_MIN" ), imposedGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_range_min" ); + int max = addPreference( tr( "VISU_MAX" ), imposedGr, SalomeApp_Preferences::DblSpin, "VISU", "scalar_range_max" ); + setPreferenceProperty( min, "step", 0.1 ); + setPreferenceProperty( max, "step", 0.1 ); + + int sweepGr = addPreference( tr( "VISU_SWEEPING_PREF" ), srangeTab ); + setPreferenceProperty( sweepGr, "columns", 1 ); + + int timestep = addPreference( tr( "VISU_TIME_STEP" ), sweepGr, SalomeApp_Preferences::DblSpin, "VISU", "sweeping_time_step" ); + int nbcycles = addPreference( tr( "VISU_NB_CYCLES" ), sweepGr, SalomeApp_Preferences::IntSpin, "VISU", "sweeping_number_cycles" ); + int nbsteps = addPreference( tr( "VISU_NB_STEPS" ), sweepGr, SalomeApp_Preferences::IntSpin, "VISU", "sweeping_number_steps" ); + setPreferenceProperty( timestep, "min", 0.1 ); + setPreferenceProperty( timestep, "step", 0.1 ); + setPreferenceProperty( timestep, "max", 1000 ); + setPreferenceProperty( nbcycles, "max", 100 ); + setPreferenceProperty( nbsteps, "max", 200 ); + + int importGr = addPreference( tr( "MED files import" ), srangeTab ); + addPreference( tr( "Full MED loading" ), importGr, SalomeApp_Preferences::Bool, "VISU", "full_med_loading" ); +} + +void VisuGUI::preferencesChanged( const QString&, const QString& ) +{ +} + +SUIT_ViewManager* +VisuGUI +::getViewManager(const QString& theType, + const bool theIsCreate) +{ + return getApp()->getViewManager(theType,theIsCreate); +} + diff --git a/src/VISUGUI/VisuGUI.h b/src/VISUGUI/VisuGUI.h new file mode 100644 index 00000000..2e985a1e --- /dev/null +++ b/src/VISUGUI/VisuGUI.h @@ -0,0 +1,152 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI.h +// Author : Laurent CORNABE & Hubert ROLLAND +// Module : VISU +// $Header$ + +#ifndef VisuGUI_HeaderFile +#define VisuGUI_HeaderFile + +#include "SalomeApp_Module.h" + +class SUIT_ViewManager; + +class VisuGUI: public SalomeApp_Module +{ + Q_OBJECT; + +public: + + VisuGUI(); + virtual ~VisuGUI(); + + virtual void initialize( CAM_Application* ); + virtual void windows( QMap& ) const; + virtual void viewManagers( QStringList& ) const; + + virtual QString engineIOR() const; + + virtual void studyActivated(); + + virtual void contextMenuPopup( const QString& theClient, QPopupMenu* theMenu, QString& theTitle ); + + virtual void createPreferences(); + virtual void preferencesChanged( const QString&, const QString& ); + + virtual + SUIT_ViewManager* + getViewManager(const QString& theType, + const bool theIsCreate); + +public slots: + virtual bool deactivateModule( SUIT_Study* ); + virtual bool activateModule( SUIT_Study* ); + +protected slots: + void OnImportFromFile(); + void OnExploreMEDFile(); + void OnImportTableFromFile(); + void OnExportTableToFile(); + void OnImportMedField(); + + void OnCreateMesh(); + void OnCreateScalarMap(); + void OnCreateDeformedShape(); + void OnCreateVectors(); + void OnCreateIsoSurfaces(); + void OnCreateCutPlanes(); + void OnCreateCutLines(); + void OnCreateStreamLines(); + void OnCreatePlot3D(); + void OnCreateManyMesh(); + void OnCreatePlot2dView(); + + void OnEditScalarMap(); + void OnEditDeformedShape(); + void OnEditCutPlanes(); + void OnEditCutLines(); + void OnEditIsoSurfaces(); + void OnEditVectors(); + void OnEditStreamLines(); + void OnEditPlot3D(); + + virtual void OnDisplayPrs(); + virtual void OnDisplayOnlyPrs(); + virtual void OnErasePrs(); + virtual void OnEraseAll(); + + void OnMakeSurfaceframe(); + void OnMakeInsideframe(); + void OnMakeWireframe(); + void OnMakeSurface(); + void OnMakePoints(); + void OnMakeShrink(); + + void OnChangeColor(); + void OnChangeWireframeColor(); + void OnChangeOpacity(); + void OnChangeLines(); + + void OnShowTable(); + void OnCreateTable(); + void OnDeleteObjects(); + void OnPlotData(); + void OnCurveProperties(); + void OnClearContainer(); + void OnEditContainer(); + + void OnMergeScalarBars(); + void OnFreeScalarBars(); + + void OnSaveViewParams(); + void OnRestoreViewParams(); + + void OnRename(); + void OnClippingPlanes(); + void OnSweep(); + void OnTimeAnimation(); + void OnShowAnimation(); + + void OnCopyPresentation(); + + void OnSelectionInfo(); + + void OnTranslatePrs(); + void OnArrangeActors(); + + void OnScaling(); + void OnCubeAxes(); + +protected: + virtual SalomeApp_Selection* createSelection() const; + +private: + void createActions(); + void createMenus(); + void createToolBars(); + void createPopupMenus(); +}; + +#endif diff --git a/src/VISUGUI/VisuGUI_PopupTools.cxx b/src/VISUGUI/VisuGUI_PopupTools.cxx new file mode 100644 index 00000000..e0f55458 --- /dev/null +++ b/src/VISUGUI/VisuGUI_PopupTools.cxx @@ -0,0 +1,217 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI_PopupTools.cxx +// Author : Sergey Anikin +// Module : VISU + +#include "VisuGUI_PopupTools.h" +#include "VisuGUI_Tools.h" + +#include "VISU_Actor.h" + +using namespace VISU; + +////////////////////////////////////////////////// +// Class: VisuGUI_Selection +////////////////////////////////////////////////// + +QtxValue VisuGUI_Selection::param( const int ind, const QString& p ) const +{ + QtxValue val( SalomeApp_Selection::param( ind, p ) ); + if ( !val.isValid() ) { + if ( p == "type" ) val = QtxValue( type( ind ) ); + else if ( p == "nbComponents" ) val = QtxValue( nbComponents( ind ) ); + else if ( p == "representation" ) val = QtxValue( representation( ind ) ); + else if ( p == "nbTimeStamps" ) val = QtxValue( nbTimeStamps( ind ) ); + else if ( p == "nbChildren" ) val = QtxValue( nbChildren( ind ) ); + else if ( p == "nbNamedChildren") val = QtxValue( nbNamedChildren( ind ) ); + else if ( p == "isVisible" ) val = QtxValue( isVisible( ind ) ); + else if ( p == "isShrunk" ) val = QtxValue( isShrunk( ind ) ); + else if ( p == "hasActor" ) val = QtxValue( hasActor( ind ) ); + } + + return val; +} + +// Macro for converting VISU enumeration items into corresponding strings +#define ENUM2STRING( x, y ) \ + case y: \ + x = QString( #y ); \ + break + +QString VisuGUI_Selection::type( const int ind ) const +{ + QString aResStr; + VISU::Storable::TRestoringMap aMap; + CORBA::Object_var anObject = GetSelectedObj( study(), entry( ind ), &aMap ); + + VISU::Base_var aVisuObj = VISU::Base::_narrow( anObject ); + if ( !CORBA::is_nil( aVisuObj ) ){ + VISU::VISUType aType = aVisuObj->GetType(); + switch (aType) { + ENUM2STRING( aResStr, VISU::TVISUGEN ); + ENUM2STRING( aResStr, VISU::TRESULT ); + ENUM2STRING( aResStr, VISU::TTABLE ); + ENUM2STRING( aResStr, VISU::TCURVE ); + ENUM2STRING( aResStr, VISU::TCONTAINER ); + ENUM2STRING( aResStr, VISU::TMESH ); + ENUM2STRING( aResStr, VISU::TSCALARMAP ); + ENUM2STRING( aResStr, VISU::TISOSURFACE ); + ENUM2STRING( aResStr, VISU::TDEFORMEDSHAPE ); + ENUM2STRING( aResStr, VISU::TCUTPLANES ); + ENUM2STRING( aResStr, VISU::TCUTLINES ); + ENUM2STRING( aResStr, VISU::TVECTORS ); + ENUM2STRING( aResStr, VISU::TSTREAMLINES ); + ENUM2STRING( aResStr, VISU::TPLOT3D ); + ENUM2STRING( aResStr, VISU::TANIMATION ); + } + } + + if(aResStr.isNull()){ + bool isExist; + VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue( aMap, "myType", &isExist).toInt(); + if( isExist ){ + switch (aType) { + ENUM2STRING( aResStr, VISU::TENTITY ); + ENUM2STRING( aResStr, VISU::TFAMILY ); + ENUM2STRING( aResStr, VISU::TGROUP ); + ENUM2STRING( aResStr, VISU::TVIEW3D ); + ENUM2STRING( aResStr, VISU::TFIELD ); + ENUM2STRING( aResStr, VISU::TTIMESTAMP ); + } + } + } + + if(aResStr.isNull()){ + bool isExist; + QString aVal = VISU::Storable::FindValue(aMap,"myComment",&isExist); + if ( isExist && aVal!="MESH" ) + aResStr = "VISU::T" + aVal; + } + + return aResStr; +} + +QString VisuGUI_Selection::nbComponents( const int ind ) const +{ + QString aResStr; + VISU::Storable::TRestoringMap aMap; + GetSelectedObj( study(), entry( ind ), &aMap ); + bool isExist; + const QString& aVal = VISU::Storable::FindValue(aMap,"myNumComponent",&isExist); + if ( isExist ) + aResStr = aVal; + return aResStr; +} + +QString VisuGUI_Selection::nbTimeStamps( const int ind ) const +{ + QString aResStr; + VISU::Storable::TRestoringMap aMap; + GetSelectedObj( study(), entry( ind ), &aMap ); + bool isExist; + const QString& aVal = VISU::Storable::FindValue(aMap,"myNbTimeStamps",&isExist); + if ( isExist ) + aResStr = aVal; + return aResStr; +} + +QString VisuGUI_Selection::representation( const int ind ) const +{ + QString aResStr; + + if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) ){ + if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) ){ + int aRepresent = anVISUActor->GetRepresentation(); + switch ( aRepresent ){ + ENUM2STRING( aResStr, VISU::POINT ); + ENUM2STRING( aResStr, VISU::WIREFRAME ); + ENUM2STRING( aResStr, VISU::SHADED ); + ENUM2STRING( aResStr, VISU::INSIDEFRAME ); + ENUM2STRING( aResStr, VISU::SURFACEFRAME ); + } + } + } + + return aResStr; +} + +int VisuGUI_Selection::nbChild( const int ind, const bool named ) const +{ + int cnt = 0; + _PTR(Study) aStudy = GetCStudy( study() ); + if ( aStudy ){ + _PTR(SObject) SO = aStudy->FindObjectID( entry( ind ).latin1() ); + if ( SO ){ + for ( _PTR(ChildIterator) Iter = aStudy->NewChildIterator( SO ); Iter->More(); Iter->Next() ) { + _PTR(SObject) refSO; + if ( !Iter->Value()->ReferencedObject( refSO ) && ( !named || Iter->Value()->GetName().size() ) ) + cnt++; + } + } + } + return cnt; +} + +QString VisuGUI_Selection::nbChildren( const int ind ) const +{ + QString aResStr; + aResStr.setNum( nbChild( ind, false ) ); + return aResStr; +} + +QString VisuGUI_Selection::nbNamedChildren( const int ind ) const +{ + QString aResStr; + aResStr.setNum( nbChild( ind, true ) ); + return aResStr; +} + +QString VisuGUI_Selection::isVisible( const int ind ) const +{ + QString aResStr; + + if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) ) + if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) ) + aResStr = anVISUActor->GetVisibility() ? "1" : "0"; + + return aResStr; +} + +QString VisuGUI_Selection::isShrunk( const int ind ) const +{ + QString aResStr; + + if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) ) + if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) ) + if ( anVISUActor->IsShrunkable() ) + aResStr = anVISUActor->IsShrunk() ? "1" : "0"; + + return aResStr; +} + +QString VisuGUI_Selection::hasActor( const int ind ) const +{ + return representation( ind ).isEmpty() ? "0" : "1"; +} -- 2.39.2