#include "VisuGUI_StreamLinesDlg.h"
#include "VisuGUI_EditContainerDlg.h"
#include "VisuGUI_TimeAnimation.h"
-#include "VisuGUI_ClippingDlg.h"
#include "VisuGUI_Selection.h"
#include "VisuGUI_NonIsometricDlg.h"
SALOMEDS::AttributeIOR_var anIOR;
switch (theCommandID){
- /* ========================================================================== */
- /* Import Table from file */
- /* ========================================================================== */
+ /* ======================================================================================== */
+ /* Import Table from file */
+ /* ======================================================================================== */
case 199:
{
if(checkLock(aStudy)) break;
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:
{
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();
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 :
/* 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;
case 908 : // Sweep IsoSurfaces or Cutplanes
visuGUI->Sweep();
break;
-*/
+
/* ======================================================================================== */
/* Preferences for Scalar Bar */
/* ======================================================================================== */
}
/* ======================================================================================== */
-/* Preferences for Sweeping */
+/* Preferences for Sweeping */
/* ======================================================================================== */
case 52:
{
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 );
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;
}
-//=====================================================================================
-// function : ClippingPlanes()
-// purpose :
-//=====================================================================================
-void VisuGUI::ClippingPlanes() {
- //SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
- new VisuGUI_ClippingDlg (QAD_Application::getDesktop(),"",false);
-}
-
//=====================================================================================
// function : Sweep()
// purpose :
// 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;
selNext = homoAnimatable; break;
}
selNext = homoOther; break;
+ case VISU::TTIMESTAMP:
+ selNext = homoTimeStamp; break;
default:
selNext = homoOther;
}
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 ) {
}
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;
}
thePopup->insertItem("Sweep", visuGUI, SLOT(Sweep()));
}
-
- thePopup->insertItem("Clipping planes", visuGUI, SLOT(ClippingPlanes()));
-
if (isVTKViewer) {
if ( theParent == "Viewer" &&
( aType == VISU::TMESH ||
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();
return false;
}
+// ========================================================================================
+// GetPrs3dList: find list of presentations for the given object
+// ========================================================================================
+std::vector<VISU::Prs3d_i*> VisuGUI::GetPrs3dList(const Handle(SALOME_InteractiveObject)& theIO) {
+ std::vector<VISU::Prs3d_i*> 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<VISU::Prs3d_i*> VisuGUI::GetPrs3dList(SALOMEDS::SObject_ptr theObject) {
+ std::vector<VISU::Prs3d_i*> 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<VISU::Prs3d_i*>(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<VISU::Prs3d_i*> 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<VISU::Prs3d_i*> 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<VISU::Prs3d_i*> 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<VISU::Prs3d_i*> 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<VISU::ScalarMap_i*>(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<VISU::Prs3d_i*> 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<VISU::ScalarMap_i*>(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<VISU::Prs3d_i*> 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<VISU::ScalarMap_i*>(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();
+ }
+ }
+ }
+}
/* ======================================================================================== */