]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Adjust to HEAD modifications
authorapo <apo@opencascade.com>
Tue, 27 Dec 2005 14:17:21 +0000 (14:17 +0000)
committerapo <apo@opencascade.com>
Tue, 27 Dec 2005 14:17:21 +0000 (14:17 +0000)
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISUGUI/VisuGUI_Displayer.cxx
src/VISUGUI/VisuGUI_OffsetDlg.cxx
src/VISUGUI/VisuGUI_Plot3DDlg.cxx
src/VISUGUI/VisuGUI_Prs3dTools.h
src/VISUGUI/VisuGUI_ScalarBarDlg.cxx
src/VISUGUI/VisuGUI_Tools.cxx
src/VISUGUI/VisuGUI_Tools.h
src/VISU_I/VISU_ColoredPrs3d_i.cc

index 1da83dacb52c12a87179710116f8849ad2aa7c23..19f17b0bf6de971946dcfe822a0a66621ce8b89e 100644 (file)
@@ -167,7 +167,7 @@ VisuGUI::
 OnImportFromFile()
 {
   if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()");
-  if ( CheckLock(GetCStudy(GetAppStudy(this))) )
+  if ( CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)) )
     return;
 
   VisuGUI_BuildProgressDlg* aBuildProgressDlg = new VisuGUI_BuildProgressDlg( GetDesktop(this) );
@@ -182,7 +182,7 @@ OnExploreMEDFile()
 {
   if(MYDEBUG) MESSAGE("VisuGUI::OnExploreMEDFile()");
   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
-  if ( CheckLock(aStudy) )
+  if ( CheckLock(aStudy,GetDesktop(this)) )
     return;
 
   SALOME_MED::MED_Gen_var aGen = GetMEDEngine();
@@ -223,7 +223,7 @@ VisuGUI::
 OnImportTableFromFile()
 {
   if(MYDEBUG) MESSAGE("VisuGUI::OnImportTableFromFile()");
-  if ( CheckLock(GetCStudy(GetAppStudy(this))) )
+  if ( CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)) )
     return;
 
   QStringList aFilter;
@@ -361,7 +361,7 @@ VisuGUI::
 OnImportMedField()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
   SALOMEDS::Study_var aStudy = GetDSStudy(aCStudy);
 
@@ -459,7 +459,7 @@ VisuGUI::
 OnCreateMesh()
 {
   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aStudy))
+  if (CheckLock(aStudy,GetDesktop(this)))
     return;
 
   // Get selected SObject
@@ -479,7 +479,7 @@ VisuGUI::
 OnCreateManyMesh()
 {
   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aStudy))
+  if (CheckLock(aStudy,GetDesktop(this)))
     return;
 
   // create a VTK view window if it does not exist
@@ -560,7 +560,7 @@ void
 VisuGUI::
 OnCreatePlot2dView()
 {
-  CheckLock(GetCStudy(GetAppStudy(this)));
+  CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this));
   GetVisuGen( this )->CreateContainer();
   UpdateObjBrowser(this);
 }
@@ -572,9 +572,11 @@ OnDisplayPrs()
   if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs");
 
   QApplication::setOverrideCursor(Qt::waitCursor);
-  SALOME_ListIO aList;
+  SALOME_ListIO aSel, aList;
   LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
-  mgr->selectedObjects(aList);
+  mgr->selectedObjects( aSel );
+
+  extractContainers( aSel, aList );
 
   Handle(SALOME_InteractiveObject) anIO;
   for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) {
@@ -648,14 +650,18 @@ OnErasePrs()
   if (vw)
     vw->unHighlightAll();
 
-  SALOME_ListIO aList;
+  SALOME_ListIO aList, aSel;
   LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
-  mgr->selectedObjects(aList);
+  mgr->selectedObjects( aSel );
+
+  extractContainers( aSel, 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))
+      RemoveScalarBarPosition(this,anObject);
     ErasePrs( this, anObject, false );
   }
 
