0029915: Porting to VC 2017 : Regressions in Modeling Algorithms on VC 2017
[occt.git] / src / Graphic3d / Graphic3d_MaterialAspect.cxx
CommitLineData
b311480e 1// Copyright (c) 1991-1999 Matra Datavision
973c2be1 2// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
b311480e 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
b311480e 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
7fd59977 14
42cf5bc1 15#include <Graphic3d_MaterialAspect.hxx>
4e1bc39a 16
42cf5bc1 17#include <Graphic3d_MaterialDefinitionError.hxx>
b5eb7166 18#include <Standard_Assert.hxx>
42cf5bc1 19#include <Standard_OutOfRange.hxx>
7fd59977 20
4e1bc39a 21namespace
44c7c33e 22{
4e1bc39a 23 //! Raw material for defining list of standard materials
24 struct RawMaterial
25 {
26 const char* StringName;
27 Graphic3d_BSDF BSDF;
28 Quantity_Color Colors [Graphic3d_TypeOfReflection_NB];
29 Standard_ShortReal ColorCoef[Graphic3d_TypeOfReflection_NB];
30 Standard_ShortReal TransparencyCoef;
31 Standard_ShortReal RefractionIndex;
32 Standard_ShortReal Shininess;
4e1bc39a 33 Graphic3d_TypeOfMaterial MaterialType;
34 Graphic3d_NameOfMaterial MaterialName;
35 Standard_Boolean ReflActivity[Graphic3d_TypeOfReflection_NB];
7fd59977 36
4e1bc39a 37 RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName);
38
39 };
40
41 //! Name list of standard materials (defined within enumeration).
42 static const RawMaterial THE_MATERIALS[] =
43 {
44 RawMaterial (Graphic3d_NOM_BRASS, "Brass"),
45 RawMaterial (Graphic3d_NOM_BRONZE, "Bronze"),
46 RawMaterial (Graphic3d_NOM_COPPER, "Copper"),
47 RawMaterial (Graphic3d_NOM_GOLD, "Gold"),
48 RawMaterial (Graphic3d_NOM_PEWTER, "Pewter"),
49 RawMaterial (Graphic3d_NOM_PLASTER, "Plastered"),
50 RawMaterial (Graphic3d_NOM_PLASTIC, "Plastified"),
51 RawMaterial (Graphic3d_NOM_SILVER, "Silver"),
52 RawMaterial (Graphic3d_NOM_STEEL, "Steel"),
53 RawMaterial (Graphic3d_NOM_STONE, "Stone"),
54 RawMaterial (Graphic3d_NOM_SHINY_PLASTIC, "Shiny_plastified"),
55 RawMaterial (Graphic3d_NOM_SATIN, "Satined"),
56 RawMaterial (Graphic3d_NOM_METALIZED, "Metalized"),
57 RawMaterial (Graphic3d_NOM_NEON_GNC, "Ionized"),
58 RawMaterial (Graphic3d_NOM_CHROME, "Chrome"),
59 RawMaterial (Graphic3d_NOM_ALUMINIUM, "Aluminium"),
60 RawMaterial (Graphic3d_NOM_OBSIDIAN, "Obsidian"),
61 RawMaterial (Graphic3d_NOM_NEON_PHC, "Neon"),
62 RawMaterial (Graphic3d_NOM_JADE, "Jade"),
63 RawMaterial (Graphic3d_NOM_CHARCOAL, "Charcoal"),
64 RawMaterial (Graphic3d_NOM_WATER, "Water"),
65 RawMaterial (Graphic3d_NOM_GLASS, "Glass"),
66 RawMaterial (Graphic3d_NOM_DIAMOND, "Diamond"),
67 RawMaterial (Graphic3d_NOM_TRANSPARENT, "Transparent"),
68 RawMaterial (Graphic3d_NOM_DEFAULT, "Default"),
69 RawMaterial (Graphic3d_NOM_UserDefined, "UserDefined")
70 };
7fd59977 71}
72
44c7c33e 73// =======================================================================
4e1bc39a 74// function : RawMaterial
44c7c33e 75// purpose :
76// =======================================================================
4e1bc39a 77RawMaterial::RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName)
78: StringName (theStringName),
79 BSDF (Graphic3d_BSDF::CreateDiffuse (Graphic3d_Vec3 (0.0f))),
80 TransparencyCoef(0.0f),
81 RefractionIndex (1.0f),
82 Shininess (0.039f),
4e1bc39a 83 MaterialType (Graphic3d_MATERIAL_ASPECT),
84 MaterialName (theName)
44c7c33e 85{
4e1bc39a 86 ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_True;
87 ReflActivity[Graphic3d_TOR_DIFFUSE] = Standard_True;
88 ReflActivity[Graphic3d_TOR_SPECULAR] = Standard_True;
89 ReflActivity[Graphic3d_TOR_EMISSION] = Standard_False;
44c7c33e 90
4e1bc39a 91 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.3f;
92 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.65f;
93 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.0f;
94 ColorCoef[Graphic3d_TOR_EMISSION] = 0.0f;
7fd59977 95
4e1bc39a 96 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.2f, 0.2f, 0.2f));
97 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.2f, 0.2f, 0.2f));
98 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f));
44c7c33e 99 switch (theName)
100 {
189f85a3 101 case Graphic3d_NOM_PLASTIC:
4e1bc39a 102 Shininess = 0.0078125f;
103 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.50f;
104 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.24f;
105 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.06f;
106
05aa616d 107 BSDF.Kd = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]);
108 BSDF.Ks = Graphic3d_Vec4 (0.00784314f, 0.00784314f, 0.00784314f, 0.25f);
4e1bc39a 109 BSDF.Normalize();
44c7c33e 110 break;
189f85a3 111 case Graphic3d_NOM_SHINY_PLASTIC:
4e1bc39a 112 Shininess = 1.00f;
113 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.44f;
114 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.50f;
115 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
116
05aa616d 117 BSDF.Kd = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]);
118 BSDF.Ks = Graphic3d_Vec4 (0.145f, 0.145f, 0.145f, 0.17f);
4e1bc39a 119 BSDF.Normalize();
44c7c33e 120 break;
4e1bc39a 121 case Graphic3d_NOM_SATIN:
122 Shininess = 0.09375f;
123 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.33f;
124 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.40f;
125 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.44f;
189f85a3 126
4e1bc39a 127 BSDF.Kd = Graphic3d_Vec3 (0.2f);
05aa616d 128 BSDF.Ks = Graphic3d_Vec4 (0.6f);
6e728f3b 129
44c7c33e 130 break;
131 case Graphic3d_NOM_NEON_GNC:
4e1bc39a 132 Shininess = 0.05f;
133 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
134 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
135 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.62f;
136 ColorCoef[Graphic3d_TOR_EMISSION] = 1.00f;
137 ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False;
138 ReflActivity[Graphic3d_TOR_EMISSION] = Standard_True;
139
140 BSDF.Kd = Graphic3d_Vec3 (0.0f);
05aa616d 141 BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f);
142 BSDF.Le = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]);
143 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
44c7c33e 144 break;
145 case Graphic3d_NOM_METALIZED:
4e1bc39a 146 Shininess = 0.13f;
147 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.90f;
148 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.47f;
149 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.45f;
150 ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False;
189f85a3 151 {
4e1bc39a 152 const Graphic3d_Vec3 aColor = (Graphic3d_Vec3 )Colors[Graphic3d_TOR_DIFFUSE];
153 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 154 Graphic3d_Fresnel::CreateSchlick (aColor), 0.045f);
189f85a3 155 }
44c7c33e 156 break;
157 // Ascending Compatibility physical materials. The same definition is taken as in the next constructor.
158 case Graphic3d_NOM_BRASS:
4e1bc39a 159 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 160
4e1bc39a 161 Shininess = 0.65f;
162 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
163 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
164 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 165
4e1bc39a 166 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 167 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.58f, 0.42f, 0.20f)), 0.045f);
189f85a3 168
4e1bc39a 169 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.329f, 0.224f, 0.027f));
170 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.780f, 0.569f, 0.114f));
171 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.992f, 0.941f, 0.808f));
44c7c33e 172 break;
173 case Graphic3d_NOM_BRONZE:
4e1bc39a 174 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 175
4e1bc39a 176 Shininess = 0.65f;
177 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
178 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
179 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 180
4e1bc39a 181 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 182 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.65f, 0.35f, 0.15f)), 0.045f);
189f85a3 183
4e1bc39a 184 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.213f, 0.128f, 0.054f));
185 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.714f, 0.428f, 0.181f));
186 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.590f, 0.408f, 0.250f));
44c7c33e 187 break;
188 case Graphic3d_NOM_COPPER:
4e1bc39a 189 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 190
4e1bc39a 191 Shininess = 0.65f;
192 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
193 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
194 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 195
4e1bc39a 196 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 197 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.955008f, 0.637427f, 0.538163f)), 0.045f);
189f85a3 198
4e1bc39a 199 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.191f, 0.074f, 0.023f));
200 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.604f, 0.270f, 0.083f));
201 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.640f, 0.540f));
44c7c33e 202 break;
203 case Graphic3d_NOM_GOLD:
4e1bc39a 204 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 205
4e1bc39a 206 Shininess = 0.80f;
207 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
208 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
209 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 210
4e1bc39a 211 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 212 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (1.000000f, 0.765557f, 0.336057f)), 0.045f);
189f85a3 213
4e1bc39a 214 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.300f, 0.230f, 0.095f));
215 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.752f, 0.580f, 0.100f));
216 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.000f, 0.710f, 0.290f));
44c7c33e 217 break;
218 case Graphic3d_NOM_PEWTER:
4e1bc39a 219 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 220
4e1bc39a 221 Shininess = 0.50f;
222 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
223 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
224 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 225
4e1bc39a 226 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 227 Graphic3d_Fresnel::CreateConductor (1.8800f, 3.4900f), 0.045f);
189f85a3 228
4e1bc39a 229 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.106f, 0.059f, 0.114f));
230 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.427f, 0.471f, 0.541f));
231 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.333f, 0.522f));
44c7c33e 232 break;
233 case Graphic3d_NOM_PLASTER:
4e1bc39a 234 Shininess = 0.01f;
235 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.26f;
236 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.75f;
237 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.05f;
44c7c33e 238
4e1bc39a 239 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.192f, 0.192f, 0.192f));
240 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.508f, 0.508f, 0.508f));
241 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.508f, 0.508f, 0.508f));
189f85a3 242
4e1bc39a 243 BSDF.Kd = Graphic3d_Vec3 (0.482353f, 0.482353f, 0.482353f);
189f85a3 244
44c7c33e 245 break;
246 case Graphic3d_NOM_SILVER:
4e1bc39a 247 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 248
4e1bc39a 249 Shininess = 0.75f;
250 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
251 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
252 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 253
4e1bc39a 254 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 255 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.971519f, 0.959915f, 0.915324f)), 0.045f);
189f85a3 256
4e1bc39a 257 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.275f, 0.275f, 0.250f));
258 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.630f, 0.630f, 0.630f));
259 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.930f, 0.880f));
44c7c33e 260 break;
261 case Graphic3d_NOM_STEEL:
4e1bc39a 262 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 263
4e1bc39a 264 Shininess = 0.90f;
265 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
266 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
267 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 268
4e1bc39a 269 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 270 Graphic3d_Fresnel::CreateConductor (Graphic3d_Vec3 (2.90f, 2.80f, 2.53f), Graphic3d_Vec3 (3.08f, 2.90f, 2.74f)), 0.045f);
189f85a3 271
4e1bc39a 272 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.150f, 0.150f, 0.180f));
273 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.500f, 0.510f, 0.520f));
274 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.560f, 0.570f, 0.580f));
44c7c33e 275 break;
276 case Graphic3d_NOM_STONE:
4e1bc39a 277 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 278
4e1bc39a 279 Shininess = 0.17f;
280 ColorCoef[Graphic3d_TOR_AMBIENT] = 0.19f;
281 ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.75f;
282 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.08f;
44c7c33e 283
4e1bc39a 284 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (1.00f, 0.8f, 0.62f));
285 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.00f, 0.8f, 0.62f));
286 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.98f, 1.0f, 0.60f));
189f85a3 287
4e1bc39a 288 BSDF.Kd = Graphic3d_Vec3 (0.243137f, 0.243137f, 0.243137f);
05aa616d 289 BSDF.Ks = Graphic3d_Vec4 (0.00392157f, 0.00392157f, 0.00392157f, 0.5f);
189f85a3 290
44c7c33e 291 break;
292 // Ascending Compatibility of physical materials. Takes the same definition as in the next constructor. New materials
293 case Graphic3d_NOM_CHROME:
4e1bc39a 294 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 295
4e1bc39a 296 Shininess = 0.90f;
297 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
298 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
299 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 300
4e1bc39a 301 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 302 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.549585f, 0.556114f, 0.554256f)), 0.045f);
189f85a3 303
4e1bc39a 304 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.200f, 0.200f, 0.225f));
305 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f));
306 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.975f, 0.975f, 0.975f));
44c7c33e 307 break;
308 case Graphic3d_NOM_ALUMINIUM:
4e1bc39a 309 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 310
4e1bc39a 311 Shininess = 0.75f;
312 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
313 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
314 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
44c7c33e 315
4e1bc39a 316 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 317 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.913183f, 0.921494f, 0.924524f)), 0.045f);
189f85a3 318
4e1bc39a 319 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.300f, 0.300f, 0.300f));
320 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.600f, 0.600f, 0.600f));
321 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.910f, 0.920f, 0.920f));
44c7c33e 322 break;
323 case Graphic3d_NOM_NEON_PHC:
4e1bc39a 324 MaterialType = Graphic3d_MATERIAL_PHYSIC;
325
326 Shininess = 0.05f;
327 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
328 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
329 ColorCoef[Graphic3d_TOR_SPECULAR] = 0.62f;
330 ColorCoef[Graphic3d_TOR_EMISSION] = 0.90f;
331 ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False;
332 ReflActivity[Graphic3d_TOR_DIFFUSE] = Standard_False;
333 ReflActivity[Graphic3d_TOR_EMISSION] = Standard_True;
334
335 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f));
336 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f));
337 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f));
338 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f, 1.0f, 0.46f));
339
340 BSDF.Kd = Graphic3d_Vec3 (0.0f);
05aa616d 341 BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f);
4e1bc39a 342 BSDF.Le = Graphic3d_Vec3 (0.0f, 1.0f, 0.46f);
05aa616d 343 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
44c7c33e 344 break;
345 case Graphic3d_NOM_OBSIDIAN:
4e1bc39a 346 MaterialType = Graphic3d_MATERIAL_PHYSIC;
347
348 Shininess = 0.3f;
349 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.0f;
350 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.0f;
351 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.0f;
352
353 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.054f, 0.050f, 0.066f));
354 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.183f, 0.170f, 0.225f));
355 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.329f, 0.346f));
356
357 BSDF.Kd = Graphic3d_Vec3 (0.023f, 0.f, 0.023f);
05aa616d 358 BSDF.Ks = Graphic3d_Vec4 (0.0156863f, 0.0156863f, 0.0156863f, 0.1f);
44c7c33e 359 break;
360 case Graphic3d_NOM_JADE:
4e1bc39a 361 MaterialType = Graphic3d_MATERIAL_PHYSIC;
362
363 Shininess = 0.10f;
364 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
365 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
366 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
367
368 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.135f, 0.223f, 0.158f));
369 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.540f, 0.890f, 0.630f));
370 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.316f, 0.316f, 0.316f));
371
05aa616d 372 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
4e1bc39a 373 BSDF.Kd = Graphic3d_Vec3 (0.208658f, 0.415686f, 0.218401f);
05aa616d 374 BSDF.Ks = Graphic3d_Vec4 (0.611765f, 0.611765f, 0.611765f, 0.06f);
44c7c33e 375 break;
376 case Graphic3d_NOM_CHARCOAL:
4e1bc39a 377 MaterialType = Graphic3d_MATERIAL_PHYSIC;
378
379 Shininess = 0.01f;
380 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
381 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
382 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
383
384 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.050f, 0.050f));
385 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.150f, 0.150f, 0.150f));
386 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.000f, 0.000f, 0.000f));
387
388 BSDF.Kd = Graphic3d_Vec3 (0.02f, 0.02f, 0.02f);
05aa616d 389 BSDF.Ks = Graphic3d_Vec4 (0.1f, 0.1f, 0.1f, 0.3f);
44c7c33e 390 break;
391 case Graphic3d_NOM_WATER:
4e1bc39a 392 MaterialType = Graphic3d_MATERIAL_PHYSIC;
393
394 Shininess = 0.90f;
395 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
396 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
397 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
398 RefractionIndex = 1.33f;
399 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
400 Graphic3d_Vec3 (0.7f, 0.75f, 0.85f),
401 0.05f,
402 RefractionIndex);
403 TransparencyCoef = 0.80f;
404
405 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.450f, 0.450f, 0.475f));
406 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.050f, 0.075f));
407 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.380f, 0.380f, 0.380f));
44c7c33e 408 break;
409 case Graphic3d_NOM_GLASS:
4e1bc39a 410 MaterialType = Graphic3d_MATERIAL_PHYSIC;
411
412 Shininess = 0.50f;
413 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
414 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
415 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
416 RefractionIndex = 1.62f;
417 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
418 Graphic3d_Vec3 (0.75f, 0.95f, 0.9f),
419 0.05f,
420 RefractionIndex);
421 TransparencyCoef = 0.80f;
422
423 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.575f, 0.575f));
424 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.075f, 0.075f));
425 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.920f, 0.920f, 0.920f));
44c7c33e 426 break;
427 case Graphic3d_NOM_DIAMOND:
4e1bc39a 428 MaterialType = Graphic3d_MATERIAL_PHYSIC;
429
430 Shininess = 0.90f;
431 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
432 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
433 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
434 RefractionIndex = 2.42f;
435 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
436 Graphic3d_Vec3 (0.95f, 0.95f, 0.95f),
437 0.05f,
438 RefractionIndex);
439 TransparencyCoef = 0.80f;
440
441 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f));
442 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.100f, 0.100f, 0.100f));
443 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f, 0.970f, 0.970f));
44c7c33e 444 break;
6e728f3b 445
446 case Graphic3d_NOM_TRANSPARENT:
4e1bc39a 447 MaterialType = Graphic3d_MATERIAL_PHYSIC;
448
449 Shininess = 0.90f;
450 ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f;
451 ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f;
452 ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f;
453 RefractionIndex = 1.0f;
6e728f3b 454
4e1bc39a 455 BSDF.Kd = Graphic3d_Vec3 (0.1f);
456 BSDF.Kt = Graphic3d_Vec3 (0.9f);
05aa616d 457 BSDF.FresnelBase = Graphic3d_Fresnel::CreateConstant (0.0f);
4e1bc39a 458 TransparencyCoef = 0.80f;
459
460 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f));
461 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.100f, 0.100f, 0.100f));
462 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f, 0.970f, 0.970f));
463 break;
44c7c33e 464 case Graphic3d_NOM_UserDefined:
44c7c33e 465 break;
466 case Graphic3d_NOM_DEFAULT:
44c7c33e 467 break;
468 }
469}
7fd59977 470
4e1bc39a 471// =======================================================================
472// function : Graphic3d_MaterialAspect
473// purpose :
474// =======================================================================
475Graphic3d_MaterialAspect::Graphic3d_MaterialAspect()
476: myRequestedMaterialName (Graphic3d_NOM_DEFAULT)
477{
478 init (Graphic3d_NOM_DEFAULT);
479}
480
481// =======================================================================
482// function : Graphic3d_MaterialAspect
483// purpose :
484// =======================================================================
485Graphic3d_MaterialAspect::Graphic3d_MaterialAspect (const Graphic3d_NameOfMaterial theName)
486: myRequestedMaterialName (theName)
487{
488 init (theName);
489}
490
491// =======================================================================
492// function : init
493// purpose :
494// =======================================================================
495void Graphic3d_MaterialAspect::init (const Graphic3d_NameOfMaterial theName)
496{
497 const RawMaterial& aMat = THE_MATERIALS[theName];
498 myBSDF = aMat.BSDF;
499 myStringName = aMat.StringName;
500 myColors[Graphic3d_TOR_AMBIENT] = aMat.Colors[Graphic3d_TOR_AMBIENT];
501 myColors[Graphic3d_TOR_DIFFUSE] = aMat.Colors[Graphic3d_TOR_DIFFUSE];
502 myColors[Graphic3d_TOR_SPECULAR] = aMat.Colors[Graphic3d_TOR_SPECULAR];
503 myColors[Graphic3d_TOR_EMISSION] = aMat.Colors[Graphic3d_TOR_EMISSION];
504 myColorCoef[Graphic3d_TOR_AMBIENT] = aMat.ColorCoef[Graphic3d_TOR_AMBIENT];
505 myColorCoef[Graphic3d_TOR_DIFFUSE] = aMat.ColorCoef[Graphic3d_TOR_DIFFUSE];
506 myColorCoef[Graphic3d_TOR_SPECULAR] = aMat.ColorCoef[Graphic3d_TOR_SPECULAR];
507 myColorCoef[Graphic3d_TOR_EMISSION] = aMat.ColorCoef[Graphic3d_TOR_EMISSION];
508 myTransparencyCoef = aMat.TransparencyCoef;
509 myRefractionIndex = aMat.RefractionIndex;
510 myShininess = aMat.Shininess;
4e1bc39a 511 myMaterialType = aMat.MaterialType;
512 myMaterialName = theName;
513 myRequestedMaterialName = theName;
514 myReflActivity[Graphic3d_TOR_AMBIENT] = aMat.ReflActivity[Graphic3d_TOR_AMBIENT];
515 myReflActivity[Graphic3d_TOR_DIFFUSE] = aMat.ReflActivity[Graphic3d_TOR_DIFFUSE];
516 myReflActivity[Graphic3d_TOR_SPECULAR] = aMat.ReflActivity[Graphic3d_TOR_SPECULAR];
517 myReflActivity[Graphic3d_TOR_EMISSION] = aMat.ReflActivity[Graphic3d_TOR_EMISSION];
518}
519
44c7c33e 520// =======================================================================
521// function : IncreaseShine
522// purpose :
523// =======================================================================
4e1bc39a 524void Graphic3d_MaterialAspect::IncreaseShine (const Standard_ShortReal theDelta)
44c7c33e 525{
4e1bc39a 526 const Standard_ShortReal anOldShine = myShininess;
527 myShininess = myShininess + myShininess * theDelta / 100.0f;
528 if (myShininess > 1.0f || myShininess < 0.0f)
44c7c33e 529 {
530 myShininess = anOldShine;
531 }
532}
7fd59977 533
44c7c33e 534// =======================================================================
535// function : SetMaterialType
536// purpose :
537// =======================================================================
538void Graphic3d_MaterialAspect::SetMaterialType (const Graphic3d_TypeOfMaterial theType)
539{
540 myMaterialType = theType;
541 if (theType != myMaterialType)
542 {
4e1bc39a 543 setUserMaterial();
44c7c33e 544 }
7fd59977 545}
546
44c7c33e 547// =======================================================================
548// function : SetAmbient
549// purpose :
550// =======================================================================
4e1bc39a 551void Graphic3d_MaterialAspect::SetAmbient (const Standard_ShortReal theValue)
44c7c33e 552{
4e1bc39a 553 if (theValue < 0.0f
554 || theValue > 1.0f)
44c7c33e 555 {
9775fa61 556 throw Graphic3d_MaterialDefinitionError("Bad value for SetAmbient < 0. or > 1.0");
44c7c33e 557 }
7fd59977 558
4e1bc39a 559 myColorCoef[Graphic3d_TOR_AMBIENT] = theValue;
560 if (myReflActivity[Graphic3d_TOR_AMBIENT]
44c7c33e 561 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
562 {
4e1bc39a 563 setUserMaterial();
44c7c33e 564 }
565}
7fd59977 566
44c7c33e 567// =======================================================================
568// function : SetColor
569// purpose :
570// =======================================================================
571void Graphic3d_MaterialAspect::SetColor (const Quantity_Color& theColor)
572{
573 const Standard_ShortReal anAmbientCoeff = 0.25f;
4e1bc39a 574 myColors[Graphic3d_TOR_AMBIENT].SetValues (theColor.Red() * anAmbientCoeff,
575 theColor.Green() * anAmbientCoeff,
576 theColor.Blue() * anAmbientCoeff, Quantity_TOC_RGB);
577 myColors[Graphic3d_TOR_DIFFUSE] = theColor;
578 if (myReflActivity[Graphic3d_TOR_AMBIENT]
579 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
44c7c33e 580 {
4e1bc39a 581 setUserMaterial();
44c7c33e 582 }
583}
7fd59977 584
44c7c33e 585// =======================================================================
586// function : SetAmbientColor
587// purpose :
588// =======================================================================
589void Graphic3d_MaterialAspect::SetAmbientColor (const Quantity_Color& theColor)
590{
4e1bc39a 591 myColors[Graphic3d_TOR_AMBIENT] = theColor;
592 if (myReflActivity[Graphic3d_TOR_AMBIENT]
44c7c33e 593 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
594 {
4e1bc39a 595 setUserMaterial();
44c7c33e 596 }
7fd59977 597}
598
44c7c33e 599// =======================================================================
600// function : SetDiffuseColor
601// purpose :
602// =======================================================================
603void Graphic3d_MaterialAspect::SetDiffuseColor (const Quantity_Color& theColor)
604{
4e1bc39a 605 myColors[Graphic3d_TOR_DIFFUSE] = theColor;
606 if (myReflActivity[Graphic3d_TOR_DIFFUSE]
44c7c33e 607 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
608 {
4e1bc39a 609 setUserMaterial();
44c7c33e 610 }
611}
7fd59977 612
44c7c33e 613// =======================================================================
614// function : SetSpecularColor
615// purpose :
616// =======================================================================
617void Graphic3d_MaterialAspect::SetSpecularColor (const Quantity_Color& theColor)
618{
4e1bc39a 619 myColors[Graphic3d_TOR_SPECULAR] = theColor;
620 if (myReflActivity[Graphic3d_TOR_SPECULAR]
44c7c33e 621 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
622 {
4e1bc39a 623 setUserMaterial();
44c7c33e 624 }
625}
7fd59977 626
44c7c33e 627// =======================================================================
628// function : SetEmissiveColor
629// purpose :
630// =======================================================================
631void Graphic3d_MaterialAspect::SetEmissiveColor (const Quantity_Color& theColor)
632{
4e1bc39a 633 myColors[Graphic3d_TOR_EMISSION] = theColor;
634 if (myReflActivity[Graphic3d_TOR_EMISSION]
44c7c33e 635 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
636 {
4e1bc39a 637 setUserMaterial();
44c7c33e 638 }
639}
7fd59977 640
44c7c33e 641// =======================================================================
642// function : SetDiffuse
643// purpose :
644// =======================================================================
4e1bc39a 645void Graphic3d_MaterialAspect::SetDiffuse (const Standard_ShortReal theValue)
44c7c33e 646{
4e1bc39a 647 if (theValue < 0.0f
648 || theValue > 1.0f)
44c7c33e 649 {
9775fa61 650 throw Graphic3d_MaterialDefinitionError("Bad value for SetDiffuse < 0. or > 1.0");
44c7c33e 651 }
7fd59977 652
4e1bc39a 653 myColorCoef[Graphic3d_TOR_DIFFUSE] = theValue;
654 if (myReflActivity[Graphic3d_TOR_DIFFUSE]
44c7c33e 655 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
656 {
4e1bc39a 657 setUserMaterial();
44c7c33e 658 }
7fd59977 659}
660
44c7c33e 661// =======================================================================
662// function : SetEmissive
663// purpose :
664// =======================================================================
4e1bc39a 665void Graphic3d_MaterialAspect::SetEmissive (const Standard_ShortReal theValue)
44c7c33e 666{
4e1bc39a 667 if (theValue < 0.0f
668 || theValue > 1.0f)
44c7c33e 669 {
9775fa61 670 throw Graphic3d_MaterialDefinitionError("Bad value for SetEmissive < 0. or > 1.0");
44c7c33e 671 }
7fd59977 672
4e1bc39a 673 myColorCoef[Graphic3d_TOR_EMISSION] = theValue;
674 if (myReflActivity[Graphic3d_TOR_DIFFUSE]
44c7c33e 675 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
676 {
4e1bc39a 677 setUserMaterial();
44c7c33e 678 }
679}
7fd59977 680
44c7c33e 681// =======================================================================
4e1bc39a 682// function : SetReflectionMode
44c7c33e 683// purpose :
684// =======================================================================
4e1bc39a 685void Graphic3d_MaterialAspect::SetReflectionMode (const Graphic3d_TypeOfReflection theType,
686 const Standard_Boolean theValue)
44c7c33e 687{
4e1bc39a 688 myReflActivity[theType] = theValue;
44c7c33e 689 if (myMaterialType == Graphic3d_MATERIAL_PHYSIC)
690 {
4e1bc39a 691 setUserMaterial();
44c7c33e 692 }
7fd59977 693}
694
44c7c33e 695// =======================================================================
696// function : SetSpecular
697// purpose :
698// =======================================================================
4e1bc39a 699void Graphic3d_MaterialAspect::SetSpecular (const Standard_ShortReal theValue)
44c7c33e 700{
4e1bc39a 701 if (theValue < 0.0f
702 || theValue > 1.0f)
44c7c33e 703 {
9775fa61 704 throw Graphic3d_MaterialDefinitionError("Bad value for SetSpecular < 0. or > 1.0");
44c7c33e 705 }
7fd59977 706
4e1bc39a 707 myColorCoef[Graphic3d_TOR_SPECULAR] = theValue;
708 if (myReflActivity[Graphic3d_TOR_SPECULAR]
44c7c33e 709 && myMaterialType == Graphic3d_MATERIAL_PHYSIC)
710 {
4e1bc39a 711 setUserMaterial();
44c7c33e 712 }
713}
7fd59977 714
44c7c33e 715// =======================================================================
716// function : SetTransparency
717// purpose :
718// =======================================================================
4e1bc39a 719void Graphic3d_MaterialAspect::SetTransparency (const Standard_ShortReal theValue)
44c7c33e 720{
4e1bc39a 721 if (theValue < 0.0f
722 || theValue > 1.0f)
44c7c33e 723 {
9775fa61 724 throw Graphic3d_MaterialDefinitionError("Bad value for SetTransparency < 0. or > 1.0");
44c7c33e 725 }
7fd59977 726
4e1bc39a 727 myTransparencyCoef = theValue;
7fd59977 728}
729
44c7c33e 730// =======================================================================
731// function : SetRefractionIndex
732// purpose :
733// =======================================================================
4e1bc39a 734void Graphic3d_MaterialAspect::SetRefractionIndex (const Standard_ShortReal theValue)
44c7c33e 735{
4e1bc39a 736 if (theValue < 1.0f)
44c7c33e 737 {
9775fa61 738 throw Graphic3d_MaterialDefinitionError("Bad value for refraction index < 1.0");
44c7c33e 739 }
7fd59977 740
4e1bc39a 741 myRefractionIndex = theValue;
44c7c33e 742}
7fd59977 743
44c7c33e 744// =======================================================================
745// function : SetShininess
746// purpose :
747// =======================================================================
4e1bc39a 748void Graphic3d_MaterialAspect::SetShininess (const Standard_ShortReal theValue)
44c7c33e 749{
4e1bc39a 750 if (theValue < 0.0f
751 || theValue > 1.0f)
44c7c33e 752 {
9775fa61 753 throw Graphic3d_MaterialDefinitionError("Bad value for Shininess < 0. or > 1.0");
44c7c33e 754 }
7fd59977 755
4e1bc39a 756 myShininess = theValue;
757 setUserMaterial();
7fd59977 758}
759
44c7c33e 760// =======================================================================
761// function : MaterialName
762// purpose :
763// =======================================================================
764Standard_CString Graphic3d_MaterialAspect::MaterialName (const Standard_Integer theRank)
765{
766 if (theRank < 1 || theRank > NumberOfMaterials())
767 {
9775fa61 768 throw Standard_OutOfRange("BAD index of material");
44c7c33e 769 }
4e1bc39a 770 const RawMaterial& aMat = THE_MATERIALS[theRank - 1];
771 return aMat.StringName;
7fd59977 772}
773
44c7c33e 774// =======================================================================
775// function : MaterialFromName
776// purpose :
777// =======================================================================
ad3217cd 778Graphic3d_NameOfMaterial Graphic3d_MaterialAspect::MaterialFromName (const Standard_CString theName)
779{
780 TCollection_AsciiString aName (theName);
781 aName.LowerCase();
782 aName.Capitalize();
783 const Standard_Integer aNbMaterials = Graphic3d_MaterialAspect::NumberOfMaterials();
4e1bc39a 784 for (Standard_Integer aMatIter = 0; aMatIter < aNbMaterials; ++aMatIter)
ad3217cd 785 {
4e1bc39a 786 const RawMaterial& aMat = THE_MATERIALS[aMatIter];
787 if (aName == aMat.StringName)
ad3217cd 788 {
4e1bc39a 789 return Graphic3d_NameOfMaterial(aMatIter);
ad3217cd 790 }
791 }
792
793 // parse aliases
794 if (aName == "Plastic") // Plastified
795 {
796 return Graphic3d_NOM_PLASTIC;
797 }
798 else if (aName == "Shiny_plastic") // Shiny_plastified
799 {
800 return Graphic3d_NOM_SHINY_PLASTIC;
801 }
802 else if (aName == "Plaster") // Plastered
803 {
804 return Graphic3d_NOM_PLASTER;
805 }
806 else if (aName == "Satin") // Satined
807 {
808 return Graphic3d_NOM_SATIN;
809 }
810 else if (aName == "Neon_gnc") // Ionized
811 {
812 return Graphic3d_NOM_NEON_GNC;
813 }
814 else if (aName == "Neon_phc") // Neon
815 {
816 return Graphic3d_NOM_NEON_PHC;
817 }
818 return Graphic3d_NOM_DEFAULT;
819}
820
44c7c33e 821// =======================================================================
822// function : MaterialType
823// purpose :
824// =======================================================================
825Graphic3d_TypeOfMaterial Graphic3d_MaterialAspect::MaterialType (const Standard_Integer theRank)
826{
827 if (theRank < 1 || theRank > NumberOfMaterials())
828 {
9775fa61 829 throw Standard_OutOfRange("BAD index of material");
44c7c33e 830 }
4e1bc39a 831 const RawMaterial& aMat = THE_MATERIALS[theRank - 1];
832 return aMat.MaterialType;
7fd59977 833}