Integration of OCCT 6.5.0 from SVN
[occt.git] / src / Graphic3d / Graphic3d_Texture1D.cxx
1 // File:        Graphic3d_Texture1D.cxx
2 // Created:     Mon Jul 28 17:51:26 1997
3 // Author:      Pierre CHALAMET
4 // Modified     22-12-97 : FMN ; Ajout Modulate
5 //              <pct@sgi93>
6
7 // Modified :   GG 10/01/2000 IMP 
8 //              Adds Name(),NumberOfTextures() and TextureName() methods
9
10 #include <Graphic3d_Texture1D.ixx>
11 #include <stdlib.h>
12
13 #include <TCollection_AsciiString.hxx>
14 #include <OSD_Directory.hxx>
15 #include <OSD_File.hxx>
16 #include <OSD_Path.hxx>
17
18 static const char *NameOfTexture_to_FileName[] = 
19 {
20   "1d_elevation.rgb"
21 };
22
23
24 static TCollection_AsciiString GetEnvir ( ) {
25
26   static Standard_Boolean IsDefined=Standard_False ;
27   static TCollection_AsciiString VarName;
28   if ( !IsDefined ) {
29     char *envir, *casroot ;
30     envir = getenv("CSF_MDTVTexturesDirectory") ;
31     
32     Standard_Boolean HasDefinition = Standard_False ;
33     if ( !envir ) { 
34       casroot  = getenv("CASROOT");
35       if ( casroot ) {
36         VarName = TCollection_AsciiString  (casroot);
37         VarName += "/src/Textures" ;
38         HasDefinition = Standard_True ;
39       }
40     } else {
41       VarName = TCollection_AsciiString  (envir);
42       HasDefinition = Standard_True ;
43     }
44     if ( HasDefinition ) {
45       OSD_Path aPath ( VarName );
46       OSD_Directory aDir(aPath);
47       if ( aDir.Exists () ) {
48         TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb" ;
49         OSD_File TextureFile ( aTexture );
50         if ( !TextureFile.Exists() ) {
51           cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
52           cout << " not all files are found in : "<<VarName.ToCString() << endl;
53           Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
54         }
55       } else {
56         cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
57         cout << " Directory : "<< VarName.ToCString() << " not exist " << endl;
58         Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
59       }      
60       return VarName ;
61     } else {
62       cout << " CSF_MDTVTexturesDirectory and CASROOT not setted " << endl;
63       cout << " one of these variable are mandatory to use this fonctionnality" << endl;
64       Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory and CASROOT not setted " );
65
66     }
67     IsDefined = Standard_True ; 
68   }
69   return VarName ;
70 }
71
72 Graphic3d_Texture1D::Graphic3d_Texture1D(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName,const Graphic3d_TypeOfTexture Type)
73 : Graphic3d_TextureMap(SM,"", FileName, Type),
74   myName(Graphic3d_NOT_1D_UNKNOWN)
75 {
76 }
77
78
79 Graphic3d_Texture1D::Graphic3d_Texture1D(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture1D NOT, const Graphic3d_TypeOfTexture Type)
80 : Graphic3d_TextureMap(SM, GetEnvir().ToCString(), NameOfTexture_to_FileName[NOT], Type),
81   myName(NOT)
82 {
83 }
84
85 Graphic3d_NameOfTexture1D Graphic3d_Texture1D::Name() const {
86
87   return myName;
88 }
89
90 Standard_Integer Graphic3d_Texture1D::NumberOfTextures() {
91
92   return sizeof(NameOfTexture_to_FileName)/sizeof(char*);
93 }
94
95 Standard_CString Graphic3d_Texture1D::TextureName(const Standard_Integer aRank)
96  {
97
98   if( aRank < 1 || aRank > NumberOfTextures() )
99         Standard_OutOfRange::Raise(" BAD index of texture");
100   TCollection_AsciiString filename(NameOfTexture_to_FileName[aRank-1]);
101   Standard_Integer i = filename.SearchFromEnd(".");
102
103   static TCollection_AsciiString name;
104   name = filename.SubString(4,i-1);
105   return name.ToCString();
106 }
107