@@ -791,6 +797,7 @@ OnEraseAll()
       for (anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ) {
         if (anActor->GetVisibility() > 0)
           if (VISU_Actor* anVISUActor = VISU_Actor::SafeDownCast(anActor)) {
+           RemoveScalarBarPosition(this,anVISUActor->GetPrs3d());
             anVISUActor->VisibilityOff();
           }
       }
@@ -1082,7 +1089,7 @@ VisuGUI::
 OnDeleteObjects()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
 
   SALOME_ListIO aList;
@@ -1320,7 +1327,7 @@ VisuGUI::
 OnClearContainer()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
   Handle(SALOME_InteractiveObject) anIO;
   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
@@ -1368,7 +1375,7 @@ VisuGUI::
 OnSaveViewParams()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
 
   SUIT_ViewManager* aViewMgr = getApp()->activeViewManager();
@@ -1416,7 +1423,7 @@ VisuGUI::
 OnRename()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
 
   Handle(SALOME_InteractiveObject) anIO;
@@ -1646,7 +1653,7 @@ VisuGUI::
 OnCopyPresentation()
 {
   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
-  if (CheckLock(aCStudy))
+  if (CheckLock(aCStudy,GetDesktop(this)))
     return;
 
   Handle(SALOME_InteractiveObject) anIO;
@@ -2407,16 +2414,17 @@ createPopupMenus()
   QString orCurveInvisible = "or (type='VISU::TCURVE'" + andInvisible + ")";
   QString aPrsVisible   = "(($type in {'VISU::TMESH' " + aPrsAll + "}) and isVisible)";
   QString aPrsInvisible = "(($type in {'VISU::TMESH' " + aPrsAll + "})" + andInvisible + ")";
+  QString aComponent = "( selcount=1 and canBeDisplayed )";
 
-  QString anEraseRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsVisible +
-    " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveVisible + ")))";
+  QString anEraseRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsVisible +
+    " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveVisible + "))) ) or " + aComponent;
 
-  QString aDisplayRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsInvisible +
-    " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveInvisible + ")))";
+  QString aDisplayRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsInvisible +
+    " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveInvisible + "))) ) or" + aComponent;
 
-  QString aDOnlyRule = "selcount>0 and ({true} in $canBeDisplayed) and (($type in {'VISU::TMESH' " + aPrsAll + "})"
+  QString aDOnlyRule = "selcount>0 and ({true} in $canBeDisplayed) and (($type in {'VISU::TMESH' " + aPrsAll + "})"
     " or (client='ObjectBrowser' and ((type='VISU::TTABLE' and nbChildren>0) or"
-    " ($type in {'VISU::TCURVE' 'VISU::TCONTAINER'}))))";
+    " ($type in {'VISU::TCURVE' 'VISU::TCONTAINER'})))) ) or" + aComponent;
 
   mgr->setRule( action( VISU_ERASE ), anEraseRule, true );
   mgr->setRule( action( VISU_DISPLAY ), aDisplayRule, true );
@@ -2871,6 +2879,9 @@ void VisuGUI::createPreferences()
   setPreferenceProperty( wh, "max", 1.0 );
   setPreferenceProperty( hh, "max", 1.0 );
 
+  int scalarBarGr = addPreference( tr( "Scalar bars default position" ), sbarTab );
+  addPreference( tr( "Arrange Scalar Bars" ), scalarBarGr, LightApp_Preferences::Bool, "VISU", "scalar_bars_default_position" );
+
   int srangeTab = addPreference( tr( "Sweep, MED import" ) );
 
   int sweepGr = addPreference( tr( "VISU_SWEEPING_PREF" ), srangeTab );
@@ -2907,6 +2918,12 @@ VisuGUI
   return getApp()->getViewManager(theType,theIsCreate);
 }
 
