1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 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
23 #include "SMESH_ActorUtils.h"
24 #include "SMESH_Actor.h"
26 #include "SUIT_Tools.h"
27 #include "SUIT_Session.h"
28 #include "SUIT_ResourceMgr.h"
29 #include <SALOMEconfig.h> // To fix some redefinition
30 #include "SalomeApp_Application.h"
32 #ifndef DISABLE_PLOT2DVIEWER
33 #include <SPlot2d_ViewModel.h>
34 #include <SPlot2d_Histogram.h>
35 #include <Plot2d_ViewManager.h>
41 #include "utilities.h"
43 #include <vtkUnstructuredGrid.h>
44 #include <vtkCellType.h>
45 #include <vtkXMLUnstructuredGridWriter.h>
46 #include <vtkUnstructuredGridWriter.h>
47 #include <vtkUnsignedCharArray.h>
50 //static int MYDEBUG = 1;
52 //static int MYDEBUG = 0;
59 GetFloat( const QString& theValue,
60 vtkFloatingPointType theDefault )
62 int pos = theValue.indexOf( ":" );
63 vtkFloatingPointType val = theDefault;
66 QString name = theValue.right( theValue.length()-pos-1 ),
67 sect = theValue.left( pos );
68 if( !name.isEmpty() && !sect.isEmpty() )
69 val = GetFloat( name, sect, theDefault );
75 GetFloat( const QString& theValue,
76 const QString& theSection,
77 vtkFloatingPointType theDefault )
79 vtkFloatingPointType val = theDefault;
80 SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
82 val = (vtkFloatingPointType) mgr->doubleValue( theSection, theValue, theDefault );
88 WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid,
89 const char* theFileName)
91 vtkXMLUnstructuredGridWriter* aWriter = vtkXMLUnstructuredGridWriter::New();
92 aWriter->SetFileName(theFileName);
93 aWriter->SetInput(theGrid);
94 aWriter->SetDataModeToAscii();
95 if(theGrid->GetNumberOfCells()){
102 GetColor( const QString& theSect,
103 const QString& theName,
107 SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
109 c = mgr->colorValue( theSect, theName, def );
114 GetColor( const QString& theSect,
115 const QString& theName,
122 SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
124 c = mgr->colorValue( theSect, theName, def );
126 SUIT_Tools::rgbSet( SUIT_Tools::rgbSet( c ), r, g, b );
130 GetColor( const QString& theSect,
131 const QString& theName,
132 vtkFloatingPointType& r,
133 vtkFloatingPointType& g,
134 vtkFloatingPointType& b,
137 int ir( 0 ), ig( 0 ), ib( 0 );
138 GetColor( theSect, theName, ir, ig, ib, def );
146 GetColor( const QString& theSect,
147 const QString& theName,
153 SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
155 QString str = mgr->stringValue( theSect, theName, def );
156 Qtx::stringToBiColor(str,color,delta);
160 std::map<SMDSAbs_ElementType,int> GetEntitiesFromObject(SMESH_VisualObj *theObject) {
161 std::map<SMDSAbs_ElementType,int> entities;
162 entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_0DElement,
163 theObject ? theObject->GetNbEntities(SMDSAbs_0DElement) : 0));
164 entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Ball,
165 theObject ? theObject->GetNbEntities(SMDSAbs_Ball) : 0));
166 entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Edge,
167 theObject ? theObject->GetNbEntities(SMDSAbs_Edge) : 0));
168 entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Face,
169 theObject ? theObject->GetNbEntities(SMDSAbs_Face) : 0));
170 entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Volume,
171 theObject ? theObject->GetNbEntities(SMDSAbs_Volume) : 0));
177 #ifndef DISABLE_PLOT2DVIEWER
178 //=======================================================================
180 Get histogram from the input actor
181 Repaint/Remove the histogram in/from each opened Plot2D Viewer
183 //=======================================================================
184 void ProcessIn2DViewers( SMESH_Actor *theActor, Viewer2dActionType aType ) {
185 SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
187 if(!anApp || !theActor)
190 SPlot2d_Histogram* aHistogram = 0;
192 if(theActor->GetPlot2Histogram())
193 if(aType == UpdateIn2dViewer)
194 aHistogram = theActor->UpdatePlot2Histogram();
196 aHistogram = theActor->GetPlot2Histogram();
200 ViewManagerList aViewManagerList;
201 anApp->viewManagers(SPlot2d_Viewer::Type(), aViewManagerList);
203 aType = aHistogram->getPointList().empty() ? RemoveFrom2dViewer : aType;
205 SUIT_ViewManager* aViewManager;
206 foreach( aViewManager, aViewManagerList ) {
207 if (Plot2d_ViewManager* aManager = dynamic_cast<Plot2d_ViewManager*>(aViewManager)) {
208 if (SPlot2d_Viewer* aViewer = dynamic_cast<SPlot2d_Viewer*>(aManager->getViewModel())) {
209 if (Plot2d_ViewFrame* aViewFrame = aViewer->getActiveViewFrame()) {
210 if(aType == UpdateIn2dViewer )
211 aViewFrame->displayObject(aHistogram, true);
212 else if (aType == RemoveFrom2dViewer)
213 aViewFrame->eraseObject(aHistogram, true);
219 #endif //DISABLE_PLOT2DVIEWER