//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield //Distributed under the terms of the GNU Library General Public License (LGPL) //as published by the Free Software Foundation. #ifndef OSG_SWITCH #define OSG_SWITCH 1 #include namespace osg { /** Switch is a Group node which allows switching between children. Typical uses would be for objects which might need to be rendered differently at different times, for instance a switch could be used to represent the different states of a traffic light. */ class SG_EXPORT Switch : public Group { public : Switch(); /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ Switch(const Switch&,const CopyOp& copyop=CopyOp::SHALLOW_COPY); META_Node(osg, Switch); virtual void traverse(NodeVisitor& nv); void setNewChildDefaultValue(bool value) { _newChildDefaultValue = value; } bool getNewChildDefaultValue() const { return _newChildDefaultValue; } virtual bool addChild( Node *child ); virtual bool addChild( Node *child, bool value ); virtual bool removeChild( Node *child ); void setValue(unsigned int pos,bool value); void setValue(const Node* child,bool value); bool getValue(unsigned int pos) const; bool getValue(const Node* child) const; /** * Special values for the Switch. Use these if you want to * turn on/off all child nodes. */ enum Values { /** All children turned on. */ ALL_CHILDREN_ON=-1, /** All children off. */ ALL_CHILDREN_OFF=-2, /** Multiple children turned on.*/ MULTIPLE_CHILDREN_ON=-3 }; /** * Selects the active child Node or enables a special * SwitchType mode. * @param value the number of the active child * (first child == number 0) or SwitchType. Invalid values * will be ignored. */ void setValue(int value); int getValue() const; typedef std::vector ValueList; const ValueList& getValueList() const { return _values; } protected : virtual ~Switch() {} // this is effectively a bit mask. bool _newChildDefaultValue; ValueList _values; }; } #endif