+TViewToPrs3d 
+VisuGUI
+::getScalarBarsMap()
+{
+  return myScalarBarsMap;
+}
 LightApp_Displayer* VisuGUI::displayer()
 {
   if( !myDisplayer )
index 30c24e8264d6ed4b886095a47c3b3ffae71c4047..411b0bfc82323cfdf3f7104397db48cb07d5e983 100644 (file)
 
 #include "SalomeApp_Module.h"
 
+#include <map>
+#include <set>
+
 class SUIT_ViewManager;
+class SVTK_ViewWindow;
+class Prs3d_i;
+
+namespace VISU{
+typedef std::pair<Prs3d_i*,int> TPrs3dToInd; // prs pointer and default index of scalar bar placement
+typedef std::set<TPrs3dToInd> TSetPrs3d;
+typedef std::map<SVTK_ViewWindow*,TSetPrs3d> TViewToPrs3d;
+}
 
 class VisuGUI: public SalomeApp_Module
 {
@@ -61,6 +72,9 @@ public:
   getViewManager(const QString& theType, 
                 const bool theIsCreate);
 
+  VISU::TViewToPrs3d getScalarBarsMap();
+  VISU::TViewToPrs3d myScalarBarsMap;
+  
 public slots:
   virtual bool deactivateModule( SUIT_Study* );
   virtual bool activateModule( SUIT_Study* );
index 4ea8f642e34199cb084d53421112f96529d248f9..380ee7f40e6425bf4ced77387b154e211c3f5aa0 100644 (file)
@@ -223,6 +223,9 @@ bool VisuGUI_Displayer::canBeDisplayed( const QString& entry, const QString& vie
   if( CORBA::is_nil( anObj ) )
     return false;
 
+  if( study->isComponent( entry ) )
+    return true;
+
   if( viewer_type==SVTK_Viewer::Type() || viewer_type==VVTK_Viewer::Type())
   {
     VISU::Prs3d_i* thePrs = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant( anObj ).in() );
index 7465cee51dfeea2d41237cbd0c41ebd08b523b04..3fca41a1d23db6973f7ec8d02551a5601f94ac12 100644 (file)
@@ -1,3 +1,22 @@
+// 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.salome-platform.org/
+//
 
 #include "VisuGUI_OffsetDlg.h"
 
index 056a1a938c06c51aa25e41ddcb9ba727ab170a09..a79356329eca42f54ff6e809e4cb6baa31ee5da2 100644 (file)
@@ -552,7 +552,10 @@ VisuGUI_Plot3DDlg::VisuGUI_Plot3DDlg (SalomeApp_Module* theModule)
 void VisuGUI_Plot3DDlg::accept()
 {
   if (myIsoPane->check() && myScalarPane->check())
-    QDialog::accept();
+    {
+      myScalarPane->deletePreview();
+      QDialog::accept();
+    }
 }
 
 //=======================================================================
@@ -562,6 +565,7 @@ void VisuGUI_Plot3DDlg::accept()
 void VisuGUI_Plot3DDlg::reject()
 {
   myIsoPane->check(); // hide preview
-
+  myScalarPane->deletePreview();
+  
   QDialog::reject();
 }
index 9af013e18f193b872ad996d15d9af0b7c1e1e038..a832fbb523374efb8fb58dae2c1c115bc44cdec9 100644 (file)
@@ -138,6 +138,10 @@ namespace VISU
     QString anEntity = Storable::FindValue(aMap,"myEntityId",&isExist).latin1();
     QString aFieldName = Storable::FindValue(aMap,"myFieldName",&isExist).latin1();
     QString aTimeStampId = Storable::FindValue(aMap,"myTimeStampId",&isExist).latin1();
+    //
+    int aPos = GetFreePositionOfDefaultScalarBar(theModule);
+    GetResourceMgr()->setValue("VISU","scalar_bar_position_num",aPos);
+    //
     QApplication::setOverrideCursor(Qt::waitCursor);
     
     TPrs3d_i* aPrs3d =
@@ -175,6 +179,8 @@ namespace VISU
       }
       PublishInView<TViewer>(theModule,aPrs3d,true,theIsCreateView);
 
+      AddScalarBarPosition(theModule,aPrs3d,aPos);
+
       return true;
     }
 
@@ -189,7 +195,7 @@ namespace VISU
   CreatePrs3d(VisuGUI* theModule,
              const bool theIsCreateView = true)
   {
-    if (CheckLock(GetCStudy(GetAppStudy(theModule))))
+    if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule)))
       return;
     
     _PTR(SObject) aTimeStampSObj;
