Open Inventor Release 2023.2.3
 
Loading...
Searching...
No Matches
SoOverrideElement.h
Go to the documentation of this file.
1/*=======================================================================
2 * Copyright 1991-1996, Silicon Graphics, Inc.
3 * ALL RIGHTS RESERVED
4 *
5 * UNPUBLISHED -- Rights reserved under the copyright laws of the United
6 * States. Use of a copyright notice is precautionary only and does not
7 * imply publication or disclosure.
8 *
9 * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
10 * Use, duplication or disclosure by the Government is subject to restrictions
11 * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
12 * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
13 * in similar or successor clauses in the FAR, or the DOD or NASA FAR
14 * Supplement. Contractor/manufacturer is Silicon Graphics, Inc.,
15 * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
16 *
17 * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
18 * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
19 * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
20 * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
21 * GRAPHICS, INC.
22**=======================================================================*/
23/*=======================================================================
24** Author : Roger Chickering (MMM yyyy)
25** Modified by : Gavin Bell (MMM yyyy)
26**=======================================================================*/
27/*=======================================================================
28 *** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ***
29 *** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ***
30 *** ***
31 *** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ***
32 *** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ***
33 *** WRITTEN AUTHORIZATION OF FEI S.A.S. ***
34 *** ***
35 *** RESTRICTED RIGHTS LEGEND ***
36 *** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ***
37 *** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ***
38 *** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ***
39 *** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ***
40 *** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ***
41 *** ***
42 *** COPYRIGHT (C) 1996-2017 BY FEI S.A.S, ***
43 *** BORDEAUX, FRANCE ***
44 *** ALL RIGHTS RESERVED ***
45**=======================================================================*/
46/*=======================================================================
47** Modified by : VSG (MMM YYYY)
48**=======================================================================*/
49
50
51#ifndef _SO_OVERRIDE_ELEMENT
52#define _SO_OVERRIDE_ELEMENT
53
55#include <Inventor/STL/bitset>
56
57//
58// Macro to implement get*Override inline methods. There are a lot of
59// these methods, each of which has an identical implementation and
60// which needs to be inline to keep traversal fast.
61#define SO_GET_OVERRIDE(flag) \
62 const SoOverrideElement *elt; \
63 elt = SoElement::getConstElement<SoOverrideElement>(state); \
64 return (elt->m_flags.test(flag));
65
66//
67// Implement set*Override methods.
68//
69#define SO_SET_OVERRIDE(flag) \
70 SoOverrideElement *elt; \
71 elt = SoElement::getElement<SoOverrideElement>(state); \
72 if (override) \
73 elt->m_flags.set(flag); \
74 else \
75 elt->m_flags.reset(flag);
76
93
95
96 public:
97
102 virtual void push(SoState *state);
103
104 //
105 // "get" methods for each element which can be overridden.
106 //
107
112 { SO_GET_OVERRIDE(AMBIENT_COLOR); }
113
118 { SO_GET_OVERRIDE(COLOR_INDEX); }
119
124 { SO_GET_OVERRIDE(COMPLEXITY); }
125
130 { SO_GET_OVERRIDE(COMPLEXITY_TYPE); }
131
136 { SO_GET_OVERRIDE(CREASE_ANGLE); }
137
142 { SO_GET_OVERRIDE(NEIGHBOR_TOLERANCE); }
143
148 { SO_GET_OVERRIDE(DIFFUSE_COLOR); }
149
154 { SO_GET_OVERRIDE(DRAW_STYLE); }
155
160 { SO_GET_OVERRIDE(EMISSIVE_COLOR); }
161
166 { SO_GET_OVERRIDE(FONT_NAME); }
167
172 { SO_GET_OVERRIDE(FONT_SIZE); }
173
178 { SO_GET_OVERRIDE(FONT_RENDERSTYLE); }
179
184 { SO_GET_OVERRIDE(LIGHT_MODEL); }
185
190 { SO_GET_OVERRIDE(LINE_PATTERN); }
191
196 { SO_GET_OVERRIDE(LINE_WIDTH); }
197
202 { SO_GET_OVERRIDE(MATERIAL_BINDING); }
203
208 { SO_GET_OVERRIDE(POINT_SIZE); }
209
214 { SO_GET_OVERRIDE(PICK_STYLE); }
215
220 { SO_GET_OVERRIDE(SHAPE_HINTS); }
221
226 { SO_GET_OVERRIDE(SHININESS); }
227
232 { SO_GET_OVERRIDE(SPECULAR_COLOR); }
233
238 { SO_GET_OVERRIDE(TRANSPARENCY); }
239
244 { SO_GET_OVERRIDE(TRANSPARENCY_TYPE); }
245
250 { SO_GET_OVERRIDE(ENVIRONMENT); }
251
256 { SO_GET_OVERRIDE(POLYGON_OFFSET); }
257
262 { SO_GET_OVERRIDE(PATTERN_OFFSET); }
263
268 { SO_GET_OVERRIDE(FULL_SCENE_ANTIALIASING); }
269
274 { SO_GET_OVERRIDE(DEPTH_BUFFER_RANGE); }
275
280 { SO_GET_OVERRIDE(DEPTH_BUFFER_FUNCTION); }
281
286 { SO_GET_OVERRIDE(BBOX_TYPE); }
287
288
289 //
290 // "set" methods for each element which can be overridden.
291 //
292
296 static void setAmbientColorOverride(SoState *state, SoNode *, SbBool override)
297 { SO_SET_OVERRIDE(AMBIENT_COLOR); }
298
302 static void setColorIndexOverride(SoState *state, SoNode *, SbBool override)
303 { SO_SET_OVERRIDE(COLOR_INDEX); }
304
308 static void setComplexityOverride(SoState *state, SoNode *, SbBool override)
309 { SO_SET_OVERRIDE(COMPLEXITY); }
310
314 static void setComplexityTypeOverride(SoState *state, SoNode *, SbBool override)
315 { SO_SET_OVERRIDE(COMPLEXITY_TYPE); }
316
320 static void setCreaseAngleOverride(SoState *state, SoNode *, SbBool override)
321 { SO_SET_OVERRIDE(CREASE_ANGLE); }
322
326 static void setNeighborToleranceOverride(SoState *state, SoNode *, SbBool override)
327 { SO_SET_OVERRIDE(NEIGHBOR_TOLERANCE); }
328
332 static void setDiffuseColorOverride(SoState *state, SoNode *, SbBool override);
333
337 static void setDrawStyleOverride(SoState *state, SoNode *, SbBool override)
338 { SO_SET_OVERRIDE(DRAW_STYLE); }
339
343 static void setEmissiveColorOverride(SoState *state, SoNode *, SbBool override)
344 { SO_SET_OVERRIDE(EMISSIVE_COLOR); }
345
349 static void setFontNameOverride(SoState *state, SoNode *, SbBool override)
350 { SO_SET_OVERRIDE(FONT_NAME); }
351
355 static void setFontSizeOverride(SoState *state, SoNode *, SbBool override)
356 { SO_SET_OVERRIDE(FONT_SIZE); }
357
361 static void setFontRenderStyleOverride(SoState *state, SoNode *, SbBool override)
362 { SO_SET_OVERRIDE(FONT_RENDERSTYLE); }
363
367 static void setLightModelOverride(SoState *state, SoNode *, SbBool override)
368 { SO_SET_OVERRIDE(LIGHT_MODEL); }
369
373 static void setLinePatternOverride(SoState *state, SoNode *, SbBool override)
374 { SO_SET_OVERRIDE(LINE_PATTERN); }
375
379 static void setLineWidthOverride(SoState *state, SoNode *, SbBool override)
380 { SO_SET_OVERRIDE(LINE_WIDTH); }
381
385 static void setMaterialBindingOverride(SoState *state, SoNode *, SbBool override);
386
390 static void setPickStyleOverride(SoState *state, SoNode *, SbBool override)
391 { SO_SET_OVERRIDE(PICK_STYLE); }
392
396 static void setPointSizeOverride(SoState *state, SoNode *, SbBool override)
397 { SO_SET_OVERRIDE(POINT_SIZE); }
398
402 static void setShapeHintsOverride(SoState *state, SoNode *, SbBool override)
403 { SO_SET_OVERRIDE(SHAPE_HINTS); }
404
408 static void setShininessOverride(SoState *state, SoNode *, SbBool override)
409 { SO_SET_OVERRIDE(SHININESS); }
410
414 static void setSpecularColorOverride(SoState *state, SoNode *, SbBool override)
415 { SO_SET_OVERRIDE(SPECULAR_COLOR); }
416
420 static void setTransparencyOverride(SoState *state, SoNode *, SbBool override);
421
425 static void setTransparencyTypeOverride(SoState *state, SoNode *, SbBool override)
426 { SO_SET_OVERRIDE(TRANSPARENCY_TYPE); }
427
431 static void setEnvironmentOverride(SoState *state, SoNode *, SbBool override)
432 { SO_SET_OVERRIDE(ENVIRONMENT); }
433
437 static void setPolygonOffsetOverride(SoState *state, SoNode *, SbBool override)
438 { SO_SET_OVERRIDE(POLYGON_OFFSET); }
439
443 static void setPatternOverride(SoState *state, SoNode *, SbBool override)
444 { SO_SET_OVERRIDE(PATTERN_OFFSET); }
445
449 static void setFullSceneAntialiasingOverride(SoState *state, SoNode *, SbBool override)
450 { SO_SET_OVERRIDE(FULL_SCENE_ANTIALIASING); }
451
455 static void setDepthBufferRangeOverride(SoState *state, SoNode *, SbBool override)
456 { SO_SET_OVERRIDE(DEPTH_BUFFER_RANGE); }
457
461 static void setDepthBufferFunctionOverride(SoState *state, SoNode *, SbBool override)
462 { SO_SET_OVERRIDE(DEPTH_BUFFER_FUNCTION); }
463
467 static void setBBoxTypeOverride(SoState *state, SoNode *, SbBool override)
468 { SO_SET_OVERRIDE(BBOX_TYPE); }
469
473 virtual void print(FILE *fp) const;
474
475private:
476
478 virtual void init(SoState *state);
479
483 virtual SbBool matches(const SoElement* elt) const;
484
486 virtual SoElement* copyMatchInfo() const;
487
488 private:
489 enum Defined_Override_Bit {
490 AMBIENT_COLOR= 0,
491 COLOR_INDEX,
492 COMPLEXITY,
493 COMPLEXITY_TYPE,
494 CREASE_ANGLE,
495 DIFFUSE_COLOR,
496 TRANSPARENCY,
497 DRAW_STYLE,
498 EMISSIVE_COLOR,
499 FONT_NAME,
500 FONT_SIZE,
501 LIGHT_MODEL,
502 LINE_PATTERN,
503 LINE_WIDTH,
504 MATERIAL_BINDING,
505 POINT_SIZE,
506 PICK_STYLE,
507 PICK_METHOD,
508 SHAPE_HINTS,
509 SHININESS,
510 SPECULAR_COLOR,
511 POLYGON_OFFSET,
512 PATTERN_OFFSET,
513 FONT_RENDERSTYLE,
514 FULL_SCENE_ANTIALIASING,
515 TRANSPARENCY_TYPE,
516 ENVIRONMENT,
517 DEPTH_BUFFER_RANGE,
518 DEPTH_BUFFER_FUNCTION,
519 BBOX_TYPE,
520 NEIGHBOR_TOLERANCE,
521 TEXTPRP_ANTIALIASING_FACTOR,
522 TEXTPRP_ALIGNEMENT_H,
523 TEXTPRP_ALIGNEMENT_V,
524 TEXTPRP_BACKFRAMELINE,
525 TEXTPRP_ORIENTATION,
526 TEXTPRP_KERNING,
527 TEXTPRP_TEXTUREQUALITY,
528 TEXTPRP_MARGIN,
529 TEXTPRP_STYLE,
530 TEXTPRP_STYLECOLORS,
531 TEXTPRP_STYLECOLORS_USE_CURRENT_MATERIAL,
532 TEXTPRP_CHARACTER_SPACING,
533 LAST_OVERRIDE_BIT,
534 };
535
536 typedef std::bitset<LAST_OVERRIDE_BIT> BitSetType;
537
538 // Initializes the SoOverrideElement class
539 static void initClass();
540 static void exitClass();
541
543 static void setOverrideFlag(SoState* state, SoNode* SO_UNUSED_PARAM(node), Defined_Override_Bit flag, bool override)
544 {
545 SO_SET_OVERRIDE(flag);
546 }
547
548 // Compares input SoOverrideElement with this object
549 // possibly using testBitMask to filter some bits
550 // returns true if all bits are set in both SoOverrideElement
551 bool compareWithMask( const SoOverrideElement& in, const BitSetType* testBitMask = NULL ) const;
552
553 // helper class to test several bit of the bitset without
554 // getting the State element more than once
555 class BitSetGetter
556 {
557 public:
558 explicit BitSetGetter( SoState* state )
559 : m_BufferedFlags( SoElement::getConstElement<SoOverrideElement>( state )->m_flags )
560 {
561 }
562
563 virtual ~BitSetGetter()
564 {
565 }
566
567 // this is not requiring the getConstElement that can be costly
568 inline bool testBit( int i )
569 {
570 return m_BufferedFlags.test(i);
571 }
572
573 private:
574 BitSetGetter & operator=( const BitSetGetter & ) { return *this; }
575 const BitSetType& m_BufferedFlags;
576 };
577
578 // helper class to test several bit of the bitset without
579 // getting the State element more than once
580 class BitSetSetter
581 {
582 public:
583 explicit BitSetSetter( SoState* state )
584 : m_BufferedFlags( SoElement::getElement<SoOverrideElement>( state )->m_flags )
585 {
586 }
587
588 virtual ~BitSetSetter()
589 {
590 }
591
592 // this is not requiring the getConstElement that can be costly
593 inline void setBit( size_t i, bool value )
594 {
595 m_BufferedFlags.set(i, value);
596 }
597
598 private:
599 BitSetSetter & operator=( const BitSetSetter & );
600 BitSetType& m_BufferedFlags;
601 };
602
604 static void resetOverrideFlag(SoState* state);
605
606 private:
607 // Used by ::print method
608 void pFlag(FILE *, int) const;
609
610 BitSetType m_flags;
611
612};
613
614#endif /* _SO_OVERRIDE_ELEMENT */
615
#define SoEXTENDER_Documented
#define SO_GET_OVERRIDE(flag)
#define SO_SET_OVERRIDE(flag)
static void init()
#define SO_ELEMENT_HEADER(className)
valueRef operator=(valueRef newValue)
Sets this field to newValue.
Definition SoSubField.h:242
Abstract base class for all state elements.
Definition SoElement.h:102
Abstract base class for all database nodes.
Definition SoNode.h:145
Stores a flag for each type of element which can be overridden.
static SbBool getMaterialBindingOverride(SoState *state)
Returns TRUE if SoMaterialBindingElement is overridden.
static SbBool getPatternOverride(SoState *state)
Returns TRUE if SoPatternElement is overriden.
static SbBool getShininessOverride(SoState *state)
Returns TRUE if SoShininessElement is overridden.
static void setLinePatternOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoLinePatternElement.
static void setFullSceneAntialiasingOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoFullSceneAntialiasingElement.
static void setShininessOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoShininessElement.
static void setComplexityTypeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoComplexityTypeElement.
static void setPatternOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoPatternElement.
static void setLightModelOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoLightModelElement.
static SbBool getDrawStyleOverride(SoState *state)
Returns TRUE if SoDrawStyleElement is overridden.
static SbBool getTransparencyTypeOverride(SoState *state)
Returns TRUE if SoTransparencyTypeElement is overridden.
static void setMaterialBindingOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoMaterialBindingElement.
static void setColorIndexOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoColorIndexElement.
static void setTransparencyOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoTransparencyElement.
static SbBool getComplexityOverride(SoState *state)
Returns TRUE if SoComplexityElement is overridden.
static void setDiffuseColorOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoDiffuseColorElement.
static SbBool getNeighborToleranceOverride(SoState *state)
Returns TRUE if SoNeighborToleranceElement is overridden.
static SbBool getTransparencyOverride(SoState *state)
Returns TRUE if SoTransparencyElement is overridden.
static SbBool getFontSizeOverride(SoState *state)
Returns TRUE if SoFontSizeElement is overridden.
static void setLineWidthOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoLineWidthElement.
static SbBool getComplexityTypeOverride(SoState *state)
Returns TRUE if SoComplexityTypeElement is overridden.
static void setAmbientColorOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoAmbientColorElement.
static SbBool getLinePatternOverride(SoState *state)
Returns TRUE if SoLinePatternElement is overridden.
static SbBool getLightModelOverride(SoState *state)
Returns TRUE if SoLightModelElement is overridden.
static SbBool getCreaseAngleOverride(SoState *state)
Returns TRUE if SoCreaseAngleElement is overridden.
static void setComplexityOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoComplexityElement.
static SbBool getDepthBufferRangeOverride(SoState *state)
Returns TRUE if SoDepthBuffer::range is overridden.
static SbBool getPolygonOffsetOverride(SoState *state)
Returns TRUE if SoPolygonOffsetElement is overridden.
static void setEnvironmentOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoEnvironmentElement.
static void setSpecularColorOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoSpecularColorElement.
static SbBool getPointSizeOverride(SoState *state)
Returns TRUE if SoPointSizeElement is overridden.
virtual void push(SoState *state)
Overrides push() method to copy values from next instance in the stack, and set up cache dependencies...
static void setNeighborToleranceOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoNeighborToleranceElement.
static void setFontNameOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoFontNameElement.
static void setEmissiveColorOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoEmissiveColorElement.
static void setFontRenderStyleOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoFontRenderStyleElement.
static SbBool getSpecularColorOverride(SoState *state)
Returns TRUE if SoSpecularColorElement is overridden.
static void setFontSizeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoFontSizeElement.
static SbBool getPickStyleOverride(SoState *state)
Returns TRUE if SoPickStyleElement is overridden.
static SbBool getDepthBufferFunctionOverride(SoState *state)
Returns TRUE if SoDepthBuffer::function is overridden.
static SbBool getEmissiveColorOverride(SoState *state)
Returns TRUE if SoEmissiveColorElement is overridden.
static SbBool getFontRenderStyleOverride(SoState *state)
Returns TRUE if SoFontRenderStyleElement is overridden.
static void setDepthBufferRangeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoDepthBuffer::range.
static SbBool getColorIndexOverride(SoState *state)
Returns TRUE if SoColorIndexElement is overridden.
static SbBool getBBoxTypeOverride(SoState *state)
Returns TRUE if SoComplexityType::bboxType is overridden.
static SbBool getFontNameOverride(SoState *state)
Returns TRUE if SoFontNameElement is overridden.
static SbBool getEnvironmentOverride(SoState *state)
Returns TRUE if SoEnvironmentElement is overridden.
static SbBool getShapeHintsOverride(SoState *state)
Returns TRUE if SoShapeHintsElement is overridden.
static void setCreaseAngleOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoCreaseAngleElement.
static void setPickStyleOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoPickStyleElement.
static void setPolygonOffsetOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoPolygonOffsetElement.
static void setDepthBufferFunctionOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoDepthBuffer::function.
static void setPointSizeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoPointSizeElement.
static SbBool getFullSceneAntialiasingOverride(SoState *state)
Returns TRUE if SoFullSceneAntialiasingElement is overridden.
static SbBool getAmbientColorOverride(SoState *state)
Returns TRUE if SoAmbientColorElement is overridden.
static SbBool getLineWidthOverride(SoState *state)
Returns TRUE if SoLineWidthElement is overridden.
virtual void print(FILE *fp) const
Prints element (for debugging).
static SbBool getDiffuseColorOverride(SoState *state)
Returns TRUE if SoDiffuseColorElement is overridden.
static void setShapeHintsOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoShapeHintsElement.
static void setDrawStyleOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoDrawStyleElement.
static void setBBoxTypeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoComplexity::bboxType.
static void setTransparencyTypeOverride(SoState *state, SoNode *, SbBool override)
Set override flag for SoTransparencyTypeElement.
Traversal state.
Definition SoState.h:74
int SbBool
Boolean type.
Definition SbBase.h:87