]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Lay out of actors within viewer
authorvsv <vsv@opencascade.com>
Fri, 13 May 2005 07:25:03 +0000 (07:25 +0000)
committervsv <vsv@opencascade.com>
Fri, 13 May 2005 07:25:03 +0000 (07:25 +0000)
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISUGUI/VisuGUI_OffsetDlg.cxx
src/VISUGUI/VisuGUI_OffsetDlg.h
src/VISUGUI/VisuGUI_TimeAnimation.cxx
src/VISUGUI/VisuGUI_TimeAnimation.h

index cbf0b3fc71a1f3ae4a99e7964a03e7ea86510152..f1077b27dc1f2b8c4dcdf632049a3a7d2de74794 100644 (file)
@@ -2883,8 +2883,10 @@ bool VisuGUI::CustomPopup (QAD_Desktop* parent, QPopupMenu* thePopup, const QStr
   thePopup->clear();
 
   if ( nbSel == 0 ) {
-    if ( theParent == "Viewer" && isVTKViewer && !aIsLocked)
+    if ( theParent == "Viewer" && isVTKViewer && !aIsLocked) {
+      thePopup->insertItem( "Arrange actors...", visuGUI, SLOT( ArrangeActors() ) );
       thePopup->insertItem( "Save view parameters", visuGUI, SLOT( SaveViewParams() ) );
+    }
     return false;
   }
   if ( nbSel > 1 ) {
@@ -4486,14 +4488,15 @@ void VisuGUI::TranslatePrs()
       aDlg.setOffset(aOffset);
       if (aDlg.exec() == QDialog::Accepted) {
        aDlg.getOffset(aOffset);
-       aPrsObject->SetOffset(aOffset);
+       if (aDlg.isToSave())
+         aPrsObject->SetOffset(aOffset);
        //      RecreateActor(aPrsObject);
        for(int i = 0, nbFrames = GetActiveStudy()->getStudyFramesCount(); i < nbFrames; i++){
          if(QAD_StudyFrame* aFrame = GetActiveStudy()->getStudyFrame(i)){
            QAD_ViewFrame* aVFrame = aFrame->getRightFrame()->getViewFrame();
            if(VTKViewer_ViewFrame* aViewFrame = dynamic_cast<VTKViewer_ViewFrame*>(aVFrame))
              if(VISU_Actor* anActor = GetActor(aPrsObject,aViewFrame))
-               anActor->SetPosition(aOffset);;
+               anActor->SetPosition(aOffset);
          }
        }
        if (VTKViewer_ViewFrame* vf = GetVtkViewFrame()) { 
@@ -4510,3 +4513,13 @@ void VisuGUI::TranslatePrs()
     }
   }
 }
+
+
+void VisuGUI::ArrangeActors()
+{
+  VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame();
+  if (aViewFrame) {
+    ArrangeDlg aDlg(GetDesktop(), aViewFrame);
+    aDlg.exec();
+  }
+}
index 381fd4bf9d50f543906b3e9accdc21dc5cf2cadb..dad1adddaad97340683e3cb934498fa2418cdfa3 100644 (file)
@@ -283,6 +283,7 @@ public slots:
   void SelectionInfo();
 
   void TranslatePrs();
+  void ArrangeActors();
 
 private :
   QDialog* myActiveDialogBox;
index 1da6938ea873099ad358a19644e273b38d5783a6..92f1ce016541441bc188942d1729ac7332649d6d 100644 (file)
@@ -9,6 +9,7 @@
 #include <qhbox.h>
 #include <qgroupbox.h>
 #include <qpushbutton.h>
+#include <qcheckbox.h>
 
 
 #define  MAXVAL 1e10
@@ -45,6 +46,10 @@ VisuGUI_OffsetDlg::VisuGUI_OffsetDlg()
 
   TopLayout->addWidget(aOffsetsPane);
 
+  mySaveChk = new QCheckBox("Save to presentation", this);
+  mySaveChk->setChecked(true);
+  TopLayout->addWidget(mySaveChk);
+
   // Common buttons ===========================================================
   QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
   GroupButtons->setColumnLayout(0, Qt::Vertical );
@@ -95,3 +100,9 @@ void VisuGUI_OffsetDlg::onReset()
   myDyEdt->setValue(0);
   myDzEdt->setValue(0);
 }