index 48749127d47b240a931e8a49d243df6fd4ba4612..9e811e47fe89f97e3c71db13d151e41352a9fc06 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "SVTK_ViewWindow.h"
 
+#include "SVTK_ViewWindow.h"
+
 #include "VISUConfig.hh"
 #include "VISU_Convertor.hxx"
 
@@ -263,7 +265,6 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref):
   myBusy = false;
 }
 
-
 /**
  * Initializes dialog box values from resources
  */
@@ -276,6 +277,12 @@ void VisuGUI_ScalarBarPane::initFromResources() {
 
   SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
 
+  bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0);
+  int aPlace = 1;
+  if (anIsArrangeBar){
+    aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0);
+  }
+
   int aScalarMode = aResourceMgr->integerValue("VISU", "scalar_bar_mode", 0);
   myModeCombo->setCurrentItem(aScalarMode);
 
@@ -296,6 +303,11 @@ void VisuGUI_ScalarBarPane::initFromResources() {
   sbW = aResourceMgr->doubleValue("VISU", propertyName + "width", sbW);
   sbH = aResourceMgr->doubleValue("VISU", propertyName + "height",sbH);
   
+  if(orient){
+    sbY1 += sbH*(aPlace-1);
+  } else {
+    sbX1 += sbW*(aPlace-1);
+  }
   sbCol = aResourceMgr->integerValue("VISU" ,"scalar_bar_num_colors", sbCol);
   sbLab = aResourceMgr->integerValue("VISU", "scalar_bar_num_labels", sbLab);
 
index 075eadd9ee535cdcc0c5de2db1c19694ca611a10..b59e97ca89689ac4ada63def86db5bf3872978e0 100644 (file)
@@ -61,6 +61,8 @@
 #include "SUIT_Session.h"
 #include "SUIT_MessageBox.h"
 
+#include "VisuGUI.h"
+
 #include <vtkRenderer.h>
 #include <vtkActorCollection.h>
 
@@ -102,10 +104,16 @@ namespace VISU
   }
 
   bool
-  CheckLock( _PTR(Study) theStudy )
+  CheckLock( _PTR(Study) theStudy,
+            QWidget* theWidget )
   {
-    if(IsStudyLocked(theStudy))
-      throw std::runtime_error(QObject::tr("WRN_STUDY_LOCKED").latin1());
+    if(IsStudyLocked(theStudy)){
+      SUIT_MessageBox::warn1(theWidget,
+                            QObject::tr("WRN_VISU_WARNING"),
+                            QObject::tr("WRN_STUDY_LOCKED"),
+                            QObject::tr("BUT_OK"));
+       return true;
+    }
     return false;
   }
 
@@ -282,7 +290,7 @@ namespace VISU
                 Handle(SALOME_InteractiveObject)* theIO,
                 VISU::Storable::TRestoringMap* theMap)
   {
-    if (CheckLock(GetCStudy(GetAppStudy(theModule))))
+    if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule)))
       return NULL;
 
     CORBA::Object_var anObject = GetSelectedObj(theModule, theIO);
@@ -413,7 +421,6 @@ namespace VISU
     return true;
   }
 
-  //************************************************************
   // Display/Erase
 
   void
@@ -458,22 +465,22 @@ namespace VISU
   }
 
   void
-  DeleteSObject (SalomeApp_Module* theModule,
-                 _PTR(Study)       theStudy,
-                 _PTR(SObject)     theSObject)
+  DeleteSObject(VisuGUI* theModule,
+               _PTR(Study) theStudy,
+               _PTR(SObject) theSObject)
   {
-    SalomeApp_Study* study = GetAppStudy( theModule );
-
     _PTR(ChildIterator) aChildIter = theStudy->NewChildIterator(theSObject);
     for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) {
       _PTR(SObject) aChildSObject = aChildIter->Value();
       
       CORBA::Object_var aChildObj = VISU::ClientSObjectToObject(aChildSObject);
+      RemoveScalarBarPosition(theModule,aChildObj);
       ErasePrs(theModule, aChildObj);
     }
 
     CORBA::Object_var anObj = VISU::ClientSObjectToObject(theSObject);
     if (!CORBA::is_nil(anObj)) {
+      RemoveScalarBarPosition(theModule,anObj);
       ErasePrs(theModule, anObj);
 
       VISU::RemovableObject_var aRemovableObject = VISU::RemovableObject::_narrow(anObj);
@@ -490,26 +497,16 @@ namespace VISU
   }
 
   void
