]> SALOME platform Git repositories - modules/visu.git/blob - src/VISUGUI/VisuGUI_ViewTools.cxx
Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/visu.git] / src / VISUGUI / VisuGUI_ViewTools.cxx
1 //  VISU VISUGUI : GUI of VISU component
2 //
3 //  Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //
23 //
24 //  File   : VisuGUI_Tools.cxx
25 //  Author : Sergey Anikin
26 //  Module : VISU
27
28
29 #include "VisuGUI_ViewTools.h"
30
31 #include "VISU_Actor.h"
32
33 #include "SVTK_ViewModel.h"
34 #include "SVTK_ViewWindow.h"
35
36 namespace VISU 
37 {
38   //----------------------------------------------------------------------------
39   VISU_Actor*
40   PublishInView(VisuGUI* theModule,
41                 Prs3d_i* thePrs,
42                 SVTK_ViewWindow* theViewWindow,
43                 bool theIsHighlight)
44   {
45     if (theViewWindow) {
46       QApplication::setOverrideCursor( Qt::waitCursor );
47       try {
48         if (VISU_Actor* anActor = thePrs->CreateActor()) {
49           theViewWindow->AddActor(anActor);
50           if (theIsHighlight)
51             theViewWindow->highlight(anActor->getIO(),true);
52           theViewWindow->getRenderer()->ResetCameraClippingRange();
53           theViewWindow->Repaint();
54           QApplication::restoreOverrideCursor();
55           return anActor;
56         }
57       } catch(std::exception& exc) {
58         thePrs->RemoveActors();
59
60         QApplication::restoreOverrideCursor();
61         INFOS(exc.what());
62         SUIT_MessageBox::warn1
63           (GetDesktop(theModule), QObject::tr("WRN_VISU"),
64            QObject::tr("ERR_CANT_CREATE_ACTOR") + ": " + QObject::tr(exc.what()),
65            QObject::tr("BUT_OK"));
66       }
67     }
68     return NULL;
69   }
70
71
72   //---------------------------------------------------------------
73   VISU_Actor*
74   UpdateViewer(VisuGUI* theModule,
75                VISU::Prs3d_i* thePrs,
76                bool theDispOnly,
77                const bool theIsHighlight)
78   {
79     if (SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(theModule)) {
80       vtkRenderer *aRen = aViewWindow->getRenderer();
81       vtkActorCollection *anActColl = aRen->GetActors();
82       anActColl->InitTraversal();
83       VISU_Actor* aResActor = NULL;
84       bool isOk = true;
85       while (vtkActor *anAct = anActColl->GetNextActor()) {
86         if (VISU_Actor* anActor = dynamic_cast<VISU_Actor*>(anAct)) {
87           if (VISU::Prs3d_i* aPrs3d = anActor->GetPrs3d()) {
88             if (thePrs == aPrs3d) {
89               try {
90                 aResActor = anActor;
91                 thePrs->UpdateActors();
92                 aResActor->VisibilityOn();
93               } catch (std::runtime_error& exc) {
94                 thePrs->RemoveActors();
95                 isOk = false;
96
97                 INFOS(exc.what());
98                 SUIT_MessageBox::warn1
99                   (GetDesktop(theModule), QObject::tr("WRN_VISU"),
100                    QObject::tr("ERR_CANT_BUILD_PRESENTATION") + ": " + QObject::tr(exc.what()),
101                    QObject::tr("BUT_OK"));
102               }
103             } else if (theDispOnly) {
104               anActor->VisibilityOff();
105             }
106           } else if (theDispOnly && anActor->GetVisibility()) {
107             anActor->VisibilityOff();
108           }
109         }
110       }
111       if (aResActor) {
112         if (theIsHighlight && isOk)
113           aViewWindow->highlight(aResActor->getIO(), true);
114         aViewWindow->getRenderer()->ResetCameraClippingRange();
115         aViewWindow->Repaint();
116         return aResActor;
117       }
118       return PublishInView(theModule, thePrs, aViewWindow, theIsHighlight);
119     }
120     return NULL;
121   }
122
123
124   //---------------------------------------------------------------
125   void
126   ErasePrs3d(VisuGUI* theModule,
127              VISU::Prs3d_i* thePrs,
128              bool theDoRepaint)
129   {
130     if(SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(theModule)){
131       if(VISU_Actor* anActor = FindActor(aViewWindow, thePrs)){
132         anActor->VisibilityOff();
133         if(theDoRepaint)
134           aViewWindow->Repaint();
135       }
136     }
137   }
138
139   //----------------------------------------------------------------------------
140   void
141   ErasePrs(VisuGUI* theModule,
142            Base_i* theBase, 
143            bool theDoRepaint)
144   {
145     if(!theBase)
146       return;
147
148     switch (theBase->GetType()) {
149     case VISU::TCURVE: {
150       if (VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(theBase))
151         PlotCurve(theModule, aCurve, VISU::eErase );
152       break;
153     }
154     case VISU::TCONTAINER: {
155       if (VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(theBase))
156         PlotContainer(theModule, aContainer, VISU::eErase );
157       break;
158     }
159     case VISU::TTABLE: {
160       if (VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(theBase))
161         PlotTable(theModule, aTable, VISU::eErase );
162       break;
163     }
164     default: {
165       if(VISU::Prs3d_i* aPrs3d = VISU::GetPrs3dFromBase(theBase)){
166         if(SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(theModule)){
167           RemoveScalarBarPosition(theModule, aViewWindow, aPrs3d);
168           ErasePrs3d(theModule, aPrs3d, theDoRepaint);
169         }
170       }
171     }} // switch (aType)
172   }
173
174 }