Switch is a Grouping node that only renders one (or zero) child at a time. Switch can contain most nodes. (Contained nodes are now called ‘children’ rather than ‘choice’, for consistent naming among all GroupingNodeType nodes.) All child choices continue to receive and send events regardless of whichChoice is active.

The Switch node belongs to the Grouping component and requires at least level 2, its default container field is children. It is available since VRML 2.0 and from X3D version 3.0 or higher.


+ X3DNode
  + X3DChildNode
    + X3DGroupingNode
      + Switch


SFNode [in, out] metadata NULL [X3DMetadataObject]

Information about this node can be contained in a MetadataBoolean, MetadataDouble, MetadataFloat, MetadataInteger, MetadataString or MetadataSet node.


SFInt32 [in, out] whichChoice -1 [-1,∞)

Index of active child choice, counting from 0.


  • Default value whichChoice= -1 means no selection (and no rendering), whichChoice=0 means initial child, whichChoice=1 means second child, etc.

SFBool [in, out] visible TRUE

Whether or not renderable content within this node is visually displayed.


  • The visible field has no effect on animation behaviors, event passing or other non-visual characteristics.
  • Content must be visible to be collidable and to be pickable.

SFBool [in, out] bboxDisplay FALSE

Whether to display bounding box for associated geometry, aligned with world coordinates.


  • The bounding box is displayed regardless of whether contained content is visible.

SFVec3f [ ] bboxSize -1 -1 -1 [0,∞) or −1 −1 −1

Bounding box size is usually omitted, and can easily be calculated automatically by an X3D player at scene-loading time with minimal computational cost. Bounding box size can also be defined as an optional authoring hint that suggests an optimization or constraint.


  • Can be useful for collision computations or inverse-kinematics (IK) engines.
  • Precomputation and inclusion of bounding box information can speed up the initialization of large detailed models, with a corresponding cost of increased file size.
  • X3D Architecture, 10.2.2 Bounding boxes /Part01/components/grouping.html#BoundingBoxes
  • X3D Architecture, 10.3.1 X3DBoundedObject /Part01/components/grouping.html#X3DBoundedObject

SFVec3f [ ] bboxCenter 0 0 0 (-∞,∞)

Bounding box center accompanies bboxSize and provides an optional hint for bounding box position offset from origin of local coordinate system.


MFNode [in] addChildren

Input field addChildren.

MFNode [in] removeChildren

Input field removeChildren.

MFNode [in, out] children [ ] [X3DChildNode]

Grouping nodes contain an ordered list of children nodes.


  • Each grouping node defines a coordinate space for its children, relative to the coordinate space of its parent node. Thus transformations accumulate down the scene graph hierarchy.
  • InputOnly MFNode addChildren field can append new X3DChildNode nodes via a ROUTE connection, duplicate input nodes (i.e. matching DEF, USE values) are ignored.
  • InputOnly MFNode removeChildren field can remove nodes from the children list, unrecognized input nodes (i.e. nonmatching DEF, USE values) are ignored.
  • X3D Architecture 10.2.1 Grouping and children node types /Part01/components/grouping.html#GroupingAndChildrenNodes



  • Insert a Shape node before adding geometry or Appearance.
  • Authors can temporarily hide test geometry under an unselected child of a Switch. This is a good alternative to “commenting out” nodes.
  • GeoViewpoint OrthoViewpoint and Viewpoint share the same binding stack, so no more than one of these nodes can be bound and active at a given time.
  • Contained nodes must have type X3DChildNode, such as Group or Transform or Shape.



See Also

This post is licensed under CC BY 4.0 by the author.