-  DeletePrs3d(SalomeApp_Module* theModule,
+  DeletePrs3d(VisuGUI* theModule,
               VISU::Prs3d_i* thePrs,
               const Handle(SALOME_InteractiveObject)& theIO)
   {
     if (!thePrs)
       return;
-    if (CheckLock(GetCStudy(GetAppStudy(theModule))))
+    if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule)))
       return;
-    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
-    CORBA::String_var anEntry = aSObject->GetID();
-    LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(theModule);
-    Remove(aSelectionMgr,theIO);
-    TViewWindows aViewWindows = GetViews(theModule);
-    for(int i = 0, iEnd = aViewWindows.size(); i < iEnd; i++){
-      SVTK_ViewWindow* aView = aViewWindows[i];
-      if(VISU_Actor* anActor = FindActor(aView,anEntry.in())){
-        aView->RemoveActor(anActor);
-        anActor->Delete();
-      }
-    }
+
+    RemoveScalarBarPosition(theModule,thePrs);
     thePrs->RemoveFromStudy();
   }
 
@@ -518,14 +515,12 @@ namespace VISU
              VISU::Prs3d_i* thePrs)
   {
     if ( SVTK_ViewWindow* vw = GetViewWindow( theModule ) ){
-      VISU_Actor* anVISUActor = FindActor( vw, thePrs );
-      if (anVISUActor) {
+      if (VISU_Actor* anVISUActor = FindActor( vw, thePrs )) {
         anVISUActor->VisibilityOff();
       }
     }
   }
 
-  //************************************************************
   // Presentation management
 
   void
@@ -599,7 +594,6 @@ namespace VISU
     }
   }
 
-  //************************************************************
   // SObject type
 
   bool
@@ -660,7 +654,6 @@ namespace VISU
     return dynamic_cast<VISU::Result_i*>(VISU::GetServant(anObject).in());
   }
 
-  //************************************************************
   // Views
 
   SUIT_ViewWindow* GetActiveView(const SalomeApp_Module* theModule, QString theType)
@@ -677,7 +670,6 @@ namespace VISU
     return 0;
   }
 
-  //************************************************************
   // VTK View
 
   TViewWindows
@@ -711,8 +703,8 @@ namespace VISU
        return wnd;
       else
       {
-       if(SUIT_ViewManager* aViewManager = anApp->getViewManager( SVTK_Viewer::Type(), theCreate ))
-         return dynamic_cast<SVTK_ViewWindow*>( aViewManager->getActiveView() );
+       SUIT_ViewManager* aViewManager = anApp->getViewManager( SVTK_Viewer::Type(), theCreate );
+       return aViewManager ? dynamic_cast<SVTK_ViewWindow*>( aViewManager->getActiveView() ) : 0;
       }
     }
     return NULL;
@@ -786,20 +778,19 @@ namespace VISU
 
     vtkRenderer *aRen = vw->getRenderer();
     vtkActorCollection *anActColl = aRen->GetActors();
+    anActColl->InitTraversal();
 
     vtkActor *anActor;
     VISU_Actor* anVISUActor = NULL;
     VISU_Actor* aResActor = NULL;
