protected virtual void Presenter_DataUpdated(object sender, DataPresenterEventArgs e)
 {
     // Only rebuild when not called from editor
     if (_fromEditor)
     {
         return;
     }
     _rebuildState |= RebuildState.Visualization;
     Rebuild();
 }
 protected virtual void SetSize(Vector3 size)
 {
     if (_size == size)
     {
         return;
     }
     _size = size;
     if (!_initialized)
     {
         return;
     }
     _rebuildState |= RebuildState.AxisSetup;
     Rebuild();
 }
 protected virtual void DestroyAxisViews()
 {
     if (_axisViews == null)
     {
         return;
     }
     foreach (var axisView in _axisViews)
     {
         if (axisView != null)
         {
             DestroyImmediate(axisView.gameObject);
         }
     }
     _axisViews     = null;
     _rebuildState |= RebuildState.AxisSetup;
 }
 /// <summary>
 /// Rebuilds the Visualization and Axes (if visisble)
 /// </summary>
 public virtual void Rebuild()
 {
     // If this was called from the editor, ignore lazyRebuild and
     // rebuild immediately, because update is never called.
     if (_fromEditor)
     {
         _rebuildState = RebuildState.All;
         Rebuild_Internal();
         return;
     }
     _rebuildState |= RebuildState.Visualization | RebuildState.Axis;
     // If lazyRebuild is true, don't rebuild immediately, but just remember that we need to rebuild
     // next time update is called.
     if (!_lazyRebuild)
     {
         Rebuild_Internal();
     }
 }
 protected virtual void Rebuild_Internal()
 {
     if (_rebuildState.HasFlag(RebuildState.Visualization))
     {
         RebuildVisualization();
     }
     if (_showAxes && _rebuildState.HasFlag(RebuildState.Axis))
     {
         RebuildAxes();
     }
     // if this was triggered by the editor,
     else if (_fromEditor && _axisViews != null)
     {
         DestroyAxisViews();
     }
     _rebuildState = RebuildState.Nothing;
     OnRebuildFinished();
 }