# Namespace: sceneObjs

## sceneObjs

The namespace for all the classes representing objects that can be added to the scene. Scene objects include optical elements (e.g. mirrors, lenses), detectors, decorations (e.g. rulers, text labels), and special objects (e.g. handles, cropboxes).

Each class represents a type of objects, and defines the rendering of the object, the options in the object bar when selected, how the mouse interacts with the object, and how the object interacts with light rays. The base class for all scene objects is `BaseSceneObj`, which provides common properties and methods for all scene objects. Child base classes are used for common optical interactions: `BaseFilter` (for mirrors and blockes), `BaseGlass`, and `BaseGrinGlass`. Mixins are used for common user interactions based on shapes: `LineObjMixin` and `CircleObjMixin`. The directory structure in `src/simulator/js/sceneObjs` is organized according to the toolbars in the app, which is not always the same as the class inheritance structure. For example, `IdealLens` is categorized under "Glass" in the app, but is not a subclass of `BaseGlass`.

In the Ray Optics Simulator web app, a single instance of `Scene` is used. The scene objects created by the users are stored in the `objs` property of that instance, each a instance of a class defined in this namespace.

The classes can also be used by other projects, including those running in a standalone environment (e.g. Node.js).

Source:
  - sceneObjs.js, line 21

### Classes

AngleSource
Aperture
ArcMirror
Beam
BeamSplitter
Blocker
CircleBlocker
CircleGlass
CircleGrinGlass
CropBox
CustomGlass
CustomMirror
Detector
DiffractionGrating
Drawing
Glass
GrinGlass
Handle
IdealLens
IdealMirror
LineArrow
Mirror
ModuleObj
ParabolicMirror
PlaneGlass
PointSource
Protractor
Ruler
SingleRay
SphericalLens
TextLabel