From: nkv Date: Wed, 20 Apr 2005 10:56:21 +0000 (+0000) Subject: PostPro 2005 Lot 1 : SP7 X-Git-Tag: V2_2_0_VISU_improvement_2005-05-27~52 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=77db53c7ecc83e1c7a8341aec3c4b78ce11c606c;p=modules%2Fvisu.git PostPro 2005 Lot 1 : SP7 T1.5 Merging of Scalar Bars --- diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx index d45552c7..851dd70c 100644 --- a/src/VISUGUI/VisuGUI.cxx +++ b/src/VISUGUI/VisuGUI.cxx @@ -60,7 +60,6 @@ #include "VisuGUI_StreamLinesDlg.h" #include "VisuGUI_EditContainerDlg.h" #include "VisuGUI_TimeAnimation.h" -#include "VisuGUI_ClippingDlg.h" #include "VisuGUI_Selection.h" #include "VisuGUI_NonIsometricDlg.h" @@ -425,9 +424,9 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) SALOMEDS::AttributeIOR_var anIOR; switch (theCommandID){ - /* ========================================================================== */ - /* Import Table from file */ - /* ========================================================================== */ + /* ======================================================================================== */ + /* Import Table from file */ + /* ======================================================================================== */ case 199: { if(checkLock(aStudy)) break; @@ -435,24 +434,24 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) break; } - /* ========================================================================== */ - /* Import Mesh from MED, DAT file */ - /* ========================================================================== */ + /* ======================================================================================== */ + /* Import Mesh from MED, DAT file */ + /* ======================================================================================== */ -// case 111: -// { -// visuGUI->CopyAndImportFile(); -// break; -// } + case 111: + { + visuGUI->CopyAndImportFile(); + break; + } case 112: { visuGUI->ImportFile(); break; } - /* ========================================================================== */ - /* Export results and mesh into a file format */ - /* ========================================================================== */ + /* ======================================================================================== */ + /* Export results and mesh into a file format */ + /* ======================================================================================== */ case 122: { @@ -460,15 +459,15 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) break; } - /* ========================================================================== */ - /* Visualization of Results : */ - /* 4011 : Scalar Map */ - /* 4012 : Deformed Shape */ - /* 4013 : Vectors */ - /* 4014 : Iso-Surfaces */ - /* 4015 : Cut Planes */ - /* 4016 : Stream Lines */ - /* ========================================================================== */ + /* ========================================================================== */ + /* Visualization of Results : */ + /* 4011 : Scalar Map */ + /* 4012 : Deformed Shape */ + /* 4013 : Vectors */ + /* 4014 : Iso-Surfaces */ + /* 4015 : Cut Planes */ + /* 4016 : Stream Lines */ + /* ========================================================================== */ case 4011 : visuGUI->CreateScalarMap(); @@ -496,47 +495,47 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) visuGUI->SelectionInfo(); break; - /* ========================================================================== */ - /* Visualization - Wireframe */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Wireframe */ + /* ========================================================================================================================= */ case 4211 : ChangeViewer(1); break; - /* ========================================================================== */ - /* Visualization - Surface */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Surface */ + /* ========================================================================================================================= */ case 4212 : ChangeViewer(2); break; - /* ========================================================================== */ - /* Visualization - Points */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Points */ + /* ========================================================================================================================= */ case 4213 : ChangeViewer(0); break; - /* ========================================================================== */ - /* Visualization - Erase */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Erase */ + /* ========================================================================================================================= */ case 422 : ChangeViewer(-1); break; - /* ========================================================================== */ - /* Visualization - Global */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Global */ + /* ========================================================================================================================= */ //case 423 : - /* ========================================================================== */ - /* Visualization - Partial */ - /* ========================================================================== */ + /* ========================================================================================================================= */ + /* Visualization - Partial */ + /* ========================================================================================================================= */ //case 424 : @@ -553,12 +552,12 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) /* POP-UP OBJECTS BROWSER */ /* ============================ */ -// case 900 : // Rename object -// visuGUI->Rename(); -// break; + case 900 : // Rename object + visuGUI->Rename(); + break; // ---------------- For Popup in Viewer -/* case 802 : // Erase + case 802 : // Erase case 902 : // Erase visuGUI->ErasePrs(); break; @@ -611,7 +610,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) case 908 : // Sweep IsoSurfaces or Cutplanes visuGUI->Sweep(); break; -*/ + /* ======================================================================================== */ /* Preferences for Scalar Bar */ /* ======================================================================================== */ @@ -622,7 +621,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) } /* ======================================================================================== */ -/* Preferences for Sweeping */ +/* Preferences for Sweeping */ /* ======================================================================================== */ case 52: { @@ -636,10 +635,12 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) case 53: case 54: { + bool check = false; QMenuData* pp; - QMenuItem* item = parent->menuBar()->findItem(theCommandID,&pp); - bool check = !pp->isItemChecked(theCommandID); - pp->setItemChecked(theCommandID,check); + if (parent->menuBar()->findItem(theCommandID,&pp)) { + check = !pp->isItemChecked(theCommandID); + pp->setItemChecked(theCommandID,check); + } switch(theCommandID){ case 53: QAD_CONFIG->addSetting( "Visu:BuildResult", check ); @@ -690,14 +691,13 @@ bool VisuGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent) tr("ERR_NO_MEMORY") + " " + tr(e.what()), tr("VISU_BUT_OK") ); return false; - } - catch (std::exception& e) { + } + catch (std::exception& e){ INFOS(e.what()); QAD_MessageBox::warn1(QAD_Application::getDesktop(), tr ("VISU_WARNING"), tr(e.what()), tr("VISU_BUT_OK") ); - } - catch (const SALOME::SALOME_Exception& S_ex) { + }catch (const SALOME::SALOME_Exception& S_ex) { INFOS("const SALOME::SALOME_Exception& S_ex"); QtCatchCorbaException(S_ex); return false; @@ -2343,15 +2343,6 @@ void VisuGUI::DeleteViewParams() { } -//===================================================================================== -// function : ClippingPlanes() -// purpose : -//===================================================================================== -void VisuGUI::ClippingPlanes() { - //SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); - new VisuGUI_ClippingDlg (QAD_Application::getDesktop(),"",false); -} - //===================================================================================== // function : Sweep() // purpose : @@ -2701,7 +2692,7 @@ void VisuGUI::DefinePopup( QString & theContext, QString & theParent, QString & // function : checkHomoSelection() // purpose : //===================================================================================== -enum { homoNone=0, homoCurves, homoPresentations, homoPresentable, homoAnimatable, homoOther }; +enum { homoNone=0, homoCurves, homoPresentations, homoPresentable, homoAnimatable, homoTimeStamp, homoOther }; int VisuGUI::checkHomoSelection() { int selMode = homoNone; @@ -2764,6 +2755,8 @@ int VisuGUI::checkHomoSelection() selNext = homoAnimatable; break; } selNext = homoOther; break; + case VISU::TTIMESTAMP: + selNext = homoTimeStamp; break; default: selNext = homoOther; } @@ -2837,6 +2830,9 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri if (isVTKViewer) { thePopup->insertItem( "Display", visuGUI, SLOT( DisplayManyPrs() ) ); thePopup->insertItem( "Erase", visuGUI, SLOT( EraseManyPrs () ) ); + thePopup->insertSeparator(); + thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) ); + thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) ); } } else if ( selMode == homoPresentable ) { @@ -2844,6 +2840,17 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri } else if ( selMode == homoAnimatable ) { thePopup->insertItem( "Animation...", visuGUI, SLOT( TimeAnimation() ) ); + if (isVTKViewer) { + thePopup->insertSeparator(); + thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) ); + thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) ); + } + } + else if ( selMode == homoTimeStamp ) { + if (isVTKViewer) { + thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) ); + thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) ); + } } return true; } @@ -3035,9 +3042,6 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri thePopup->insertItem("Sweep", visuGUI, SLOT(Sweep())); } - - thePopup->insertItem("Clipping planes", visuGUI, SLOT(ClippingPlanes())); - if (isVTKViewer) { if ( theParent == "Viewer" && ( aType == VISU::TMESH || @@ -3113,6 +3117,13 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri case VISU::TFIELD: if ((getValue(aSObject, "myNbTimeStamps").toLong() > 1) && isVTKViewer) thePopup->insertItem( "Animation...", visuGUI, SLOT( TimeAnimation() ) ); + if (isVTKViewer) { + if ( thePopup->count() > 0 ) { + thePopup->insertSeparator(); + } + thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) ); + thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) ); + } break; case VISU::TTIMESTAMP: { int aNunComponent = VISU::Storable::FindValue(aMap,"myNumComponent",&isExist).toInt(); @@ -3702,6 +3713,218 @@ try { return false; } +// ======================================================================================== +// GetPrs3dList: find list of presentations for the given object +// ======================================================================================== +std::vector VisuGUI::GetPrs3dList(const Handle(SALOME_InteractiveObject)& theIO) { + std::vector aList; + if (!theIO.IsNull() && theIO->hasEntry()) { + SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument(); + SALOMEDS::SObject_var aSObject = aStudy->FindObjectID( theIO->getEntry() ); + aList = GetPrs3dList(aSObject); + } + return aList; +} + +std::vector VisuGUI::GetPrs3dList(SALOMEDS::SObject_ptr theObject) { + std::vector aList; int k = 0; + if( !theObject->_is_nil() ) { + CORBA::Object_var aCORBAObject = VISU::SObjectToObject(theObject); + if ( !CORBA::is_nil( aCORBAObject ) ) { + VISU::Base_var aVisuObj = VISU::Base::_narrow( aCORBAObject ); + if ( !CORBA::is_nil( aVisuObj ) ) { + VISU::VISUType aType = aVisuObj->GetType(); + switch( aType ) { + case VISU::TSCALARMAP: + case VISU::TISOSURFACE: + case VISU::TDEFORMEDSHAPE: + case VISU::TCUTPLANES: + case VISU::TCUTLINES: + case VISU::TVECTORS: + case VISU::TSTREAMLINES: + { + PortableServer::ServantBase_var aServant = VISU::GetServant(aCORBAObject); + if (aServant.in()) { + VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); + aList.resize(k+1); aList[k] = aPrsObject; k++; + } + } + break; + case VISU::TFIELD: + { + SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument(); + SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject); + SALOMEDS::SObject_var aTimeStamp; + anIter->Next(); // First is reference on support + for(;anIter->More();anIter->Next()) { + aTimeStamp = anIter->Value(); + if (aTimeStamp->_is_nil()) continue; + std::vector aSubList = GetPrs3dList(aTimeStamp); + if (!aSubList.empty()) { + int n = aSubList.size(); + aList.resize(k+n); + for (int i = 0; i < n; i++) + { aList[k] = aSubList[i]; k++; } + } + } + } + break; + } + } + } + else { + SALOMEDS::GenericAttribute_var anAttr; + if ( theObject->FindAttribute( anAttr, "AttributeComment") ) { + SALOMEDS::AttributeComment_var aComment = SALOMEDS::AttributeComment::_narrow( 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 ) { + switch ( aType ) { + case VISU::TFIELD: + { + SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument(); + SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject); + SALOMEDS::SObject_var aTimeStamp; + anIter->Next(); // First is reference on support + for(;anIter->More();anIter->Next()) { + aTimeStamp = anIter->Value(); + if (aTimeStamp->_is_nil()) continue; + std::vector aSubList = GetPrs3dList(aTimeStamp); + if (!aSubList.empty()) { + int n = aSubList.size(); + aList.resize(k+n); + for (int i = 0; i < n; i++) + { aList[k] = aSubList[i]; k++; } + } + } + } + break; + case VISU::TTIMESTAMP: + { + SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument(); + SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject); + SALOMEDS::SObject_var aPrs; + for(;anIter->More();anIter->Next()) { + aPrs = anIter->Value(); + if (aPrs->_is_nil()) continue; + std::vector aSubList = GetPrs3dList(aPrs); + if (!aSubList.empty()) { + int n = aSubList.size(); + aList.resize(k+n); + for (int i = 0; i < n; i++) + { aList[k] = aSubList[i]; k++; } + } + } + } + break; + } + } + } + } + } + return aList; +} + +// ======================================================================================== +// Merge Scalar Bars +// ======================================================================================== +void VisuGUI::MergeScalarBars(){ + SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection()); + SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() ); + + // 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(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(Sel->StoredIObjects()); It.More(); It.Next() ) { + Handle(SALOME_InteractiveObject)& anIO = It.Value(); + std::vector aPrsList = GetPrs3dList(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(aScalar); + update = true; + } + } + } + } + } + if (update) { + if (VTKViewer_ViewFrame* vf = GetVtkViewFrame()) { + if ( vf->getRenderer()->GetActors()->GetNumberOfItems () > 0 ) { + vf->getRenderer()->ResetCameraClippingRange(); + vf->Repaint(); + } + } + } +} + +// ======================================================================================== +// Un-Merge Scalar Bars +// ======================================================================================== +void VisuGUI::FreeScalarBars(){ + SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection()); + SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() ); + + // 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(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(aScalar); + update = true; + } + } + } + } + } + if (update) { + if (VTKViewer_ViewFrame* vf = GetVtkViewFrame()) { + if ( vf->getRenderer()->GetActors()->GetNumberOfItems () > 0 ) { + vf->getRenderer()->ResetCameraClippingRange(); + vf->Repaint(); + } + } + } +} /* ======================================================================================== */ diff --git a/src/VISUGUI/VisuGUI.h b/src/VISUGUI/VisuGUI.h index 813f13e7..017ab39c 100644 --- a/src/VISUGUI/VisuGUI.h +++ b/src/VISUGUI/VisuGUI.h @@ -160,6 +160,8 @@ class VisuGUI : public SALOMEGUI{ static void ErasePrs(VISU::Prs3d_i* thePrs); static VISU::Prs3d_i* GetSelectedPrs3d(Handle(SALOME_InteractiveObject)* theIO = NULL); + static std::vector GetPrs3dList(const Handle(SALOME_InteractiveObject)& theIO); + static std::vector GetPrs3dList(SALOMEDS::SObject_ptr theObject); static void RecreateActor(VISU::Prs3d_i* thePrs); static void CreateActor(VISU::Prs3d_i* thePrs); static VISU_Actor* GetActor(VISU::Prs3d_i* thePrs, VTKViewer_ViewFrame* theViewFrame = NULL); @@ -250,6 +252,9 @@ public slots: void PlotData(); void CurveProperties(); void ClearContainer(); + + void MergeScalarBars(); + void FreeScalarBars(); void SaveViewParams(); void RestoreViewParams(); @@ -258,7 +263,6 @@ public slots: void Rename(); void RenameTable(); void RenameContainer(); - void ClippingPlanes(); void Sweep(); void TimeAnimation();