+
+
+bool VisuGUI_OffsetDlg::isToSave() const
+{
+  return mySaveChk->isChecked();
+}
index ee056867891fed2244019f6fb7fb77356e888258..48703f1077ea4be5dc64351f2031bed50daaec6b 100644 (file)
@@ -8,6 +8,7 @@
 #include <qdialog.h>
 
 class QAD_SpinBoxDbl;
+class QCheckBox;
 
 class VisuGUI_OffsetDlg: public QDialog
 {
@@ -18,6 +19,7 @@ class VisuGUI_OffsetDlg: public QDialog
   
   void setOffset(const float* theOffset);
   void getOffset(float* theOffset) const;
+  bool isToSave() const;
 
   public slots:
     void onReset();
@@ -26,6 +28,8 @@ class VisuGUI_OffsetDlg: public QDialog
   QAD_SpinBoxDbl*   myDxEdt;
   QAD_SpinBoxDbl*   myDyEdt;
   QAD_SpinBoxDbl*   myDzEdt;
+
+  QCheckBox*        mySaveChk;
 };
 
 #endif // DIALOGBOX_OFFSET_H
index 62273ad2b016e418558c82937c6adc6f598106cc..3c5b9ebfb977bb3f8040a4910ef69db1f6e90994 100644 (file)
@@ -45,6 +45,9 @@
 #include "VISU_StreamLines_i.hh"
 #include "VISU_Actor.h"
 
+#include <vtkRenderer.h>
+
+
 static double MAXVALUE = 1.0E+300;
 
 #define  MAXVAL 1e10
