1 // VISU VISUGUI : GUI of VISU component
3 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 // File : VisuGUI_Tools.cxx
25 // Author : Sergey Anikin
29 #include "VisuGUI_ViewTools.h"
31 #include "VISU_Actor.h"
33 #include "SVTK_ViewModel.h"
34 #include "SVTK_ViewWindow.h"
38 //----------------------------------------------------------------------------
40 PublishInView(VisuGUI* theModule,
42 SVTK_ViewWindow* theViewWindow,
46 QApplication::setOverrideCursor( Qt::waitCursor );
48 if (VISU_Actor* anActor = thePrs->CreateActor()) {
49 theViewWindow->AddActor(anActor);
51 theViewWindow->highlight(anActor->getIO(),true);
52 theViewWindow->getRenderer()->ResetCameraClippingRange();
53 theViewWindow->Repaint();
54 QApplication::restoreOverrideCursor();
57 } catch(std::exception& exc) {
58 thePrs->RemoveActors();
60 QApplication::restoreOverrideCursor();
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"));
72 //---------------------------------------------------------------
74 UpdateViewer(VisuGUI* theModule,
75 VISU::Prs3d_i* thePrs,
77 const bool theIsHighlight)
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;
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) {
91 thePrs->UpdateActors();
92 aResActor->VisibilityOn();
93 } catch (std::runtime_error& exc) {
94 thePrs->RemoveActors();
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"));
103 } else if (theDispOnly) {
104 anActor->VisibilityOff();
106 } else if (theDispOnly && anActor->GetVisibility()) {
107 anActor->VisibilityOff();
112 if (theIsHighlight && isOk)
113 aViewWindow->highlight(aResActor->getIO(), true);
114 aViewWindow->getRenderer()->ResetCameraClippingRange();
115 aViewWindow->Repaint();
118 return PublishInView(theModule, thePrs, aViewWindow, theIsHighlight);
124 //---------------------------------------------------------------
126 ErasePrs3d(VisuGUI* theModule,
127 VISU::Prs3d_i* thePrs,
130 if(SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(theModule)){
131 if(VISU_Actor* anActor = FindActor(aViewWindow, thePrs)){
132 anActor->VisibilityOff();
134 aViewWindow->Repaint();
139 //----------------------------------------------------------------------------
141 ErasePrs(VisuGUI* theModule,
148 switch (theBase->GetType()) {
150 if (VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(theBase))
151 PlotCurve(theModule, aCurve, VISU::eErase );
154 case VISU::TCONTAINER: {
155 if (VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(theBase))
156 PlotContainer(theModule, aContainer, VISU::eErase );
160 if (VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(theBase))
161 PlotTable(theModule, aTable, VISU::eErase );
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);