0029516: Visualization - eliminate redundant property Graphic3d_MaterialAspect::Refle...
[occt.git] / src / Prs3d / Prs3d_ShadingAspect.cxx
1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
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
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.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #include <Prs3d_ShadingAspect.hxx>
16
17 #include <Graphic3d_AspectFillArea3d.hxx>
18 #include <Graphic3d_MaterialAspect.hxx>
19 #include <Quantity_Color.hxx>
20 #include <Standard_Type.hxx>
21
22 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_ShadingAspect, Prs3d_BasicAspect)
23
24 //=======================================================================
25 //function : Prs3d_ShadingAspect
26 //purpose  :
27 //=======================================================================
28 Prs3d_ShadingAspect::Prs3d_ShadingAspect()
29 {
30   const Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
31   const Quantity_Color aColor = aMat.AmbientColor();
32   myAspect = new Graphic3d_AspectFillArea3d (Aspect_IS_SOLID,
33                                              aColor,
34                                              aColor,
35                                              Aspect_TOL_SOLID,
36                                              1.0,
37                                              aMat,
38                                              aMat);
39 }
40
41 //=======================================================================
42 //function : SetColor
43 //purpose  :
44 //=======================================================================
45 void Prs3d_ShadingAspect::SetColor (const Quantity_Color& theColor,
46                                     const Aspect_TypeOfFacingModel theModel)
47 {
48   if (theModel != Aspect_TOFM_BOTH_SIDE)
49   {
50     myAspect->SetDistinguishOn();
51   }
52
53   if (theModel == Aspect_TOFM_FRONT_SIDE
54    || theModel == Aspect_TOFM_BOTH_SIDE)
55   {
56     myAspect->ChangeFrontMaterial().SetColor (theColor);
57     myAspect->SetInteriorColor (theColor);
58   }
59
60   if (theModel == Aspect_TOFM_BACK_SIDE
61    || theModel == Aspect_TOFM_BOTH_SIDE)
62   {
63     myAspect->ChangeBackMaterial().SetColor (theColor);
64     myAspect->SetBackInteriorColor (theColor);
65   }
66 }
67
68 //=======================================================================
69 //function : Color
70 //purpose  :
71 //=======================================================================
72 const Quantity_Color& Prs3d_ShadingAspect::Color (const Aspect_TypeOfFacingModel theModel) const
73 {
74   switch (theModel)
75   {
76     default:
77     case Aspect_TOFM_BOTH_SIDE:
78     case Aspect_TOFM_FRONT_SIDE:
79       return myAspect->FrontMaterial().MaterialType() == Graphic3d_MATERIAL_ASPECT
80            ? myAspect->InteriorColor()
81            : myAspect->FrontMaterial().Color();
82     case Aspect_TOFM_BACK_SIDE:
83       return myAspect->BackMaterial().MaterialType() == Graphic3d_MATERIAL_ASPECT
84            ? myAspect->BackInteriorColor()
85            : myAspect->BackMaterial().Color();
86   }
87 }
88
89 //=======================================================================
90 //function : SetMaterial
91 //purpose  :
92 //=======================================================================
93 void Prs3d_ShadingAspect::SetMaterial (const Graphic3d_MaterialAspect& theMaterial,
94                                        const Aspect_TypeOfFacingModel  theModel)
95 {
96   if (theModel != Aspect_TOFM_BOTH_SIDE)
97   {
98     myAspect->SetDistinguishOn();
99   }
100   if (theModel == Aspect_TOFM_FRONT_SIDE
101    || theModel == Aspect_TOFM_BOTH_SIDE)
102   {
103     myAspect->SetFrontMaterial(theMaterial);
104   }
105
106   if (theModel == Aspect_TOFM_BACK_SIDE
107    || theModel == Aspect_TOFM_BOTH_SIDE)
108   {
109     myAspect->SetBackMaterial (theMaterial);
110   }
111 }
112
113 //=======================================================================
114 //function : Material
115 //purpose  :
116 //=======================================================================
117 const Graphic3d_MaterialAspect& Prs3d_ShadingAspect::Material (const Aspect_TypeOfFacingModel theModel) const
118 {
119   switch (theModel)
120   {
121     default:
122     case Aspect_TOFM_BOTH_SIDE:
123     case Aspect_TOFM_FRONT_SIDE:
124       return myAspect->FrontMaterial();
125     case Aspect_TOFM_BACK_SIDE:
126       return myAspect->BackMaterial();
127   }
128 }
129
130 //=======================================================================
131 //function : SetTransparency
132 //purpose  :
133 //=======================================================================
134 void Prs3d_ShadingAspect::SetTransparency (const Standard_Real theValue,
135                                            const Aspect_TypeOfFacingModel theModel)
136 {
137   if (theModel != Aspect_TOFM_BOTH_SIDE)
138   {
139     myAspect->SetDistinguishOn();
140   }
141
142   if (theModel == Aspect_TOFM_FRONT_SIDE
143    || theModel == Aspect_TOFM_BOTH_SIDE)
144   {
145     myAspect->ChangeFrontMaterial().SetTransparency (Standard_ShortReal(theValue));
146   }
147
148   if (theModel == Aspect_TOFM_BACK_SIDE
149    || theModel == Aspect_TOFM_BOTH_SIDE)
150   {
151     myAspect->ChangeBackMaterial().SetTransparency (Standard_ShortReal(theValue));
152   }
153 }
154
155 //=======================================================================
156 //function : Transparency
157 //purpose  :
158 //=======================================================================
159 Standard_Real Prs3d_ShadingAspect::Transparency (const Aspect_TypeOfFacingModel theModel) const
160 {
161   switch (theModel)
162   {
163     case Aspect_TOFM_BOTH_SIDE:
164     case Aspect_TOFM_FRONT_SIDE:
165       return myAspect->FrontMaterial().Transparency();
166     case Aspect_TOFM_BACK_SIDE:
167       return myAspect->BackMaterial().Transparency();
168   }
169   return 0.0;
170 }