@@ -54,7 +57,7 @@ static double MAXVALUE = 1.0E+300;
 
 ArrangeDlg::ArrangeDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
   : QDialog(theParent, "ArrangeDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
-    myAnimator(theAnimator)
+    myAnimator(theAnimator), myViewFrame(0)
 {
   myCurrent = 0;
   init();
@@ -73,6 +76,43 @@ ArrangeDlg::ArrangeDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
 }
 
 
+ArrangeDlg::ArrangeDlg(QWidget* theParent, VTKViewer_ViewFrame* theViewFrame)
+  : QDialog(theParent, "ArrangeDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
+    myAnimator(0), myViewFrame(theViewFrame)
+{
+  myCurrent = 0;
+  init();
+  QStringList aPrsNames;
+  vtkActor* anActor;
+  vtkActorCollection *anActColl = myViewFrame->getRenderer()->GetActors();
+  for (anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL;) {
+    if (VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
+      if (anVISUActor->GetVisibility() != 0)
+       if (VISU::Prs3d_i* aPrs = anVISUActor->GetParent()->GetPrs3d())  {
+         if (!myPrsMap.contains(aPrs)) {
+           SALOMEDS::SObject_var aSObject = aPrs->GetSObject();
+           if(!aSObject->_is_nil()){
+             SALOMEDS::GenericAttribute_var anAttr;
+             if (aSObject->FindAttribute(anAttr, "AttributeName")) {
+               SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
+               string aNam = aName->Value();
+               QString strIn(aNam.c_str());
+               aPrsNames.append(strIn);
+               myPrsMap[aPrs] = myOffsets.count();
+               Offset aOffs;
+               anVISUActor->GetPosition(aOffs.myOffset);
+               myOffsets.append(aOffs);
+             }
+           }
+         }
+       }
+  }
+  myFieldLst->insertStringList(aPrsNames);
+  myFieldLst->setSelected(0, true);
+}
+
+
+
 void ArrangeDlg::init()
 {
   setCaption("Arrange Presentations");
@@ -115,9 +155,9 @@ void ArrangeDlg::init()
   //Distance Input
   QHBox* aDistPane = new QHBox(aAutoPane);
   aDistPane->setSpacing(5);
-  new QLabel("Distance", aDistPane);
-  myDistVal = new QAD_SpinBoxDbl(aDistPane, -5, 5, 0.5 );
-  myDistVal->setValue(0.5);
+  new QLabel("Relative Distance", aDistPane);
+  myDistVal = new QAD_SpinBoxDbl(aDistPane, -10,10, 0.5 );
+  myDistVal->setValue(1);
 
   myStackWgt->addWidget(aAutoPane, AutoMode);
 
@@ -150,6 +190,12 @@ void ArrangeDlg::init()
 
   connect(aBtnGrp, SIGNAL(clicked(int)), myStackWgt, SLOT(raiseWidget(int)) );
 
+  if (!myAnimator) {
+    mySaveChk = new QCheckBox("Save to presentation", this);
+    mySaveChk->setChecked(false);
+    aMainLayout->addWidget(mySaveChk);
+  }
+
   // Common buttons ===========================================================
   QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
   GroupButtons->setColumnLayout(0, Qt::Vertical );
@@ -178,6 +224,31 @@ void ArrangeDlg::init()
 
 
 void ArrangeDlg::accept()
+{
+  if (myAnimator) {
+    acceptAnimation();
+  } else {
+    acceptViewWindow();
+  }
+  QDialog::accept();
+}
+
+void ArrangeDlg::onFieldChange(int theCurrent) 
+{
+  if (myCurrent != theCurrent) {
+    Offset& aOffs = myOffsets[myCurrent];
+    aOffs.myOffset[0] = myCoord[0]->value();
+    aOffs.myOffset[1] = myCoord[1]->value();
+    aOffs.myOffset[2] = myCoord[2]->value();
+  }
+  myCurrent = theCurrent;
+  const Offset& aNewOffs = myOffsets[myCurrent];
+  myCoord[0]->setValue(aNewOffs.myOffset[0]);
+  myCoord[1]->setValue(aNewOffs.myOffset[1]);
+  myCoord[2]->setValue(aNewOffs.myOffset[2]);
+}
+
+void ArrangeDlg::acceptAnimation()
 {
   if (getMode() == ManualMode) {
     // Save from GUI
@@ -205,45 +276,81 @@ void ArrangeDlg::accept()
     int aAxis = getAxis();
     switch (aAxis) {
     case XAxis:
-      aDist = fabs(aBounds[3] - aBounds[0]);
+      aDist = fabs(aBounds[1] - aBounds[0]);
       break;
     case YAxis: 
-      aDist = fabs(aBounds[4] - aBounds[1]);
+      aDist = fabs(aBounds[3] - aBounds[2]);
       break;
     case ZAxis:
-      aDist = fabs(aBounds[5] - aBounds[2]);
+      aDist = fabs(aBounds[5] - aBounds[4]);
     }
-    aDist += aDist*getDistance();
+    aDist = aDist*getDistance();
     for (int i = 0; i < myAnimator->getNbFields(); i++) {
       myAnimator->getFieldData(i).myOffset[0] = 0;
       myAnimator->getFieldData(i).myOffset[1] = 0;
       myAnimator->getFieldData(i).myOffset[2] = 0;
       myAnimator->getFieldData(i).myOffset[aAxis] = aDist * i;
     }
-
+    
     QApplication::restoreOverrideCursor();
   }
-  QDialog::accept();
 }
 
-void ArrangeDlg::onFieldChange(int theCurrent) 
+void ArrangeDlg::acceptViewWindow()
 {
-  if (myCurrent != theCurrent) {
+  if (getMode() == ManualMode) {
+    // Save from GUI
     Offset& aOffs = myOffsets[myCurrent];
     aOffs.myOffset[0] = myCoord[0]->value();
     aOffs.myOffset[1] = myCoord[1]->value();
     aOffs.myOffset[2] = myCoord[2]->value();
+
+    QMap<VISU::Prs3d_i*, int>::Iterator it;
+    for (it = myPrsMap.begin(); it != myPrsMap.end(); ++it) {
+      VISU::Prs3d_i* aPrs = it.key();
+      Offset& aOffs = myOffsets[it.data()];
+      if (VISU_Actor* anActor = VisuGUI::GetActor(aPrs, myViewFrame)) anActor->SetPosition(aOffs.myOffset);
+      if (mySaveChk->isChecked())aPrs->SetOffset(aOffs.myOffset);
+    }
+  } else {
+    float aDist = 0;
+    bool aInit = true;
+    int i;
+    QMap<VISU::Prs3d_i*, int>::Iterator it;
+    for (it = myPrsMap.begin(), i = 0; it != myPrsMap.end(); ++it, i++) {
+      VISU::Prs3d_i* aPrs = it.key();
+      if (VISU_Actor* aActor = VisuGUI::GetActor(aPrs, myViewFrame)){
+       int aAxis = getAxis();
+       if (aInit) {
+         float aBounds[6];
+         aActor->GetBounds(aBounds);
+         switch (aAxis) {
+         case XAxis:
+           aDist = fabs(aBounds[1] - aBounds[0]);
+           break;
+         case YAxis: 
+           aDist = fabs(aBounds[3] - aBounds[2]);
+           break;
+         case ZAxis:
+           aDist = fabs(aBounds[5] - aBounds[4]);
+         }
+         aDist = aDist*getDistance();
+         aInit = false;
+       }
+       float aOffset[3];
+       aOffset[0] = aOffset[1] = aOffset[2] = 0;
+       aOffset[aAxis] = aDist * i;
+       aActor->SetPosition(aOffset);
+       
+       if (mySaveChk->isChecked())aPrs->SetOffset(aOffset);
+      }
+    }
   }
-  myCurrent = theCurrent;
-  const Offset& aNewOffs = myOffsets[myCurrent];
-  myCoord[0]->setValue(aNewOffs.myOffset[0]);
-  myCoord[1]->setValue(aNewOffs.myOffset[1]);
-  myCoord[2]->setValue(aNewOffs.myOffset[2]);
+  myViewFrame->getRenderer()->ResetCameraClippingRange(); 
+  myViewFrame->Repaint(); 
 }
 
 
-
-
 //*****************************************************************************************************
 //*****************************************************************************************************
 //*****************************************************************************************************
index dbba957fbaf8406afe01f34825c9132c1f663e5a..6d5a9c5a7a222b530973e10018ccfc905b072664 100644 (file)
@@ -26,7 +26,7 @@
 #include CORBA_CLIENT_HEADER(VISU_Gen)
 
 class VISU_TimeAnimation;
-
+class VTKViewer_ViewFrame;
 
 /**
  * Auxilliary class for presentations definition
@@ -39,6 +39,7 @@ class ArrangeDlg: public QDialog
   enum { XAxis, YAxis, ZAxis };
 
   ArrangeDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator);
+  ArrangeDlg(QWidget* theParent, VTKViewer_ViewFrame* theViewFrame);
   ~ArrangeDlg() {};
 
   int getMode() const { return  myStackWgt->id(myStackWgt->visibleWidget()); }
@@ -56,16 +57,23 @@ protected slots:
 
 
   void init();
+  void acceptAnimation();
+  void acceptViewWindow();
 
   VISU_TimeAnimation* myAnimator;
+  VTKViewer_ViewFrame* myViewFrame;
+
   QWidgetStack*       myStackWgt;
   QButtonGroup*       myAxisGrp;
   QAD_SpinBoxDbl*     myDistVal;
   QListBox*           myFieldLst;
   QAD_SpinBoxDbl*     myCoord[3];
-  QValueList<Offset> myOffsets;
+  QValueList<Offset>  myOffsets;
+
+  QCheckBox*          mySaveChk;
 
   int               myCurrent;
+  QMap<VISU::Prs3d_i*, int> myPrsMap;
 };