-    for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ){
-      if(!SALOME_Actor::SafeDownCast(anActor))
-        continue;
-      if(anActor->IsA("VISU_Actor")){
-        anVISUActor = VISU_Actor::SafeDownCast(anActor);
+    while(vtkActor *anActor = anActColl->GetNextActor()){
+      anVISUActor = VISU_Actor::SafeDownCast(anActor);
+      if(anVISUActor){
         VISU::Prs3d_i* aPrs = anVISUActor->GetPrs3d();
         if(aPrs == NULL) continue;
         if (thePrs == aPrs) {
-          aResActor = anVISUActor;
           try {
+           aResActor = anVISUActor;
             thePrs->UpdateActor(aResActor);
             aResActor->VisibilityOn();
           } catch (std::runtime_error& ex) {
@@ -1418,4 +1409,58 @@ namespace VISU
     }
     return aList;
   }
+  
+  int GetFreePositionOfDefaultScalarBar(VisuGUI* theModule){
+    int minIndx = 1;
+    std::set<int> aIndexes;
+    SVTK_ViewWindow* vw = GetViewWindow(theModule);
+    TViewToPrs3d aMap = theModule->getScalarBarsMap();
+    TViewToPrs3d::const_iterator aViewToPrsIter = aMap.find(vw);
+    if (aViewToPrsIter != aMap.end()){
+      TSetPrs3d::const_iterator aPrsIter = (aViewToPrsIter->second).begin();
+      for(;aPrsIter!=(aViewToPrsIter->second).end();aPrsIter++){
+       aIndexes.insert((*aPrsIter).second);
+      }
+    }
+    std::set<int>::const_iterator aIter = aIndexes.begin();
+    for (int i=1,length=aIndexes.size(); i <= length; i++){
+      std::set<int>::const_iterator aIter = aIndexes.find(i);
+      if(aIter==aIndexes.end()){minIndx = i;break;} 
+      else minIndx = i + 1;
+      
+    }
+    return minIndx;
+  }
+  
+  void AddScalarBarPosition(VisuGUI* theModule,VISU::Prs3d_i* thePrs3d, int pos){
+    SVTK_ViewWindow* vw = GetViewWindow(theModule);
+    TViewToPrs3d& aMap = theModule->myScalarBarsMap;
+    TPrs3dToInd aPair; aPair.first=thePrs3d; aPair.second=pos;
+    aMap[vw].insert(aPair);
+  }
+  
+  void RemoveScalarBarPosition(VisuGUI* theModule,SVTK_ViewWindow* vw,VISU::Prs3d_i* thePrs3d){
+    TViewToPrs3d& aMap = theModule->myScalarBarsMap;
+    TSetPrs3d::iterator aIter = aMap[vw].begin();
+    for(;aIter!=aMap[vw].end();aIter++)
+      if((*aIter).first == thePrs3d){
+       aMap[vw].erase(*aIter);
+       return;
+      }
+  }
+
+  void RemoveScalarBarPosition(VisuGUI* theModule,VISU::Prs3d_i* thePrs3d){
+    SVTK_ViewWindow* vw = GetViewWindow(theModule);
+    RemoveScalarBarPosition(theModule,vw,thePrs3d);
+  }
+  
+  void RemoveScalarBarPosition(VisuGUI* theModule,CORBA::Object_ptr theObject){
+    if (!CORBA::is_nil(theObject)) {
+      Base_var aBase = Base::_narrow(theObject);
+      if (CORBA::is_nil(aBase)) return;
+      if (VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(aBase).in())){
+       RemoveScalarBarPosition(theModule,aPrsObject);
+      }
+    }
+  }
 }
index 677ecdef303892c091f6bf601d32f8a7cc828f9d..d514b4b3a223fe691bcfc90bbf20f8767653b46c 100644 (file)
@@ -37,6 +37,8 @@
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(MED_Gen)
 
+class QWidget;
+
 class SUIT_Desktop;
 class SUIT_ViewWindow;
 class VISU_Actor;
@@ -48,6 +50,7 @@ class CAM_Module;
 class LightApp_SelectionMgr;
 class SalomeApp_Module;
 class SalomeApp_Study;
+class VisuGUI;
 
 namespace VISU {
   class Prs3d_i;
@@ -63,7 +66,8 @@ namespace VISU {
   _PTR(Study)                          GetCStudy(const SalomeApp_Study* theStudy);
 
   bool                                 IsStudyLocked( _PTR(Study) theStudy );
-  bool                                 CheckLock( _PTR(Study) theStudy );
+  bool                                 CheckLock( _PTR(Study) theStudy,
+                                                 QWidget* theWidget );
 
   void                                 UpdateObjBrowser(SalomeApp_Module* theModule,
                                                        bool theIsUpdateDataModel = true,
@@ -98,10 +102,10 @@ namespace VISU {
   void                                 ErasePrs(const SalomeApp_Module* theModule,
                                                CORBA::Object_ptr theObject,
                                                bool theUpdate = true);
-  void                                 DeleteSObject(SalomeApp_Module* theModule,
+  void                                 DeleteSObject(VisuGUI* theModule,
                                                     _PTR(Study)       theStudy,
                                                     _PTR(SObject)     theSObject);
-  void                                 DeletePrs3d(SalomeApp_Module* theModule,
+  void                                 DeletePrs3d(VisuGUI* theModule,
                                                   VISU::Prs3d_i* thePrs,
                                                   const Handle(SALOME_InteractiveObject)& theIO);
   void                                 ErasePrs3d(const SalomeApp_Module* theModule,
@@ -193,6 +197,12 @@ namespace VISU {
                                            const Handle(SALOME_InteractiveObject)& theIO);
   std::vector<VISU::Prs3d_i*> GetPrs3dList (const SalomeApp_Module* theModule,
                                            _PTR(SObject) theObject);
+  
+  int GetFreePositionOfDefaultScalarBar(VisuGUI* theModule);
+  void AddScalarBarPosition(VisuGUI* theModule,VISU::Prs3d_i* thePrs3d, int pos);
+  void RemoveScalarBarPosition(VisuGUI* theModule,VISU::Prs3d_i* thePrs3d);
+  void RemoveScalarBarPosition(VisuGUI* theModule,SVTK_ViewWindow* vw,VISU::Prs3d_i* thePrs3d);
+  void RemoveScalarBarPosition(VisuGUI* theModule,CORBA::Object_ptr theObject);
 }
 
 #endif
index 8ae44caf5c240f5967be11b5e7622d075dd27789..b38c88b23ec21f2bc2865035e9d2bd5ebcb2c57f 100644 (file)
@@ -39,6 +39,7 @@ using namespace std;
 
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
+//#define _DEXCEPT_
 #else
 static int MYDEBUG = 0;
 #endif
@@ -462,6 +463,18 @@ VISU::ColoredPrs3d_i
   myHeight = (myOrientation == VISU::ScalarMap::VERTICAL)? 0.8:0.12;
   myHeight = aResourceMgr->doubleValue("VISU", propertyName + "height", myHeight);
 
+  // scalar bar default position
+  bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0);
+  int aPlace = 1;
+  if (anIsArrangeBar){
+    aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0);
+  }
+  if(myOrientation == VISU::ScalarMap::HORIZONTAL){
+    myPosition[1] += myHeight*(aPlace-1);
+  } else {
+    myPosition[0] += myWidth*(aPlace-1);
+  }
+
   // Nb of Labels
   myNumberOfLabels = aResourceMgr->integerValue( "VISU", "scalar_bar_num_labels", 5 );
 
@@ -625,7 +638,9 @@ VISU::ColoredPrs3d_i
   SALOMEDS::StudyBuilder_var aStudyBuilder = myStudy->NewBuilder();
   if(myAddToStudy) 
     aStudyBuilder->NewCommand();  // There is a transaction
+#ifndef _DEXCEPT_
   try{
+#endif
     DoSetInput(myResult);
     QString aComment;
     myName = "NoName";
@@ -651,6 +666,7 @@ VISU::ColoredPrs3d_i
       CreateAttributes(myStudy,anEntry.c_str(),aRefFatherEntry.c_str(),anIOR,myName.c_str(),"",aComment.latin1(),true);
       mySObject = myStudy->FindObjectIOR(anIOR);
     }
+#ifndef _DEXCEPT_
   }catch(std::exception& exc){
     INFOS("Follow exception was occured :\n"<<exc.what());
     throw;
@@ -658,6 +674,7 @@ VISU::ColoredPrs3d_i
     INFOS("Unknown exception was occured!");
     throw;
   }
+#endif
   if(myAddToStudy) 
     aStudyBuilder->CommitCommand();
   return this;