0028641: Data Exchange - Support alpha-channel of color
[occt.git] / src / XCAFDoc / XCAFDoc_Color.cxx
1 // Created on: 2000-08-16
2 // Created by: data exchange team
3 // Copyright (c) 2000-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16
17 #include <Quantity_Color.hxx>
18 #include <Quantity_ColorRGBA.hxx>
19 #include <Standard_GUID.hxx>
20 #include <Standard_Type.hxx>
21 #include <TDF_Attribute.hxx>
22 #include <TDF_Label.hxx>
23 #include <TDF_RelocationTable.hxx>
24 #include <XCAFDoc_Color.hxx>
25
26 IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_Color,TDF_Attribute)
27
28 //=======================================================================
29 //function : Constructor
30 //purpose  : 
31 //=======================================================================
32 XCAFDoc_Color::XCAFDoc_Color()
33 {
34 }
35
36 //=======================================================================
37 //function : GetID
38 //purpose  : 
39 //=======================================================================
40
41 const Standard_GUID& XCAFDoc_Color::GetID() 
42 {
43   static Standard_GUID ColorID ("efd212f0-6dfd-11d4-b9c8-0060b0ee281b");
44   return ColorID; 
45 }
46
47 //=======================================================================
48 //function : Set
49 //purpose  : 
50 //=======================================================================
51
52  Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
53                                           const Quantity_Color& C) 
54 {
55   Handle(XCAFDoc_Color) A;
56   if (!L.FindAttribute (XCAFDoc_Color::GetID(), A)) {
57     A = new XCAFDoc_Color ();
58     L.AddAttribute(A);
59   }
60   A->Set (C); 
61   return A;
62 }
63
64  //=======================================================================
65  //function : Set
66  //purpose  : 
67  //=======================================================================
68
69  Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
70    const Quantity_ColorRGBA& C)
71  {
72    Handle(XCAFDoc_Color) A;
73    if (!L.FindAttribute(XCAFDoc_Color::GetID(), A)) {
74      A = new XCAFDoc_Color();
75      L.AddAttribute(A);
76    }
77    A->Set(C);
78    return A;
79  }
80
81 //=======================================================================
82 //function : Set
83 //purpose  : 
84 //=======================================================================
85
86  Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
87                                           const Quantity_NameOfColor C) 
88 {
89   Handle(XCAFDoc_Color) A;
90   if (!L.FindAttribute (XCAFDoc_Color::GetID(), A)) {
91     A = new XCAFDoc_Color ();
92     L.AddAttribute(A);
93   }
94   A->Set (C); 
95   return A;
96 }
97
98 //=======================================================================
99 //function : Set
100 //purpose  : 
101 //=======================================================================
102
103 Handle(XCAFDoc_Color) XCAFDoc_Color::Set(const TDF_Label& L,
104                                          const Standard_Real R,
105                                          const Standard_Real G,
106                                          const Standard_Real B,
107                                          const Standard_Real alpha) 
108 {
109   Handle(XCAFDoc_Color) A;
110   if (!L.FindAttribute (XCAFDoc_Color::GetID(), A)) {
111     A = new XCAFDoc_Color ();
112     L.AddAttribute(A);
113   }
114   A->Set (R,G,B, alpha); 
115   return A;
116 }
117
118 //=======================================================================
119 //function : Set
120 //purpose  : 
121 //=======================================================================
122
123 void XCAFDoc_Color::Set(const Quantity_Color& C) 
124 {
125   Backup();
126   myColor.SetRGB(C);
127 }
128
129 //=======================================================================
130 //function : Set
131 //purpose  : 
132 //=======================================================================
133
134 void XCAFDoc_Color::Set(const Quantity_ColorRGBA& C)
135 {
136   Backup();
137   myColor = C;
138 }
139
140 //=======================================================================
141 //function : Set
142 //purpose  : 
143 //=======================================================================
144
145  void XCAFDoc_Color::Set(const Quantity_NameOfColor C) 
146 {
147   Backup();
148   myColor.SetRGB(C);
149 }
150
151 //=======================================================================
152 //function : Set
153 //purpose  : 
154 //=======================================================================
155
156  void XCAFDoc_Color::Set(const Standard_Real R,
157                          const Standard_Real G,
158                          const Standard_Real B,
159                          const Standard_Real alpha) 
160 {
161   Backup();
162   Quantity_Color aColor;
163   aColor.SetValues(R, G, B, Quantity_TOC_RGB);
164   myColor.SetRGB(aColor);
165   myColor.SetAlpha((Standard_ShortReal)alpha);
166 }
167
168 //=======================================================================
169 //function : GetColor
170 //purpose  : 
171 //=======================================================================
172
173 const Quantity_Color& XCAFDoc_Color::GetColor() const
174 {
175   return myColor.GetRGB();
176 }
177
178 //=======================================================================
179 //function : GetColorRGBA
180 //purpose  : 
181 //=======================================================================
182
183 const Quantity_ColorRGBA& XCAFDoc_Color::GetColorRGBA() const
184 {
185   return myColor;
186 }
187
188 //=======================================================================
189 //function : GetNOC
190 //purpose  : 
191 //=======================================================================
192
193  Quantity_NameOfColor XCAFDoc_Color::GetNOC() const
194 {
195   return myColor.GetRGB().Name();
196 }
197
198 //=======================================================================
199 //function : GetRGB
200 //purpose  : 
201 //=======================================================================
202
203  void XCAFDoc_Color::GetRGB(Standard_Real& R,
204                                   Standard_Real& G,
205                                   Standard_Real& B) const
206 {
207   myColor.GetRGB().Values(R,G,B, Quantity_TOC_RGB);
208 }
209
210  //=======================================================================
211  //function : GetRGBA
212  //purpose  : 
213  //=======================================================================
214
215  Standard_ShortReal XCAFDoc_Color::GetAlpha() const
216  {
217    return myColor.Alpha();
218  }
219 //=======================================================================
220 //function : ID
221 //purpose  : 
222 //=======================================================================
223
224 const Standard_GUID& XCAFDoc_Color::ID() const
225 {
226   return GetID();
227 }
228
229 //=======================================================================
230 //function : Restore
231 //purpose  : 
232 //=======================================================================
233
234  void XCAFDoc_Color::Restore(const Handle(TDF_Attribute)& With) 
235 {
236   myColor = Handle(XCAFDoc_Color)::DownCast(With)->GetColorRGBA();
237 }
238
239 //=======================================================================
240 //function : NewEmpty
241 //purpose  : 
242 //=======================================================================
243
244  Handle(TDF_Attribute) XCAFDoc_Color::NewEmpty() const
245 {
246   return new XCAFDoc_Color();
247 }
248
249 //=======================================================================
250 //function : Paste
251 //purpose  : 
252 //=======================================================================
253
254  void XCAFDoc_Color::Paste(const Handle(TDF_Attribute)& Into,
255                                  const Handle(TDF_RelocationTable)& /* RT */) const
256 {
257   Handle(XCAFDoc_Color)::DownCast(Into)->Set(myColor);
258 }
259