0029902: Data Exchange, XCAF - provide extended Material definition for visualization...
[occt.git] / src / XCAFDoc / XCAFDoc_VisMaterialCommon.hxx
1 // Copyright (c) 2019 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #ifndef _XCAFDoc_VisMaterialCommon_HeaderFile
15 #define _XCAFDoc_VisMaterialCommon_HeaderFile
16
17 #include <Graphic3d_AlphaMode.hxx>
18 #include <Graphic3d_Vec.hxx>
19 #include <Image_Texture.hxx>
20 #include <Quantity_ColorRGBA.hxx>
21
22 class Graphic3d_Aspects;
23 class Graphic3d_MaterialAspect;
24
25 //! Common (obsolete) material definition.
26 struct XCAFDoc_VisMaterialCommon
27 {
28   Handle(Image_Texture)   DiffuseTexture;  //!< image defining diffuse color
29   Quantity_Color          AmbientColor;    //!< ambient  color
30   Quantity_Color          DiffuseColor;    //!< diffuse  color
31   Quantity_Color          SpecularColor;   //!< specular color
32   Quantity_Color          EmissiveColor;   //!< emission color
33   Standard_ShortReal      Shininess;       //!< shininess value
34   Standard_ShortReal      Transparency;    //!< transparency value within [0, 1] range with 0 meaning opaque
35   Standard_Boolean        IsDefined;       //!< defined flag; FALSE by default
36
37   //! Empty constructor.
38   XCAFDoc_VisMaterialCommon()
39   : AmbientColor (0.1, 0.1, 0.1, Quantity_TOC_RGB),
40     DiffuseColor (0.8, 0.8, 0.8, Quantity_TOC_RGB),
41     SpecularColor(0.2, 0.2, 0.2, Quantity_TOC_RGB),
42     EmissiveColor(0.0, 0.0, 0.0, Quantity_TOC_RGB),
43     Shininess (1.0f),
44     Transparency (0.0f),
45     IsDefined (Standard_False) {}
46
47   //! Compare two materials.
48   Standard_Boolean IsEqual (const XCAFDoc_VisMaterialCommon& theOther) const
49   {
50     if (&theOther == this)
51     {
52       return true;
53     }
54     else if (theOther.IsDefined != IsDefined)
55     {
56       return false;
57     }
58     else if (!IsDefined)
59     {
60       return true;
61     }
62
63     return theOther.DiffuseTexture  == DiffuseTexture
64         && theOther.AmbientColor    == AmbientColor
65         && theOther.DiffuseColor    == DiffuseColor
66         && theOther.SpecularColor   == SpecularColor
67         && theOther.EmissiveColor   == EmissiveColor
68         && theOther.Shininess       == Shininess
69         && theOther.Transparency    == Transparency;
70   }
71 };
72
73 #endif // _XCAFDoc_VisMaterialCommon_HeaderFile