]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Fix for Bug IPAL17020
authorapo <apo@opencascade.com>
Fri, 21 Sep 2007 08:08:26 +0000 (08:08 +0000)
committerapo <apo@opencascade.com>
Fri, 21 Sep 2007 08:08:26 +0000 (08:08 +0000)
  CRASH after calling "ApplyProperties()".

idl/VISU_Gen.idl
src/PIPELINE/VISUPipeLine.cxx
src/PIPELINE/VISU_MeshPL.cxx
src/VISUGUI/VisuGUI_BuildProgressDlg.cxx
src/VISUGUI/VisuGUI_BuildProgressDlg.h
src/VISU_I/VISU_ColoredPrs3d_i.cc
src/VISU_I/VISU_Gen_i.hh
src/VISU_I/VISU_TimeAnimation.cxx

index e9abf00fa12a99bb5565324d792036e11a7aa6c4..ac0d71b79405c4251c50908d16b9ab505139fd17 100644 (file)
@@ -1426,7 +1426,8 @@ module VISU {
      * 5) the field name is not the same;
      * 6) the entity is not the same.
      */
-    void ApplyProperties(in long theFieldNum, in ColoredPrs3d thePrs);
+    void ApplyProperties(in long theFieldNum, in ColoredPrs3d thePrs)
+      raises (SALOME::SALOME_Exception);
   };
 
   /*! \brief Interface %Result
index 7c93e0c9ee9af6424b9143ca4515b631e8e9ca18..5bd01b4af21e27659503b527aab0650c10624a4b 100644 (file)
@@ -56,7 +56,7 @@ typedef VISU_DeformedShapePL TPresent;
 
 using namespace std;
 
-static int isOnlyMesh = false;
+static int isOnlyMesh = true;
 
 int main(int argc, char** argv){
   try{
index e08b34138c2eaf6970552c4b95c09fd2a5f25598..027e60d5e2cd94790e8384857797f567fd362207 100644 (file)
@@ -33,6 +33,7 @@
 #include <vtkObjectFactory.h>
 #include <vtkDataSetMapper.h>
 #include <vtkUnstructuredGrid.h>
+#include <vtkPolyData.h>
 
 vtkStandardNewMacro(VISU_MeshPL);
 
@@ -43,6 +44,9 @@ VISU_MeshPL::VISU_MeshPL()
 
 void VISU_MeshPL::Build()
 {
+  //VTKViewer_GeometryFilter* aFilter = VTKViewer_GeometryFilter::New();
+  //aFilter->SetInput(GetClippedInput());
+  //myMapper->SetInput(aFilter->GetOutput());
   myMapper->SetInput(GetClippedInput());
 }
 
index e96c89c9a22a106d2826e3e07f9056b7999fa993..c1c9988dc2c723294496ea89da6839a70387c35c 100644 (file)
@@ -129,6 +129,14 @@ VisuGUI_BuildProgressDlg::VisuGUI_BuildProgressDlg( QWidget* theParent ):
   myBuildFieldsButton->setPaletteBackgroundColor( Qt::red );
   connect( myBuildFieldsCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
 
+  myBuildMinMaxCheckBox = new QCheckBox( tr( "BUILD_MINMAX" ), myProgressBox );
+  myBuildMinMaxCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_min_max", true ) );
+  myBuildMinMaxButton = new QPushButton( myProgressBox );
+  myBuildMinMaxButton->setEnabled( false );
+  myBuildMinMaxButton->setFixedSize( 30, 30 );
+  myBuildMinMaxButton->setPaletteBackgroundColor( Qt::red );
+  connect( myBuildMinMaxCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
+
   myBuildGroupsCheckBox = new QCheckBox( tr( "BUILD_GROUPS" ), myProgressBox );
   myBuildGroupsCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_groups", true ) );
   myBuildGroupsButton = new QPushButton( myProgressBox );
@@ -141,8 +149,10 @@ VisuGUI_BuildProgressDlg::VisuGUI_BuildProgressDlg( QWidget* theParent ):
   aProgressLayout->addWidget( myBuildEntitiesButton,   0, 1 );
   aProgressLayout->addWidget( myBuildFieldsCheckBox,   1, 0 );
   aProgressLayout->addWidget( myBuildFieldsButton,     1, 1 );
-  aProgressLayout->addWidget( myBuildGroupsCheckBox,   2, 0 );
-  aProgressLayout->addWidget( myBuildGroupsButton,     2, 1 );
+  aProgressLayout->addWidget( myBuildMinMaxCheckBox,   2, 0 );
+  aProgressLayout->addWidget( myBuildMinMaxButton,     2, 1 );
+  aProgressLayout->addWidget( myBuildGroupsCheckBox,   3, 0 );
+  aProgressLayout->addWidget( myBuildGroupsButton,     3, 1 );
 
   // Time
   myTimeBox = new QGroupBox( tr( "IMPORT_TIME" ), this );
@@ -222,7 +232,7 @@ void VisuGUI_BuildProgressDlg::onStart()
                           tr("BUT_OK"));
     onClose();
   }else{
-    myResult->SetBuildFields( myBuildFieldsCheckBox->isChecked(), true );
+    myResult->SetBuildFields( myBuildFieldsCheckBox->isChecked(), myBuildMinMaxCheckBox->isChecked() );
     myResult->SetBuildGroups( myBuildGroupsCheckBox->isChecked() );
     
     //setModal( false );
@@ -303,7 +313,8 @@ void VisuGUI_BuildProgressDlg::onTimer()
       bool isGroupsDone = myResult->IsGroupsDone();
 
       updateButton( myBuildEntitiesButton, isEntitiesDone );
-      updateButton( myBuildFieldsButton, isFieldsDone && isMinMaxDone);
+      updateButton( myBuildFieldsButton, isFieldsDone );
+      updateButton( myBuildMinMaxButton, isMinMaxDone );
       updateButton( myBuildGroupsButton, isGroupsDone );
     }
 
@@ -389,6 +400,14 @@ void VisuGUI_BuildProgressDlg::onBuildCheckBoxClicked()
   else if( aCheckBox == myBuildFieldsCheckBox )
   {
     myBuildFieldsButton->setPaletteBackgroundColor( aColor );
+    if( !anIsChecked && myBuildMinMaxCheckBox->isChecked() )
+      myBuildMinMaxCheckBox->animateClick();
+  }
+  else if( aCheckBox == myBuildMinMaxCheckBox )
+  {
+    myBuildMinMaxButton->setPaletteBackgroundColor( aColor );
+    if( anIsChecked && !myBuildFieldsCheckBox->isChecked() )
+      myBuildFieldsCheckBox->animateClick();
   }
   else if( aCheckBox == myBuildGroupsCheckBox )
     myBuildGroupsButton->setPaletteBackgroundColor( aColor );
index 3eb7c1a100cc63410976e7345e766c314a5229c5..8284c52df99f15c9f709c2bc9d5f075b566ac573 100644 (file)
@@ -95,6 +95,9 @@ private:
   QCheckBox*       myBuildFieldsCheckBox;
   QPushButton*     myBuildFieldsButton;
 
+  QCheckBox*       myBuildMinMaxCheckBox;
+  QPushButton*     myBuildMinMaxButton;
+
   QCheckBox*       myBuildGroupsCheckBox;
   QPushButton*     myBuildGroupsButton;
 
index b0da6dabaf115c9d90d35de0a481dd0d7287d8c1..8e94b8090d09c1b7e6535dd4974d1445dd24963a 100644 (file)
@@ -48,6 +48,19 @@ static int MYDEBUG = 0;
 
 namespace VISU
 {
+  //---------------------------------------------------------------
+  inline
+  TMinMax 
+  GetMinMax(VISU::Result_i* theResult,
+           VISU::PField theField,
+           vtkIdType theCompID)
+  {
+    if(!theResult->IsMinMaxDone())
+      theResult->GetInput()->BuildMinMax();
+    
+    return theField->GetMinMax(theCompID);
+  }
+
   //---------------------------------------------------------------
   vtkFloatingPointType
   TMinMaxController
@@ -69,19 +82,20 @@ namespace VISU
   //---------------------------------------------------------------
   struct TSimpleMinMaxController: virtual TVTKMinMaxController
   {
+    VISU::Result_i* myResult;
     VISU::PField myField;
     
-    TSimpleMinMaxController(VISU::PField theField)
-    {
-      myField = theField;
-    }
+    TSimpleMinMaxController(VISU::ColoredPrs3d_i* theColoredPrs3d):
+      myResult(theColoredPrs3d->GetResult()),
+      myField(theColoredPrs3d->GetField())
+    {}
     
     virtual
     vtkFloatingPointType
     GetComponentMin(vtkIdType theCompID)
     {
       if(myField){
-       TMinMax aMinMax = myField->GetMinMax(theCompID);
+       TMinMax aMinMax = GetMinMax(myResult, myField, theCompID);
        return aMinMax.first;
       }
       return TMinMaxController::GetComponentMin(theCompID);
@@ -92,7 +106,7 @@ namespace VISU
     GetComponentMax(vtkIdType theCompID)
     {
       if(myField){
-       TMinMax aMinMax = myField->GetMinMax(theCompID);
+       TMinMax aMinMax = GetMinMax(myResult, myField, theCompID);
        return aMinMax.second;
       }
       return TMinMaxController::GetComponentMax(theCompID);
@@ -104,8 +118,7 @@ namespace VISU
   PMinMaxController
   CreateDefaultMinMaxController(VISU::ColoredPrs3d_i* theColoredPrs3d)
   {
-    PField aField = theColoredPrs3d->GetField();
-    return PMinMaxController(new TSimpleMinMaxController(aField));
+    return PMinMaxController(new TSimpleMinMaxController(theColoredPrs3d));
   }
 
 
@@ -358,7 +371,7 @@ VISU::ColoredPrs3d_i
   if(PMinMaxController aMinMaxController = GetMinMaxController())
     return aMinMaxController->GetComponentMin(theCompID);
 
-  TMinMax aTMinMax = GetField()->GetMinMax(theCompID);
+  TMinMax aTMinMax = GetMinMax(GetResult(), GetField(), theCompID);
   return aTMinMax.first;
 }
 
@@ -370,7 +383,7 @@ VISU::ColoredPrs3d_i
   if(PMinMaxController aMinMaxController = GetMinMaxController())
     return aMinMaxController->GetComponentMax(theCompID);
 
-  TMinMax aTMinMax = GetField()->GetMinMax(theCompID);
+  TMinMax aTMinMax = GetMinMax(GetResult(), GetField(), theCompID);
   return aTMinMax.second;
 }
 
index bc52199c3c5eb275c277c024616b0b1b55b5d22f..462a7c5910a9009dfbf5e595dbf502f919803bcd 100644 (file)
@@ -33,8 +33,6 @@
 
 #include <string>
 
-UNEXPECT_CATCH(SalomeException, SALOME::SALOME_Exception);
-
 namespace VISU
 {
   class Result_i;
@@ -194,7 +192,7 @@ namespace VISU
                 bool theAddToStudy = true)
       throw (SALOME::SALOME_Exception)
     {
-      Unexpect aCatch(SalomeException);
+      Unexpect aCatch(SALOME_SalomeException);
       typedef typename TPrs3d_i::TInterface TPrs3d;
       typename TPrs3d::_var_type aPrs3d;
       if(TPrs3d_i* aPrs3d = CreatePrs3d<TPrs3d_i>(theResult,theMeshName,theEntity,theFieldName,theIteration,theAddToStudy))
index fce481f9071664ffb089c1d47d298fec29fddc29..5cd923b08091aa4698499899eb248c861b1c9898 100644 (file)
@@ -58,6 +58,8 @@
 #include "SALOMEDSClient_AttributeString.hxx"
 #include "SALOMEDSClient_AttributeName.hxx"
 
+#include "Utils_ExceptHandlers.hxx"
+
 #include <qpixmap.h>
 #include <qimage.h>
 #include <qstrlist.h>
@@ -1781,19 +1783,24 @@ void VISU_TimeAnimation::onViewDeleted()
 void VISU_TimeAnimation::ApplyProperties(CORBA::Long theFieldNum, VISU::ColoredPrs3d_ptr thePrs)
   throw (SALOME::SALOME_Exception)
 {
+  Unexpect aCatch(SALOME_SalomeException);
+
   VISU::ColoredPrs3d_i* aPrs_i = dynamic_cast<VISU::ColoredPrs3d_i*>(GetServant(thePrs).in());
 
   if ( !aPrs_i ) 
-    throw SALOME_Exception(LOCALIZED("Error : invalid dynamic cast of the given presentation to VISU::ColoredPrs3d_i"));
+    THROW_SALOME_CORBA_EXCEPTION("Error : invalid dynamic cast of the given presentation to VISU::ColoredPrs3d_i",
+                                SALOME::INTERNAL_ERROR);
   
   if ( myAnimationMode == 0 ) { // parallel animation mode
     FieldData& aData = myFieldsLst[theFieldNum];
     
     if ( aData.myPrs.empty() )
-      throw SALOME_Exception(LOCALIZED("Error : presentations for the given field is not yet created!"));
+      THROW_SALOME_CORBA_EXCEPTION("Error : presentations for the given field is not yet created!",
+                                  SALOME::INTERNAL_ERROR);
     
     if ( aPrs_i->GetResult() != aData.myPrs[0]->GetResult() )
-      throw SALOME_Exception(LOCALIZED("Error : the MED file is not the same!"));
+      THROW_SALOME_CORBA_EXCEPTION("Error : the MED file is not the same!",
+                                  SALOME::INTERNAL_ERROR);
     
     for (int i = 0; i < aData.myNbFrames; i++) {
       bool anIsFixedRange = false;
@@ -1812,7 +1819,8 @@ void VISU_TimeAnimation::ApplyProperties(CORBA::Long theFieldNum, VISU::ColoredP
       FieldData& aData = myFieldsLst[f];
       
       if ( aData.myPrs.empty() )
-       throw SALOME_Exception(LOCALIZED("Error : presentations for the given field is not yet created!"));
+       THROW_SALOME_CORBA_EXCEPTION("Error : presentations for the given field is not yet created!",
+                                    SALOME::INTERNAL_ERROR);
       
       for (int i = 0; i < aData.myNbFrames; i++) {
        aData.myPrs[i]->SameAsParams(aPrs_i,