/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #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); bool getValue(unsigned int pos) const; void setChildValue(const Node* child,bool value); bool getChildValue(const Node* child) const; /** Set all the children off (false), and set the new default child value to off (false).*/ bool setAllChildrenOff(); /** Set all the children on (true), and set the new default child value to on (true).*/ bool setAllChildrenOn(); /** Set a single child to be on, switch off all other children.*/ bool setSingleChildOn(unsigned int pos); #ifdef USE_DEPRECTATED_API /** * 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; #endif typedef std::vector ValueList; const ValueList& getValueList() const { return _values; } protected : virtual ~Switch() {} // this is effectively a bit mask. bool _newChildDefaultValue; ValueList _values; }; } #endif