public static void RegisterVisualizer(Type forType, ICustomVisualizer visualizer, bool registerDerivedTypes = false)
 {
     Ensure.ArgumentNotNull(visualizer, "visualizer");
     if (VisualizationManager._visualizerLookup == null)
     {
         VisualizationManager._visualizerLookup = new Dictionary <Type, ICustomVisualizer>();
     }
     if (!(forType.IsAbstract | registerDerivedTypes))
     {
         if (VisualizationManager._visualizerLookup.ContainsKey(forType))
         {
             Debug.LogWarning(string.Format("A visualizer for type {0} has already been registered, skipping {1}.", forType.Name, visualizer.GetType().Name));
             return;
         }
         VisualizationManager._visualizerLookup.Add(forType, visualizer);
     }
     else
     {
         foreach (Type derived in VisualizationManager.GetDerived(forType))
         {
             if (!VisualizationManager._visualizerLookup.ContainsKey(derived))
             {
                 VisualizationManager._visualizerLookup.Add(derived, visualizer);
             }
             else
             {
                 Debug.LogWarning(string.Format("A visualizer for type {0} has already been registered, skipping {1}.", derived.Name, visualizer.GetType().Name));
             }
         }
     }
 }
 public static void UnregisterVisualizer(Type forType, bool registeredDerivedTypes = false)
 {
     if (VisualizationManager._visualizerLookup == null)
     {
         return;
     }
     if (!(forType.IsAbstract | registeredDerivedTypes))
     {
         VisualizationManager._visualizerLookup.Remove(forType);
     }
     else
     {
         foreach (Type derived in VisualizationManager.GetDerived(forType))
         {
             VisualizationManager._visualizerLookup.Remove(derived);
         }
     }
 }