/**
   * @constructor
   */
  function LineExplorationMode( selectedModeProperty ) {
    AbstractExplorationMode.call( this, selectedModeProperty, MODE_NAME );

    // Create the reference, compare, continuous, and discrete objects.
    this.compareObject = new LineModel( COMPARE_LINE_LENGTH, new Vector2( -0.5, 0.5 ), EstimationConstants.COMPARISON_OBJECT_COLOR, false );
    this.continuousSizableObject = new LineModel( 2, new Vector2( -0.5, 0.4 ), EstimationConstants.REFERENCE_OBJECT_COLOR, false );
    this.referenceObject = new LineModel( 0.1, new Vector2( -2, 1.0 ), EstimationConstants.REFERENCE_OBJECT_COLOR, false );
    this.discreteObjectList.push( new LineModel( 2, new Vector2( -0.5, 0.4 ), EstimationConstants.REFERENCE_OBJECT_COLOR, false ) );
    this.setReferenceObjectSize( INITIAL_REFERENCE_LINE_LENGTH );

    // Complete initialization by hooking up visibility updates in the parent class.
    this.hookUpVisibilityUpdates();

    // Maintain a short history of reference object sizes so unique ones can be chosen.
    this.previousReferenceObjectSize = INITIAL_REFERENCE_LINE_LENGTH;
  }
  /**
   * @constructor
   */
  function CubeExplorationMode( selectedModeProperty ) {
    AbstractExplorationMode.call( this, selectedModeProperty, MODE_NAME );
    var self = this;

    // Create the reference, compare, continuous, and discrete objects.
    var compareCubePosition = new Vector2( 0, -0.2 );
    this.compareObject = new CubeModel( COMPARE_CUBE_SIZE, compareCubePosition, new Color( EstimationConstants.COMPARISON_OBJECT_COLOR ).setAlpha( 0.5 ), false, false );
    this.continuousSizableObject = new CubeModel( new Dimension3( 0.1, 0.1, 0.1 ), compareCubePosition, EstimationConstants.REFERENCE_OBJECT_COLOR, false, false );
    this.referenceObject = new CubeModel( INITIAL_REFERENCE_OBJECT_SIZE, new Vector2( -2, 0 ), EstimationConstants.REFERENCE_OBJECT_COLOR, false, false );
    _.times( MAX_DISCRETE_CUBES, function() {
      // Initial size is arbitrary, will be sized as needed.
      self.discreteObjectList.push( new CubeModel( new Dimension3( 0.1, 0.1, 0.1 ), Vector2.ZERO, EstimationConstants.REFERENCE_OBJECT_COLOR, true, false ) );
    } );
    this.setReferenceObjectSize( INITIAL_REFERENCE_OBJECT_SIZE );
    this.numVisibleDiscreteCubes = 0;

    // Complete initialization by hooking up visibility updates in the parent class.
    this.hookUpVisibilityUpdates();

    // Maintain a short history of reference object sizes so unique ones can be chosen.
    this.previousReferenceObjectSize = INITIAL_REFERENCE_OBJECT_SIZE;
  }