0027670: Visualization - avoid duplication of structures defining primitive array...
[occt.git] / src / Graphic3d / Graphic3d_AspectLine3d.hxx
1 // Created by: NW,JPB,CAL
2 // Copyright (c) 1991-1999 Matra Datavision
3 // Copyright (c) 1999-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 #ifndef _Graphic3d_AspectLine3d_HeaderFile
17 #define _Graphic3d_AspectLine3d_HeaderFile
18
19 #include <Aspect_AspectLineDefinitionError.hxx>
20 #include <Aspect_TypeOfLine.hxx>
21 #include <Graphic3d_ShaderProgram.hxx>
22 #include <Standard.hxx>
23 #include <Standard_Real.hxx>
24 #include <Standard_Type.hxx>
25 #include <Quantity_ColorRGBA.hxx>
26
27 //! Creates and updates a group of attributes for 3d line primitives.
28 //! This group contains the color, the type of line, and its thickness.
29 class Graphic3d_AspectLine3d : public Standard_Transient
30 {
31   DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
32 public:
33
34   //! Creates a context table for line primitives
35   //! defined with the following default values:
36   //!
37   //! Color = Quantity_NOC_YELLOW;
38   //! Type  = Aspect_TOL_SOLID;
39   //! Width = 1.0;
40   Standard_EXPORT Graphic3d_AspectLine3d();
41   
42   //! Creates a context table for line primitives defined with the specified values.
43   //! Warning: theWidth is the "line width scale factor".
44   //! The nominal line width is 1 pixel.
45   //! The width of the line is determined by applying the line width scale factor to this nominal line width.
46   //! The supported line widths vary by 1-pixel units.
47   Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color&   theColor,
48                                           const Aspect_TypeOfLine theType,
49                                           const Standard_Real     theWidth);
50
51   //! Return color.
52   const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
53
54   //! Return color.
55   const Quantity_Color& Color() const { return myColor.GetRGB(); }
56
57   //! Modifies the color.
58   void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
59
60   //! Return line type.
61   Aspect_TypeOfLine Type() const { return myType; }
62
63   //! Modifies the type of line.
64   void SetType (const Aspect_TypeOfLine theType) { myType = theType; }
65
66   //! Return line width.
67   Standard_ShortReal Width() const { return myWidth; }
68
69   //! Modifies the line thickness.
70   //! Warning: Raises AspectLineDefinitionError if the width is a negative value.
71   void SetWidth (const Standard_Real theWidth) { SetWidth ((float )theWidth); }
72
73   //! Modifies the line thickness.
74   //! Warning: Raises AspectLineDefinitionError if the width is a negative value.
75   void SetWidth (const Standard_ShortReal theWidth)
76   {
77     if (theWidth <= 0.0f)
78     {
79       Aspect_AspectLineDefinitionError::Raise ("Graphic3d_AspectLine3d, Bad value for LineWidth");
80     }
81     myWidth = theWidth;
82   }
83
84   //! Return shader program.
85   const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
86
87   //! Sets up OpenGL/GLSL shader program.
88   void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
89
90   //! Check for equality with another line aspect.
91   bool IsEqual (const Graphic3d_AspectLine3d& theOther)
92   {
93     if (this == &theOther)
94     {
95       return true;
96     }
97
98     return myProgram == theOther.myProgram
99         && myType    == theOther.myType
100         && myColor   == theOther.myColor
101         && myWidth   == theOther.myWidth;
102   }
103
104 public:
105
106   //! Returns the current values of the group.
107   Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
108   void Values (Quantity_Color&    theColor,
109                Aspect_TypeOfLine& theType,
110                Standard_Real&     theWidth) const
111   {
112     theColor = myColor.GetRGB();
113     theType  = myType;
114     theWidth = myWidth;
115   }
116
117 protected:
118
119   Handle(Graphic3d_ShaderProgram) myProgram;
120   Quantity_ColorRGBA myColor;
121   Aspect_TypeOfLine  myType;
122   Standard_ShortReal myWidth;
123
124 };
125
126 DEFINE_STANDARD_HANDLE(Graphic3d_AspectLine3d, Standard_Transient)
127
128 #endif // _Graphic3d_AspectLine3d_HeaderFile