/// <summary>
 /// Loads all object templates from the "Editor/Templates" directory
 /// </summary>
 public ObjectEditMode( RayCastOptions pickOptions )
 {
     m_PickOptions = pickOptions;
     m_Templates = BuildObjectTemplates( );
     if ( m_Templates.Count > 0 )
     {
         m_Template = m_Templates[ 0 ];
     }
 }
        /// <summary>
        /// Creates a pick ray, and returns the first intersection in the scene
        /// </summary>
        public ILineIntersection FirstPick( int cursorX, int cursorY, RayCastOptions options )
        {
            Viewer viewer = GetViewerUnderCursor( cursorX, cursorY );
            if ( ( viewer == null ) || ( viewer.Camera == null ) )
            {
                return null;
            }
            if ( viewer.Camera is ICamera3 )
            {
                IRayCastService rayCaster = EditorState.Instance.CurrentScene.GetService< IRayCastService >( );
                if ( rayCaster == null )
                {
                    return null;
                }

                Ray3 ray = ( ( ICamera3 )viewer.Camera ).PickRay( cursorX, cursorY );
                Line3Intersection intersection = rayCaster.GetFirstIntersection( ray, options );
                return intersection;
            }

            return null;
        }
 /// <summary>
 /// Sets up this action
 /// </summary>
 /// <param name="options">Pick raycast options</param>
 public MoveAction( RayCastOptions options )
 {
     m_PickOptions = options;
 }
 /// <summary>
 /// Binds the edit mode to a control and viewer
 /// </summary>
 /// <param name="actionButton">The mouse button that this edit mode listens out for</param>
 /// <param name="pickOptions">Pick raycast options</param>
 public SelectEditMode( MouseButtons actionButton, RayCastOptions pickOptions )
 {
     m_ActionButton = actionButton;
     m_PickOptions = pickOptions;
 }