1 #ifndef COIN_SOOVERRIDEELEMENT_H
2 #define COIN_SOOVERRIDEELEMENT_H
3 
4 /**************************************************************************\
5  * Copyright (c) Kongsberg Oil & Gas Technologies AS
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are
10  * met:
11  *
12  * Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in the
17  * documentation and/or other materials provided with the distribution.
18  *
19  * Neither the name of the copyright holder nor the names of its
20  * contributors may be used to endorse or promote products derived from
21  * this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 \**************************************************************************/
35 
36 #include <Inventor/elements/SoSubElement.h>
37 #include <Inventor/system/inttypes.h>
38 
39 class SoType; // lame doxygen "fix"
40 
41 class COIN_DLL_API SoOverrideElement : public SoElement {
42   typedef SoElement inherited;
43 
44   SO_ELEMENT_HEADER(SoOverrideElement);
45 public:
46   static void initClass(void);
47 protected:
48   virtual ~SoOverrideElement();
49 
50 public:
51   enum FlagBits {
52     AMBIENT_COLOR     = 0x00000001,
53     COLOR_INDEX       = 0x00000002,
54     COMPLEXITY        = 0x00000004,
55     COMPLEXITY_TYPE   = 0x00000008,
56     CREASE_ANGLE      = 0x00000010,
57     DIFFUSE_COLOR     = 0x00000020,
58     DRAW_STYLE        = 0x00000040,
59     EMISSIVE_COLOR    = 0x00000080,
60     FONT_NAME         = 0x00000100,
61     FONT_SIZE         = 0x00000200,
62     LIGHT_MODEL       = 0x00000400,
63     LINE_PATTERN      = 0x00000800,
64     LINE_WIDTH        = 0x00001000,
65     MATERIAL_BINDING  = 0x00002000,
66     POINT_SIZE        = 0x00004000,
67     PICK_STYLE        = 0x00008000,
68     SHAPE_HINTS       = 0x00010000,
69     SHININESS         = 0x00020000,
70     SPECULAR_COLOR    = 0x00040000,
71     POLYGON_OFFSET    = 0x00080000,
72     TRANSPARENCY      = 0x00100000,
73     TRANSPARENCY_TYPE = 0x00200000,
74     NORMAL_VECTOR     = 0x00400000,
75     NORMAL_BINDING    = 0x00800000
76   };
77 
78   virtual void init(SoState * state);
79 
80   virtual void push(SoState * state);
81 
82   virtual SbBool matches(const SoElement * element) const;
83   virtual SoElement * copyMatchInfo(void) const;
84 
getFlags(SoState * const state)85   static uint32_t getFlags(SoState * const state) {
86     return (static_cast<const SoOverrideElement*>(getConstElement(state, classStackIndex)))->flags;
87   }
88 
89   static SbBool getAmbientColorOverride(SoState * const state);
90   static SbBool getColorIndexOverride(SoState * const state);
91   static SbBool getComplexityOverride(SoState * const state);
92   static SbBool getComplexityTypeOverride(SoState * const state);
93   static SbBool getCreaseAngleOverride(SoState * const state);
94   static SbBool getDiffuseColorOverride(SoState * const state);
95   static SbBool getDrawStyleOverride(SoState * const state);
96   static SbBool getEmissiveColorOverride(SoState * const state);
97   static SbBool getFontNameOverride(SoState * const state);
98   static SbBool getFontSizeOverride(SoState * const state);
99   static SbBool getLightModelOverride(SoState * const state);
100   static SbBool getLinePatternOverride(SoState * const state);
101   static SbBool getLineWidthOverride(SoState * const state);
102   static SbBool getMaterialBindingOverride(SoState * const state);
103   static SbBool getPickStyleOverride(SoState * const state);
104   static SbBool getPointSizeOverride(SoState * const state);
105   static SbBool getPolygonOffsetOverride(SoState * const state);
106   static SbBool getShapeHintsOverride(SoState * const state);
107   static SbBool getShininessOverride(SoState * const state);
108   static SbBool getSpecularColorOverride(SoState * const state);
109   static SbBool getTransparencyOverride(SoState * const state);
110   static SbBool getTransparencyTypeOverride(SoState * const state);
111   static SbBool getNormalVectorOverride(SoState * const state);
112   static SbBool getNormalBindingOverride(SoState * const state);
113 
114   static void setAmbientColorOverride(SoState * const state,
115                                       SoNode * const node,
116                                       const SbBool override);
117   static void setColorIndexOverride(SoState * const state,
118                                     SoNode * const node,
119                                     const SbBool override);
120   static void setComplexityOverride(SoState * const state,
121                                     SoNode * const node,
122                                     const SbBool override);
123   static void setComplexityTypeOverride(SoState * const state,
124                                         SoNode * const node,
125                                         const SbBool override);
126   static void setCreaseAngleOverride(SoState * const state,
127                                      SoNode * const node,
128                                      const SbBool override);
129   static void setDiffuseColorOverride(SoState * const state,
130                                       SoNode * const node,
131                                       const SbBool override);
132   static void setDrawStyleOverride(SoState * const state,
133                                    SoNode * const node,
134                                    const SbBool override);
135   static void setEmissiveColorOverride(SoState * const state,
136                                        SoNode * const node,
137                                        const SbBool override);
138   static void setFontNameOverride(SoState * const state,
139                                   SoNode * const node,
140                                   const SbBool override);
141   static void setFontSizeOverride(SoState * const state,
142                                   SoNode * const node,
143                                   const SbBool override);
144   static void setLightModelOverride(SoState * const state,
145                                     SoNode * const node,
146                                     const SbBool override);
147   static void setLinePatternOverride(SoState * const state,
148                                      SoNode * const node,
149                                      const SbBool override);
150   static void setLineWidthOverride(SoState * const state,
151                                    SoNode * const node,
152                                    const SbBool override);
153   static void setMaterialBindingOverride(SoState * const state,
154                                          SoNode * const node,
155                                          const SbBool override);
156   static void setPickStyleOverride(SoState * const state,
157                                    SoNode * const node,
158                                    const SbBool override);
159   static void setPointSizeOverride(SoState * const state,
160                                    SoNode * const node,
161                                    const SbBool override);
162   static void setPolygonOffsetOverride(SoState * const state,
163                                        SoNode * const node,
164                                        const SbBool override);
165   static void setShapeHintsOverride(SoState * const state,
166                                     SoNode * const node,
167                                     const SbBool override);
168   static void setShininessOverride(SoState * const state,
169                                    SoNode * const node,
170                                    const SbBool override);
171   static void setSpecularColorOverride(SoState * const state,
172                                        SoNode * const node,
173                                        const SbBool override);
174   static void setTransparencyOverride(SoState * const state,
175                                       SoNode * const node,
176                                       const SbBool override);
177   static void setTransparencyTypeOverride(SoState * const state,
178                                           SoNode * const node,
179                                           const SbBool override);
180   static void setNormalVectorOverride(SoState * const state,
181                                       SoNode * const node,
182                                       const SbBool override);
183   static void setNormalBindingOverride(SoState * const state,
184                                        SoNode * const node,
185                                        const SbBool override);
186 
187   virtual void print(FILE * file) const;
188 
189 private:
190 
191   uint32_t flags;
192 };
193 
194 #endif // !COIN_SOOVERRIDEELEMENT_H
195