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 |
21 | namespace |
44c7c33e |
22 | { |
4e1bc39a |
23 | //! Raw material for defining list of standard materials |
24 | struct RawMaterial |
25 | { |
26 | const char* StringName; |
27 | Graphic3d_BSDF BSDF; |
67312b79 |
28 | Graphic3d_PBRMaterial PBRMaterial; |
61168418 |
29 | Quantity_Color Colors[Graphic3d_TypeOfReflection_NB]; |
4e1bc39a |
30 | Standard_ShortReal TransparencyCoef; |
31 | Standard_ShortReal RefractionIndex; |
32 | Standard_ShortReal Shininess; |
61168418 |
33 | Standard_ShortReal AmbientCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor() |
34 | Standard_ShortReal DiffuseCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor() |
4e1bc39a |
35 | Graphic3d_TypeOfMaterial MaterialType; |
36 | Graphic3d_NameOfMaterial MaterialName; |
7fd59977 |
37 | |
4e1bc39a |
38 | RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName); |
39 | |
40 | }; |
41 | |
42 | //! Name list of standard materials (defined within enumeration). |
43 | static const RawMaterial THE_MATERIALS[] = |
44 | { |
45 | RawMaterial (Graphic3d_NOM_BRASS, "Brass"), |
46 | RawMaterial (Graphic3d_NOM_BRONZE, "Bronze"), |
47 | RawMaterial (Graphic3d_NOM_COPPER, "Copper"), |
48 | RawMaterial (Graphic3d_NOM_GOLD, "Gold"), |
49 | RawMaterial (Graphic3d_NOM_PEWTER, "Pewter"), |
50 | RawMaterial (Graphic3d_NOM_PLASTER, "Plastered"), |
51 | RawMaterial (Graphic3d_NOM_PLASTIC, "Plastified"), |
52 | RawMaterial (Graphic3d_NOM_SILVER, "Silver"), |
53 | RawMaterial (Graphic3d_NOM_STEEL, "Steel"), |
54 | RawMaterial (Graphic3d_NOM_STONE, "Stone"), |
55 | RawMaterial (Graphic3d_NOM_SHINY_PLASTIC, "Shiny_plastified"), |
56 | RawMaterial (Graphic3d_NOM_SATIN, "Satined"), |
57 | RawMaterial (Graphic3d_NOM_METALIZED, "Metalized"), |
58 | RawMaterial (Graphic3d_NOM_NEON_GNC, "Ionized"), |
59 | RawMaterial (Graphic3d_NOM_CHROME, "Chrome"), |
60 | RawMaterial (Graphic3d_NOM_ALUMINIUM, "Aluminium"), |
61 | RawMaterial (Graphic3d_NOM_OBSIDIAN, "Obsidian"), |
62 | RawMaterial (Graphic3d_NOM_NEON_PHC, "Neon"), |
63 | RawMaterial (Graphic3d_NOM_JADE, "Jade"), |
64 | RawMaterial (Graphic3d_NOM_CHARCOAL, "Charcoal"), |
65 | RawMaterial (Graphic3d_NOM_WATER, "Water"), |
66 | RawMaterial (Graphic3d_NOM_GLASS, "Glass"), |
67 | RawMaterial (Graphic3d_NOM_DIAMOND, "Diamond"), |
68 | RawMaterial (Graphic3d_NOM_TRANSPARENT, "Transparent"), |
69 | RawMaterial (Graphic3d_NOM_DEFAULT, "Default"), |
70 | RawMaterial (Graphic3d_NOM_UserDefined, "UserDefined") |
71 | }; |
7fd59977 |
72 | } |
73 | |
44c7c33e |
74 | // ======================================================================= |
4e1bc39a |
75 | // function : RawMaterial |
44c7c33e |
76 | // purpose : |
77 | // ======================================================================= |
4e1bc39a |
78 | RawMaterial::RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName) |
79 | : StringName (theStringName), |
80 | BSDF (Graphic3d_BSDF::CreateDiffuse (Graphic3d_Vec3 (0.0f))), |
81 | TransparencyCoef(0.0f), |
82 | RefractionIndex (1.0f), |
83 | Shininess (0.039f), |
61168418 |
84 | AmbientCoef (0.25f), |
85 | DiffuseCoef (1.0f), |
4e1bc39a |
86 | MaterialType (Graphic3d_MATERIAL_ASPECT), |
87 | MaterialName (theName) |
44c7c33e |
88 | { |
44c7c33e |
89 | switch (theName) |
90 | { |
189f85a3 |
91 | case Graphic3d_NOM_PLASTIC: |
61168418 |
92 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
4e1bc39a |
93 | |
61168418 |
94 | Shininess = 0.0078125f; |
ba00aab7 |
95 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.25f)); |
61168418 |
96 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.24f)); |
ba00aab7 |
97 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.004896f)); |
61168418 |
98 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
99 | |
100 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
101 | BSDF.Ks = Graphic3d_Vec4 (0.00784314f, 0.00784314f, 0.00784314f, 0.25f); |
4e1bc39a |
102 | BSDF.Normalize(); |
67312b79 |
103 | |
44c7c33e |
104 | break; |
189f85a3 |
105 | case Graphic3d_NOM_SHINY_PLASTIC: |
61168418 |
106 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
4e1bc39a |
107 | |
61168418 |
108 | Shininess = 1.00f; |
ba00aab7 |
109 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.22f)); |
61168418 |
110 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.50f)); |
111 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
112 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
113 | |
114 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
115 | BSDF.Ks = Graphic3d_Vec4 (0.145f, 0.145f, 0.145f, 0.17f); |
4e1bc39a |
116 | BSDF.Normalize(); |
44c7c33e |
117 | break; |
4e1bc39a |
118 | case Graphic3d_NOM_SATIN: |
61168418 |
119 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
120 | |
121 | Shininess = 0.09375f; |
ba00aab7 |
122 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.165f)); |
61168418 |
123 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.40f)); |
ba00aab7 |
124 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.162647f)); |
61168418 |
125 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
126 | |
4e1bc39a |
127 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
128 | BSDF.Ks = Graphic3d_Vec4 (0.6f); |
67312b79 |
129 | |
44c7c33e |
130 | break; |
131 | case Graphic3d_NOM_NEON_GNC: |
61168418 |
132 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
133 | |
134 | Shininess = 0.05f; |
135 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
136 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
ba00aab7 |
137 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.342392f)); |
61168418 |
138 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
4e1bc39a |
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: |
61168418 |
146 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
147 | |
148 | Shininess = 0.13f; |
149 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
150 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.47f)); |
ba00aab7 |
151 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.170645f)); |
61168418 |
152 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
153 | |
154 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
155 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.2f)), 0.045f); |
44c7c33e |
156 | break; |
44c7c33e |
157 | case Graphic3d_NOM_BRASS: |
4e1bc39a |
158 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
159 | |
4e1bc39a |
160 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
161 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.58f, 0.42f, 0.20f)), 0.045f); |
189f85a3 |
162 | |
61168418 |
163 | Shininess = 0.65f; |
ba00aab7 |
164 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.088428f, 0.041081f, 0.002090f)); |
165 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.570482f, 0.283555f, 0.012335f)); |
4e1bc39a |
166 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.992f, 0.941f, 0.808f)); |
61168418 |
167 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
168 | break; |
169 | case Graphic3d_NOM_BRONZE: |
4e1bc39a |
170 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
171 | |
4e1bc39a |
172 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
173 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.65f, 0.35f, 0.15f)), 0.045f); |
189f85a3 |
174 | |
61168418 |
175 | Shininess = 0.65f; |
ba00aab7 |
176 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.037301f, 0.014931f, 0.004305f)); |
177 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.468185f, 0.153344f, 0.027491f)); |
4e1bc39a |
178 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.590f, 0.408f, 0.250f)); |
61168418 |
179 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
180 | break; |
181 | case Graphic3d_NOM_COPPER: |
4e1bc39a |
182 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
183 | |
4e1bc39a |
184 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
185 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.955008f, 0.637427f, 0.538163f)), 0.045f); |
189f85a3 |
186 | |
61168418 |
187 | Shininess = 0.65f; |
ba00aab7 |
188 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030370f, 0.006451f, 0.001780f)); |
189 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.323236f, 0.059254f, 0.007584f)); |
4e1bc39a |
190 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.640f, 0.540f)); |
61168418 |
191 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
192 | break; |
193 | case Graphic3d_NOM_GOLD: |
4e1bc39a |
194 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
195 | |
4e1bc39a |
196 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
197 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (1.000000f, 0.765557f, 0.336057f)), 0.045f); |
189f85a3 |
198 | |
61168418 |
199 | Shininess = 0.80f; |
ba00aab7 |
200 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.043234f, 0.009264f)); |
201 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.525643f, 0.295700f, 0.010023f)); |
4e1bc39a |
202 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.000f, 0.710f, 0.290f)); |
61168418 |
203 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
204 | break; |
205 | case Graphic3d_NOM_PEWTER: |
4e1bc39a |
206 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
207 | |
4e1bc39a |
208 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
209 | Graphic3d_Fresnel::CreateConductor (1.8800f, 3.4900f), 0.045f); |
189f85a3 |
210 | |
61168418 |
211 | Shininess = 0.50f; |
ba00aab7 |
212 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.010979f, 0.004795f, 0.012335f)); |
213 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.152583f, 0.188174f, 0.253972f)); |
4e1bc39a |
214 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.333f, 0.522f)); |
61168418 |
215 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
216 | break; |
217 | case Graphic3d_NOM_PLASTER: |
61168418 |
218 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
44c7c33e |
219 | |
61168418 |
220 | Shininess = 0.01f; |
ba00aab7 |
221 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.13f)); |
61168418 |
222 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.75f)); |
ba00aab7 |
223 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.003936f)); |
61168418 |
224 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
225 | |
4e1bc39a |
226 | BSDF.Kd = Graphic3d_Vec3 (0.482353f, 0.482353f, 0.482353f); |
67312b79 |
227 | |
44c7c33e |
228 | break; |
229 | case Graphic3d_NOM_SILVER: |
4e1bc39a |
230 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
231 | |
4e1bc39a |
232 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
233 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.971519f, 0.959915f, 0.915324f)), 0.045f); |
189f85a3 |
234 | |
61168418 |
235 | Shininess = 0.75f; |
ba00aab7 |
236 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.061465f, 0.061465f, 0.050876f)); |
237 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.354692f, 0.354692f, 0.354692f)); |
4e1bc39a |
238 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.930f, 0.880f)); |
61168418 |
239 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
240 | break; |
241 | case Graphic3d_NOM_STEEL: |
4e1bc39a |
242 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
243 | |
4e1bc39a |
244 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
245 | Graphic3d_Fresnel::CreateConductor (Graphic3d_Vec3 (2.90f, 2.80f, 2.53f), Graphic3d_Vec3 (3.08f, 2.90f, 2.74f)), 0.045f); |
189f85a3 |
246 | |
61168418 |
247 | Shininess = 0.90f; |
ba00aab7 |
248 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.019607f, 0.019607f, 0.027212f)); |
249 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.214041f, 0.223414f, 0.233022f)); |
4e1bc39a |
250 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.560f, 0.570f, 0.580f)); |
61168418 |
251 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
252 | break; |
253 | case Graphic3d_NOM_STONE: |
4e1bc39a |
254 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
255 | |
61168418 |
256 | // special case for SetColor() |
257 | AmbientCoef = 0.19f * 0.25f; |
258 | DiffuseCoef = 0.75f; |
44c7c33e |
259 | |
61168418 |
260 | Shininess = 0.17f; |
ba00aab7 |
261 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030074f, 0.020069f, 0.013011f)); |
262 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.522522f, 0.318547f, 0.183064f)); |
61168418 |
263 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.98f, 1.0f, 0.60f) * 0.08f); |
264 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
265 | |
4e1bc39a |
266 | BSDF.Kd = Graphic3d_Vec3 (0.243137f, 0.243137f, 0.243137f); |
05aa616d |
267 | BSDF.Ks = Graphic3d_Vec4 (0.00392157f, 0.00392157f, 0.00392157f, 0.5f); |
67312b79 |
268 | |
44c7c33e |
269 | break; |
44c7c33e |
270 | case Graphic3d_NOM_CHROME: |
4e1bc39a |
271 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
272 | |
4e1bc39a |
273 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
274 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.549585f, 0.556114f, 0.554256f)), 0.045f); |
189f85a3 |
275 | |
61168418 |
276 | Shininess = 0.90f; |
ba00aab7 |
277 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.033105f, 0.033105f, 0.041436f)); |
278 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.263273f, 0.263273f)); |
4e1bc39a |
279 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.975f, 0.975f, 0.975f)); |
61168418 |
280 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
281 | break; |
282 | case Graphic3d_NOM_ALUMINIUM: |
4e1bc39a |
283 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
284 | |
4e1bc39a |
285 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
286 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.913183f, 0.921494f, 0.924524f)), 0.045f); |
189f85a3 |
287 | |
61168418 |
288 | Shininess = 0.75f; |
ba00aab7 |
289 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.073239f, 0.073239f)); |
290 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.318547f, 0.318547f, 0.318547f)); |
4e1bc39a |
291 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.910f, 0.920f, 0.920f)); |
61168418 |
292 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
293 | break; |
294 | case Graphic3d_NOM_NEON_PHC: |
4e1bc39a |
295 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
296 | |
61168418 |
297 | Shininess = 0.05f; |
298 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
299 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
300 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.62f)); |
ba00aab7 |
301 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f, 0.787412f, 0.142892f)); |
4e1bc39a |
302 | |
303 | BSDF.Kd = Graphic3d_Vec3 (0.0f); |
05aa616d |
304 | BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f); |
4e1bc39a |
305 | BSDF.Le = Graphic3d_Vec3 (0.0f, 1.0f, 0.46f); |
05aa616d |
306 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
44c7c33e |
307 | break; |
308 | case Graphic3d_NOM_OBSIDIAN: |
4e1bc39a |
309 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
310 | |
61168418 |
311 | Shininess = 0.3f; |
ba00aab7 |
312 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.004305f, 0.003936f, 0.005532f)); |
313 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.028053f, 0.024515f, 0.041436f)); |
4e1bc39a |
314 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.329f, 0.346f)); |
61168418 |
315 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
316 | |
317 | BSDF.Kd = Graphic3d_Vec3 (0.023f, 0.f, 0.023f); |
05aa616d |
318 | BSDF.Ks = Graphic3d_Vec4 (0.0156863f, 0.0156863f, 0.0156863f, 0.1f); |
44c7c33e |
319 | break; |
320 | case Graphic3d_NOM_JADE: |
4e1bc39a |
321 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
322 | |
61168418 |
323 | Shininess = 0.10f; |
ba00aab7 |
324 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.016338f, 0.040729f, 0.021493f)); |
325 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.252950f, 0.767769f, 0.354692f)); |
4e1bc39a |
326 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.316f, 0.316f, 0.316f)); |
61168418 |
327 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
328 | |
05aa616d |
329 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
4e1bc39a |
330 | BSDF.Kd = Graphic3d_Vec3 (0.208658f, 0.415686f, 0.218401f); |
05aa616d |
331 | BSDF.Ks = Graphic3d_Vec4 (0.611765f, 0.611765f, 0.611765f, 0.06f); |
44c7c33e |
332 | break; |
333 | case Graphic3d_NOM_CHARCOAL: |
4e1bc39a |
334 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
335 | |
61168418 |
336 | Shininess = 0.01f; |
ba00aab7 |
337 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.003936f)); |
338 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.019607f)); |
61168418 |
339 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
340 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
341 | |
342 | BSDF.Kd = Graphic3d_Vec3 (0.02f, 0.02f, 0.02f); |
05aa616d |
343 | BSDF.Ks = Graphic3d_Vec4 (0.1f, 0.1f, 0.1f, 0.3f); |
44c7c33e |
344 | break; |
345 | case Graphic3d_NOM_WATER: |
4e1bc39a |
346 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
347 | |
4e1bc39a |
348 | RefractionIndex = 1.33f; |
349 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
350 | Graphic3d_Vec3 (0.7f, 0.75f, 0.85f), |
351 | 0.05f, |
352 | RefractionIndex); |
353 | TransparencyCoef = 0.80f; |
354 | |
61168418 |
355 | Shininess = 0.90f; |
ba00aab7 |
356 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.170645f, 0.170645f, 0.191627f)); |
357 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.003936f, 0.006571f)); |
4e1bc39a |
358 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.380f, 0.380f, 0.380f)); |
61168418 |
359 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
360 | break; |
361 | case Graphic3d_NOM_GLASS: |
4e1bc39a |
362 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
363 | |
4e1bc39a |
364 | RefractionIndex = 1.62f; |
365 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
366 | Graphic3d_Vec3 (0.75f, 0.95f, 0.9f), |
367 | 0.05f, |
368 | RefractionIndex); |
369 | TransparencyCoef = 0.80f; |
370 | |
61168418 |
371 | Shininess = 0.50f; |
ba00aab7 |
372 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.290143f, 0.290143f)); |
373 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.006571f, 0.006571f)); |
4e1bc39a |
374 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.920f, 0.920f, 0.920f)); |
61168418 |
375 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
376 | break; |
377 | case Graphic3d_NOM_DIAMOND: |
4e1bc39a |
378 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
379 | |
4e1bc39a |
380 | RefractionIndex = 2.42f; |
381 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
382 | Graphic3d_Vec3 (0.95f, 0.95f, 0.95f), |
383 | 0.05f, |
384 | RefractionIndex); |
385 | TransparencyCoef = 0.80f; |
386 | |
61168418 |
387 | Shininess = 0.90f; |
ba00aab7 |
388 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f)); |
389 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f)); |
61168418 |
390 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f)); |
391 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
392 | break; |
6e728f3b |
393 | |
394 | case Graphic3d_NOM_TRANSPARENT: |
4e1bc39a |
395 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
396 | |
4e1bc39a |
397 | RefractionIndex = 1.0f; |
6e728f3b |
398 | |
4e1bc39a |
399 | BSDF.Kd = Graphic3d_Vec3 (0.1f); |
400 | BSDF.Kt = Graphic3d_Vec3 (0.9f); |
05aa616d |
401 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateConstant (0.0f); |
4e1bc39a |
402 | TransparencyCoef = 0.80f; |
403 | |
61168418 |
404 | Shininess = 0.90f; |
ba00aab7 |
405 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f)); |
406 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f)); |
61168418 |
407 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f)); |
408 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
409 | break; |
44c7c33e |
410 | case Graphic3d_NOM_UserDefined: |
2108d9a2 |
411 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
61168418 |
412 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.1f)); |
ba00aab7 |
413 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.6f)); |
61168418 |
414 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.2f)); |
415 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
416 | break; |
417 | case Graphic3d_NOM_DEFAULT: |
61168418 |
418 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
419 | |
ba00aab7 |
420 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.15f)); |
61168418 |
421 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.65f)); |
422 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
423 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
424 | break; |
425 | } |
67312b79 |
426 | PBRMaterial.SetBSDF (BSDF); |
44c7c33e |
427 | } |
7fd59977 |
428 | |
4e1bc39a |
429 | // ======================================================================= |
430 | // function : Graphic3d_MaterialAspect |
431 | // purpose : |
432 | // ======================================================================= |
433 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect() |
434 | : myRequestedMaterialName (Graphic3d_NOM_DEFAULT) |
435 | { |
436 | init (Graphic3d_NOM_DEFAULT); |
437 | } |
438 | |
439 | // ======================================================================= |
440 | // function : Graphic3d_MaterialAspect |
441 | // purpose : |
442 | // ======================================================================= |
443 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect (const Graphic3d_NameOfMaterial theName) |
444 | : myRequestedMaterialName (theName) |
445 | { |
446 | init (theName); |
447 | } |
448 | |
449 | // ======================================================================= |
450 | // function : init |
451 | // purpose : |
452 | // ======================================================================= |
453 | void Graphic3d_MaterialAspect::init (const Graphic3d_NameOfMaterial theName) |
454 | { |
455 | const RawMaterial& aMat = THE_MATERIALS[theName]; |
67312b79 |
456 | myBSDF = aMat.BSDF; |
457 | myPBRMaterial = aMat.PBRMaterial; |
458 | myStringName = aMat.StringName; |
4e1bc39a |
459 | myColors[Graphic3d_TOR_AMBIENT] = aMat.Colors[Graphic3d_TOR_AMBIENT]; |
460 | myColors[Graphic3d_TOR_DIFFUSE] = aMat.Colors[Graphic3d_TOR_DIFFUSE]; |
461 | myColors[Graphic3d_TOR_SPECULAR] = aMat.Colors[Graphic3d_TOR_SPECULAR]; |
462 | myColors[Graphic3d_TOR_EMISSION] = aMat.Colors[Graphic3d_TOR_EMISSION]; |
4e1bc39a |
463 | myTransparencyCoef = aMat.TransparencyCoef; |
464 | myRefractionIndex = aMat.RefractionIndex; |
465 | myShininess = aMat.Shininess; |
4e1bc39a |
466 | myMaterialType = aMat.MaterialType; |
467 | myMaterialName = theName; |
468 | myRequestedMaterialName = theName; |
4e1bc39a |
469 | } |
470 | |
44c7c33e |
471 | // ======================================================================= |
472 | // function : IncreaseShine |
473 | // purpose : |
474 | // ======================================================================= |
4e1bc39a |
475 | void Graphic3d_MaterialAspect::IncreaseShine (const Standard_ShortReal theDelta) |
44c7c33e |
476 | { |
4e1bc39a |
477 | const Standard_ShortReal anOldShine = myShininess; |
478 | myShininess = myShininess + myShininess * theDelta / 100.0f; |
479 | if (myShininess > 1.0f || myShininess < 0.0f) |
44c7c33e |
480 | { |
481 | myShininess = anOldShine; |
482 | } |
483 | } |
7fd59977 |
484 | |
44c7c33e |
485 | // ======================================================================= |
486 | // function : SetMaterialType |
487 | // purpose : |
488 | // ======================================================================= |
489 | void Graphic3d_MaterialAspect::SetMaterialType (const Graphic3d_TypeOfMaterial theType) |
490 | { |
491 | myMaterialType = theType; |
492 | if (theType != myMaterialType) |
493 | { |
4e1bc39a |
494 | setUserMaterial(); |
44c7c33e |
495 | } |
7fd59977 |
496 | } |
497 | |
44c7c33e |
498 | // ======================================================================= |
61168418 |
499 | // function : SetColor |
44c7c33e |
500 | // purpose : |
501 | // ======================================================================= |
61168418 |
502 | void Graphic3d_MaterialAspect::SetColor (const Quantity_Color& theColor) |
44c7c33e |
503 | { |
61168418 |
504 | if (myMaterialType == Graphic3d_MATERIAL_ASPECT) |
44c7c33e |
505 | { |
61168418 |
506 | return; |
44c7c33e |
507 | } |
7fd59977 |
508 | |
67312b79 |
509 | myPBRMaterial.SetColor (theColor); |
510 | |
61168418 |
511 | const RawMaterial& aSrcMat = THE_MATERIALS[myRequestedMaterialName]; |
512 | const Quantity_Color anAmbient((Graphic3d_Vec3 )theColor * aSrcMat.AmbientCoef); |
513 | const Quantity_Color aDiffuse ((Graphic3d_Vec3 )theColor * aSrcMat.DiffuseCoef); |
514 | if (myMaterialName != Graphic3d_NOM_UserDefined |
515 | && (!myColors[Graphic3d_TOR_AMBIENT].IsEqual (anAmbient) |
516 | || !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (aDiffuse))) |
44c7c33e |
517 | { |
4e1bc39a |
518 | setUserMaterial(); |
44c7c33e |
519 | } |
61168418 |
520 | myColors[Graphic3d_TOR_AMBIENT] = anAmbient; |
521 | myColors[Graphic3d_TOR_DIFFUSE] = aDiffuse; |
44c7c33e |
522 | } |
7fd59977 |
523 | |
44c7c33e |
524 | // ======================================================================= |
525 | // function : SetAmbientColor |
526 | // purpose : |
527 | // ======================================================================= |
528 | void Graphic3d_MaterialAspect::SetAmbientColor (const Quantity_Color& theColor) |
529 | { |
61168418 |
530 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
531 | && myMaterialName != Graphic3d_NOM_UserDefined |
532 | && !myColors[Graphic3d_TOR_AMBIENT].IsEqual (theColor)) |
44c7c33e |
533 | { |
4e1bc39a |
534 | setUserMaterial(); |
44c7c33e |
535 | } |
61168418 |
536 | myColors[Graphic3d_TOR_AMBIENT] = theColor; |
7fd59977 |
537 | } |
538 | |
44c7c33e |
539 | // ======================================================================= |
540 | // function : SetDiffuseColor |
541 | // purpose : |
542 | // ======================================================================= |
543 | void Graphic3d_MaterialAspect::SetDiffuseColor (const Quantity_Color& theColor) |
544 | { |
61168418 |
545 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
546 | && myMaterialName != Graphic3d_NOM_UserDefined |
547 | && !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (theColor)) |
44c7c33e |
548 | { |
4e1bc39a |
549 | setUserMaterial(); |
44c7c33e |
550 | } |
61168418 |
551 | myColors[Graphic3d_TOR_DIFFUSE] = theColor; |
44c7c33e |
552 | } |
7fd59977 |
553 | |
44c7c33e |
554 | // ======================================================================= |
555 | // function : SetSpecularColor |
556 | // purpose : |
557 | // ======================================================================= |
558 | void Graphic3d_MaterialAspect::SetSpecularColor (const Quantity_Color& theColor) |
559 | { |
61168418 |
560 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
561 | && myMaterialName != Graphic3d_NOM_UserDefined |
562 | && !myColors[Graphic3d_TOR_SPECULAR].IsEqual (theColor)) |
44c7c33e |
563 | { |
4e1bc39a |
564 | setUserMaterial(); |
44c7c33e |
565 | } |
61168418 |
566 | myColors[Graphic3d_TOR_SPECULAR] = theColor; |
44c7c33e |
567 | } |
7fd59977 |
568 | |
44c7c33e |
569 | // ======================================================================= |
570 | // function : SetEmissiveColor |
571 | // purpose : |
572 | // ======================================================================= |
573 | void Graphic3d_MaterialAspect::SetEmissiveColor (const Quantity_Color& theColor) |
574 | { |
61168418 |
575 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
576 | && myMaterialName != Graphic3d_NOM_UserDefined |
577 | && !myColors[Graphic3d_TOR_EMISSION].IsEqual (theColor)) |
44c7c33e |
578 | { |
4e1bc39a |
579 | setUserMaterial(); |
44c7c33e |
580 | } |
61168418 |
581 | myColors[Graphic3d_TOR_EMISSION] = theColor; |
44c7c33e |
582 | } |
7fd59977 |
583 | |
44c7c33e |
584 | // ======================================================================= |
585 | // function : SetTransparency |
586 | // purpose : |
587 | // ======================================================================= |
4e1bc39a |
588 | void Graphic3d_MaterialAspect::SetTransparency (const Standard_ShortReal theValue) |
44c7c33e |
589 | { |
4e1bc39a |
590 | if (theValue < 0.0f |
591 | || theValue > 1.0f) |
44c7c33e |
592 | { |
9775fa61 |
593 | throw Graphic3d_MaterialDefinitionError("Bad value for SetTransparency < 0. or > 1.0"); |
44c7c33e |
594 | } |
7fd59977 |
595 | |
4e1bc39a |
596 | myTransparencyCoef = theValue; |
67312b79 |
597 | myPBRMaterial.SetAlpha (1.0f - theValue); |
7fd59977 |
598 | } |
599 | |
44c7c33e |
600 | // ======================================================================= |
601 | // function : SetRefractionIndex |
602 | // purpose : |
603 | // ======================================================================= |
4e1bc39a |
604 | void Graphic3d_MaterialAspect::SetRefractionIndex (const Standard_ShortReal theValue) |
44c7c33e |
605 | { |
4e1bc39a |
606 | if (theValue < 1.0f) |
44c7c33e |
607 | { |
9775fa61 |
608 | throw Graphic3d_MaterialDefinitionError("Bad value for refraction index < 1.0"); |
44c7c33e |
609 | } |
7fd59977 |
610 | |
4e1bc39a |
611 | myRefractionIndex = theValue; |
44c7c33e |
612 | } |
7fd59977 |
613 | |
44c7c33e |
614 | // ======================================================================= |
615 | // function : SetShininess |
616 | // purpose : |
617 | // ======================================================================= |
4e1bc39a |
618 | void Graphic3d_MaterialAspect::SetShininess (const Standard_ShortReal theValue) |
44c7c33e |
619 | { |
4e1bc39a |
620 | if (theValue < 0.0f |
621 | || theValue > 1.0f) |
44c7c33e |
622 | { |
9775fa61 |
623 | throw Graphic3d_MaterialDefinitionError("Bad value for Shininess < 0. or > 1.0"); |
44c7c33e |
624 | } |
7fd59977 |
625 | |
61168418 |
626 | if (myShininess != theValue) |
627 | { |
628 | myShininess = theValue; |
629 | setUserMaterial(); |
630 | } |
7fd59977 |
631 | } |
632 | |
44c7c33e |
633 | // ======================================================================= |
634 | // function : MaterialName |
635 | // purpose : |
636 | // ======================================================================= |
637 | Standard_CString Graphic3d_MaterialAspect::MaterialName (const Standard_Integer theRank) |
638 | { |
639 | if (theRank < 1 || theRank > NumberOfMaterials()) |
640 | { |
9775fa61 |
641 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
642 | } |
4e1bc39a |
643 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
644 | return aMat.StringName; |
7fd59977 |
645 | } |
646 | |
44c7c33e |
647 | // ======================================================================= |
648 | // function : MaterialFromName |
649 | // purpose : |
650 | // ======================================================================= |
61168418 |
651 | Standard_Boolean Graphic3d_MaterialAspect::MaterialFromName (const Standard_CString theName, |
652 | Graphic3d_NameOfMaterial& theMat) |
ad3217cd |
653 | { |
654 | TCollection_AsciiString aName (theName); |
655 | aName.LowerCase(); |
656 | aName.Capitalize(); |
657 | const Standard_Integer aNbMaterials = Graphic3d_MaterialAspect::NumberOfMaterials(); |
61168418 |
658 | for (Standard_Integer aMatIter = 0; aMatIter <= aNbMaterials; ++aMatIter) |
ad3217cd |
659 | { |
4e1bc39a |
660 | const RawMaterial& aMat = THE_MATERIALS[aMatIter]; |
661 | if (aName == aMat.StringName) |
ad3217cd |
662 | { |
61168418 |
663 | theMat = Graphic3d_NameOfMaterial(aMatIter); |
664 | return Standard_True; |
ad3217cd |
665 | } |
666 | } |
667 | |
668 | // parse aliases |
669 | if (aName == "Plastic") // Plastified |
670 | { |
61168418 |
671 | theMat = Graphic3d_NOM_PLASTIC; |
672 | return Standard_True; |
ad3217cd |
673 | } |
674 | else if (aName == "Shiny_plastic") // Shiny_plastified |
675 | { |
61168418 |
676 | theMat = Graphic3d_NOM_SHINY_PLASTIC; |
677 | return Standard_True; |
ad3217cd |
678 | } |
679 | else if (aName == "Plaster") // Plastered |
680 | { |
61168418 |
681 | theMat = Graphic3d_NOM_PLASTER; |
682 | return Standard_True; |
ad3217cd |
683 | } |
684 | else if (aName == "Satin") // Satined |
685 | { |
61168418 |
686 | theMat = Graphic3d_NOM_SATIN; |
687 | return Standard_True; |
ad3217cd |
688 | } |
689 | else if (aName == "Neon_gnc") // Ionized |
690 | { |
61168418 |
691 | theMat = Graphic3d_NOM_NEON_GNC; |
692 | return Standard_True; |
ad3217cd |
693 | } |
694 | else if (aName == "Neon_phc") // Neon |
695 | { |
61168418 |
696 | theMat = Graphic3d_NOM_NEON_PHC; |
697 | return Standard_True; |
ad3217cd |
698 | } |
61168418 |
699 | return Standard_False; |
ad3217cd |
700 | } |
701 | |
44c7c33e |
702 | // ======================================================================= |
703 | // function : MaterialType |
704 | // purpose : |
705 | // ======================================================================= |
706 | Graphic3d_TypeOfMaterial Graphic3d_MaterialAspect::MaterialType (const Standard_Integer theRank) |
707 | { |
708 | if (theRank < 1 || theRank > NumberOfMaterials()) |
709 | { |
9775fa61 |
710 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
711 | } |
4e1bc39a |
712 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
713 | return aMat.MaterialType; |
7fd59977 |
714 | } |