]> SALOME platform Git repositories - modules/geom.git/blob - src/Material/Material_ResourceMgr.cxx
Salome HOME
Fix Makefile.am
[modules/geom.git] / src / Material / Material_ResourceMgr.cxx
1 // Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 // File   : Material_ResourceMgr.cxx
21 // Author : Margarita KARPUNINA, Open CASCADE S.A.S. (margarita.karpunina@opencascade.com)
22 //
23 #include "Material_ResourceMgr.h"
24
25 //#include "Qtx.h"    // used to print colors of global materials
26 //#include <iostream> // used to print colors of global materials
27
28 /*!
29   \class Material_ResourceMgr
30   \brief Material properties resources manager.
31
32   This class is used to manage the material properties throughout the application
33   in the similar way as QtxResourceMgr does it with application preferences.
34
35   Standard material types are stored in the global application settings files
36   (named as SalomeMaterial.xml). User-defined materials are stored in user's home
37   directory - in the file .SalomeMaterialrc.
38
39   The Material_ResourceMgr class is used by material properties dialog box
40   (GEOMToolsGUI_MaterialPropertiesDlg class).
41 */
42
43 /*!
44   \brief Constructor
45 */
46 Material_ResourceMgr::Material_ResourceMgr()
47   : QtxResourceMgr( "SalomeMaterial", "%1Config" )
48 {
49   if ( dirList().isEmpty() && ::getenv( "GEOM_ROOT_DIR" ) )
50     setDirList( QStringList() << Qtx::addSlash( ::getenv( "GEOM_ROOT_DIR" ) ) + "share/salome/resources/geom" );
51   setCurrentFormat( "xml" );
52
53   /*
54   // Get string equivalent for colors of global materials ---->
55   QColor c;
56   QString s;
57
58   // 1. ============= Plastic
59   std::cout << "---- Plastic:" << std::endl;
60   // ambient
61   c.setRgbF(0.2, 0.2, 0.2);
62   s = Qtx::colorToString( c );
63   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
64   // diffuse
65   c.setRgbF(0.0, 0.0, 0.0);
66   s = Qtx::colorToString( c );
67   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
68   // specular
69   c.setRgbF(1.0, 1.0, 1.0);
70   s = Qtx::colorToString( c );
71   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
72
73   // 2. ============= Shiny plastic
74   std::cout << "---- Shiny plastic:" << std::endl;
75   // ambient
76   c.setRgbF(0.2, 0.2, 0.2);
77   s = Qtx::colorToString( c );
78   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
79   // diffuse
80   c.setRgbF(0.0, 0.0, 0.0);
81   s = Qtx::colorToString( c );
82   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
83   // specular
84   c.setRgbF(1.0, 1.0, 1.0);
85   s = Qtx::colorToString( c );
86   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
87
88   // 3. ============= Satin
89   std::cout << "---- Satin:" << std::endl;
90   // ambient
91   c.setRgbF(0.2, 0.2, 0.2);
92   s = Qtx::colorToString( c );
93   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
94   // diffuse
95   c.setRgbF(0.0, 0.0, 0.0);
96   s = Qtx::colorToString( c );
97   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
98   // specular
99   c.setRgbF(1.0, 1.0, 1.0);
100   s = Qtx::colorToString( c );
101   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
102
103   // 4. ============= Metal
104   std::cout << "---- Metal:" << std::endl;
105   // diffuse
106   c.setRgbF(0.0, 0.0, 0.0);
107   s = Qtx::colorToString( c );
108   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
109   // specular
110   c.setRgbF(1.0, 1.0, 1.0);
111   s = Qtx::colorToString( c );
112   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
113
114   // 5. ============= Brass
115   std::cout << "---- Brass:" << std::endl;
116   // ambient
117   c.setRgbF(0.329412, 0.223529, 0.027451);
118   s = Qtx::colorToString( c );
119   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
120   // diffuse
121   c.setRgbF(0.780392, 0.568627, 0.113725);
122   s = Qtx::colorToString( c );
123   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
124   // specular
125   c.setRgbF(0.992157, 0.941176, 0.807843);
126   s = Qtx::colorToString( c );
127   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;  
128
129   // 6. ============= Bronze
130   std::cout << "---- Bronze:" << std::endl;
131   // ambient
132   c.setRgbF(0.2125, 0.1275, 0.054);
133   s = Qtx::colorToString( c );
134   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
135   // diffuse
136   c.setRgbF(0.714, 0.4284, 0.18144);
137   s = Qtx::colorToString( c );
138   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
139   // specular
140   c.setRgbF(0.393548, 0.271906, 0.166721);
141   s = Qtx::colorToString( c );
142   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
143
144   // 7. ============= Copper
145   std::cout << "---- Copper:" << std::endl;
146   // ambient
147   c.setRgbF(0.33, 0.26, 0.23);
148   s = Qtx::colorToString( c );
149   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
150   // diffuse
151   c.setRgbF(0.50, 0.11, 0.0);
152   s = Qtx::colorToString( c );
153   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
154   // specular
155   c.setRgbF(0.95, 0.73, 0.0);
156   s = Qtx::colorToString( c );
157   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
158
159   // 8. ============= Gold
160   std::cout << "---- Gold:" << std::endl;
161   // ambient
162   c.setRgbF(1.0, 0.76862745, 0.31764706);
163   s = Qtx::colorToString( c );
164   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
165   // diffuse
166   c.setRgbF(1.0, 0.69, 0.0);
167   s = Qtx::colorToString( c );
168   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
169   // specular
170   c.setRgbF(1.0, 0.98, 0.78);
171   s = Qtx::colorToString( c );
172   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
173
174   // 9. ============= Pewter
175   std::cout << "---- Pewter:" << std::endl;
176   // ambient
177   c.setRgbF(0.105882, 0.058824, 0.113725);
178   s = Qtx::colorToString( c );
179   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
180   // diffuse
181   c.setRgbF(0.427451, 0.470588, 0.541176);
182   s = Qtx::colorToString( c );
183   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
184   // specular
185   c.setRgbF(0.333333, 0.333333, 0.521569);
186   s = Qtx::colorToString( c );
187   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
188
189   // 10. ============= Plaster
190   std::cout << "---- Plaster:" << std::endl;
191   // ambient
192   c.setRgbF(0.19225, 0.19225, 0.19225);
193   s = Qtx::colorToString( c );
194   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
195   // diffuse
196   c.setRgbF(0.50754, 0.50754, 0.50754);
197   s = Qtx::colorToString( c );
198   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
199   // specular
200   c.setRgbF(0.508273, 0.508273, 0.508273);
201   s = Qtx::colorToString( c );
202   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
203
204   // 11. ============= Silver
205   std::cout << "---- Silver:" << std::endl;
206   // ambient
207   c.setRgbF(0.19225, 0.19225, 0.19225);
208   s = Qtx::colorToString( c );
209   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
210   // diffuse
211   c.setRgbF(0.50754, 0.50754, 0.50754);
212   s = Qtx::colorToString( c );
213   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
214   // specular
215   c.setRgbF(0.508273, 0.508273, 0.508273);
216   s = Qtx::colorToString( c );
217   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
218
219   // 12. ============= Steel
220   std::cout << "---- Steel:" << std::endl;
221   // ambient
222   c.setRgbF(0.2, 0.2, 0.2);
223   s = Qtx::colorToString( c );
224   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
225   // diffuse
226   c.setRgbF(0.0, 0.0, 0.0);
227   s = Qtx::colorToString( c );
228   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
229   // specular
230   c.setRgbF(1.0, 1.0, 1.0);
231   s = Qtx::colorToString( c );
232   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
233
234   // 13. ============= Stone
235   std::cout << "---- Stone:" << std::endl;
236   // ambient
237   c.setRgbF(1.0, 0.8, 0.62);
238   s = Qtx::colorToString( c );
239   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
240   // diffuse
241   c.setRgbF(1.0, 0.8, 0.62);
242   s = Qtx::colorToString( c );
243   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
244   // specular
245   c.setRgbF(0.98, 1.0, 0.60);
246   s = Qtx::colorToString( c );
247   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
248
249   // 14. ============= Chrome
250   std::cout << "---- Chrome:" << std::endl;
251   // ambient
252   c.setRgbF(0.35, 0.35, 0.35);
253   s = Qtx::colorToString( c );
254   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
255   // diffuse
256   c.setRgbF(0.4, 0.4, 0.4);
257   s = Qtx::colorToString( c );
258   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
259   // specular
260   c.setRgbF(0.974597, 0.974597, 0.974597);
261   s = Qtx::colorToString( c );
262   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
263
264   // 15. ============= Neon
265   std::cout << "---- Neon:" << std::endl;
266   // ambient
267   c.setRgbF(1.0, 1.0, 1.0);
268   s = Qtx::colorToString( c );
269   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
270   // diffuse
271   c.setRgbF(1.0, 1.0, 1.0);
272   s = Qtx::colorToString( c );
273   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
274   // specular
275   c.setRgbF(1.0, 1.0, 1.0);
276   s = Qtx::colorToString( c );
277   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
278   // emissive
279   c.setRgbF(0.0, 1.0, 0.46);
280   s = Qtx::colorToString( c );
281   std::cout << "        emissive color: " << s.toStdString().c_str() << std::endl;  
282
283   // 16. ============= Aluminium
284   std::cout << "---- Aluminium:" << std::endl;
285   // ambient
286   c.setRgbF(0.30, 0.30, 0.30);
287   s = Qtx::colorToString( c );
288   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
289   // diffuse
290   c.setRgbF(0.30, 0.30, 0.30);
291   s = Qtx::colorToString( c );
292   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
293   // specular
294   c.setRgbF(0.70, 0.70, 0.80);
295   s = Qtx::colorToString( c );
296   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
297
298   // 17. ============= Obsidian
299   std::cout << "---- Obsidian:" << std::endl;
300   // ambient
301   c.setRgbF(0.05375, 0.05, 0.06625);
302   s = Qtx::colorToString( c );
303   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
304   // diffuse
305   c.setRgbF(0.18275, 0.17, 0.22525);
306   s = Qtx::colorToString( c );
307   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
308   // specular
309   c.setRgbF(0.332741, 0.328634, 0.346435);
310   s = Qtx::colorToString( c );
311   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
312
313   // 18. ============= Jade
314   std::cout << "---- Jade:" << std::endl;
315   // ambient
316   c.setRgbF(0.135, 0.2225, 0.1575);
317   s = Qtx::colorToString( c );
318   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
319   // diffuse
320   c.setRgbF(0.54, 0.89, 0.63);
321   s = Qtx::colorToString( c );
322   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
323   // specular
324   c.setRgbF(0.316228, 0.316228, 0.316228);
325   s = Qtx::colorToString( c );
326   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
327
328   // 19. ============= Default material
329   std::cout << "---- Default material:" << std::endl;
330   // ambient
331   c.setRgbF(0.2, 0.2, 0.2);
332   s = Qtx::colorToString( c );
333   std::cout << "        ambient color: " << s.toStdString().c_str() << std::endl;  
334   // diffuse
335   c.setRgbF(0.0, 0.0, 0.0);
336   s = Qtx::colorToString( c );
337   std::cout << "        diffuse color: " << s.toStdString().c_str() << std::endl;  
338   // specular
339   c.setRgbF(1.0, 1.0, 1.0);
340   s = Qtx::colorToString( c );
341   std::cout << "        specular color: " << s.toStdString().c_str() << std::endl;
342
343   // Get string equivalent for colors of global materials <----
344   */
345 }
346
347 /*!
348   \brief Destructor
349 */
350 Material_ResourceMgr::~Material_ResourceMgr()
351 {
352 }
353
354 /*!
355   \brief Get list of avaiable materials
356   \param theType material type
357   \param theSort if \c true (default), returns a list of materials sorted by name
358   \return list of avaiable materials names
359 */
360 QStringList Material_ResourceMgr::materials( MaterialType theType, bool theSort )
361 {
362   QStringList sl;
363   
364   WorkingMode m = workingMode();
365
366   switch ( theType ) {
367   case Global:
368     setWorkingMode( IgnoreUserValues );
369     sl = sections();
370     break;
371   case User:
372     {
373       setWorkingMode( AllowUserValues );
374       sl = sections();
375       setWorkingMode( IgnoreUserValues );
376       QMutableListIterator<QString> it( sl );
377       while ( it.hasNext() ) {
378         QString s = it.next();
379         if ( hasSection( s ) ) it.remove();
380       }
381     }
382     break;
383   case All:
384     setWorkingMode( AllowUserValues );
385     sl = sections();
386     break;
387   default:
388     break;
389   }
390
391   setWorkingMode( m );
392
393   if ( theSort )
394     qSort( sl );
395
396   return sl;
397 }
398
399 /*!
400   \brief Get list of materials names for preferences dialog
401   \return list of materials names
402 */
403 QStringList Material_ResourceMgr::getPreferenceMaterialsNames()
404 {
405   QStringList aMaterialsList = materials( Material_ResourceMgr::All );
406   return aMaterialsList;
407 }