Example #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ApplySampleBehavior"/> class.
 /// </summary>
 public ApplySampleBehavior()
 {
     m_painter        = new SeeingSharpPanelPainter();
     m_painter.Camera = new PerspectiveCamera3D();
     m_painter.RenderLoop.SceneComponents.Add(
         new FreeMovingCameraComponent());
 }
Example #2
0
        /// <summary>
        /// Starts input handling.
        /// </summary>
        /// <param name="viewObject">The view object (e. g. Direct3D11Canvas).</param>
        public void Start(IInputEnabledView viewObject)
        {
            m_painter = viewObject as SeeingSharpPanelPainter;
            if (m_painter == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            m_viewInterface = m_painter as IInputEnabledView;
            if (m_viewInterface == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            m_renderLoop = m_viewInterface.RenderLoop;
            if (m_renderLoop == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            m_dispatcher = m_painter.Disptacher;
            if (m_dispatcher == null)
            {
                throw new ArgumentException("Unable to get CoreDisptacher from target panel!");
            }

            // Deligate start logic to UI thread
            m_dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                // Register all events
                m_painter.TargetPanel.PointerExited       += OnTargetPanel_PointerExited;
                m_painter.TargetPanel.PointerEntered      += OnTargetPanel_PointerEntered;
                m_painter.TargetPanel.PointerWheelChanged += OnTargetPanel_PointerWheelChanged;
                m_painter.TargetPanel.PointerPressed      += OnTargetPanel_PointerPressed;
                m_painter.TargetPanel.PointerReleased     += OnTargetPanel_PointerReleased;
                m_painter.TargetPanel.PointerMoved        += OnTargetPanel_PointerMoved;

                // Create the dummy button for focus management
                //  see posts on: https://social.msdn.microsoft.com/Forums/en-US/54e4820d-d782-45d9-a2b1-4e3a13340788/set-focus-on-swapchainpanel-control?forum=winappswithcsharp
                m_dummyButtonForFocus                     = new Button();
                m_dummyButtonForFocus.Content             = "Button";
                m_dummyButtonForFocus.Width               = 0;
                m_dummyButtonForFocus.Height              = 0;
                m_dummyButtonForFocus.HorizontalAlignment = HorizontalAlignment.Left;
                m_dummyButtonForFocus.VerticalAlignment   = VerticalAlignment.Top;
                m_dummyButtonForFocus.KeyDown            += OnDummyButtonForFocus_KeyDown;
                m_dummyButtonForFocus.KeyUp              += OnDummyButtonForFocus_KeyUp;
                m_dummyButtonForFocus.LostFocus          += OnDummyButtonForFocus_LostFocus;
                m_dummyButtonForFocus.GotFocus           += OnDummyButtonForFocus_GotFocus;
                m_painter.TargetPanel.Children.Add(m_dummyButtonForFocus);

                m_coreWindow          = CoreWindow.GetForCurrentThread();
                m_coreWindow.KeyDown += OnCoreWindow_KeyDown;
                m_coreWindow.KeyUp   += OnCoreWindow_KeyUp;

                // Set focus on the target
                m_dummyButtonForFocus.Focus(FocusState.Programmatic);
            }).FireAndForget();
        }
        private void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null) { return; }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;
        }
Example #4
0
        private async void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null)
            {
                return;
            }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_panelPainter.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Define a BACKGROUND layer and configure layer IDs
                //  => Ensures correct render order
                SceneLayer bgLayer = manipulator.AddLayer("BACKGROUND");
                manipulator.SetLayerOrderID(bgLayer, 0);
                manipulator.SetLayerOrderID(Scene.DEFAULT_LAYER_NAME, 1);

                // Add the background texture painter to the BACKGROUND layer
                var resBackgroundTexture = manipulator.AddTexture(
                    new AssemblyResourceUriBuilder(
                        "SeeingSharp.Tutorials.Introduction03",
                        true,
                        "Assets/Textures/Background.png"));
                manipulator.Add(new FullscreenTextureObject(resBackgroundTexture), bgLayer.Name);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object and add it to the scene
                //  => The DEFAULT layer is used by default
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = m_panelPainter.Camera;

            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
        private void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null)
            {
                return;
            }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;
        }
        private async void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null) { return; }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_panelPainter.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Define a BACKGROUND layer and configure layer IDs 
                //  => Ensures correct render order
                SceneLayer bgLayer = manipulator.AddLayer("BACKGROUND");
                manipulator.SetLayerOrderID(bgLayer, 0);
                manipulator.SetLayerOrderID(Scene.DEFAULT_LAYER_NAME, 1);

                // Add the background texture painter to the BACKGROUND layer
                var resBackgroundTexture = manipulator.AddTexture(
                    new AssemblyResourceUriBuilder(
                        "SeeingSharp.Tutorials.Introduction03", 
                        true, 
                        "Assets/Textures/Background.png"));
                manipulator.Add(new TexturePainter(resBackgroundTexture), bgLayer.Name);

                // Create pallet geometry resource
                PalletType pType = new PalletType();
                pType.ContentColor = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource<GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object and add it to the scene
                //  => The DEFAULT layer is used by default
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                    .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = m_panelPainter.Camera;
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
        /// <summary>
        /// Stops input handling.
        /// </summary>
        public void Stop()
        {
            _hasFocus = false;
            if (_painter == null)
            {
                return;
            }
            if (_dispatcher == null)
            {
                return;
            }

            // Deregister all events on UI thread
            var dummyButtonForFocus = _dummyButtonForFocus;
            var coreWindow          = _coreWindow;

            _ = _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                // RemoveObject the dummy button
                if (dummyButtonForFocus != null)
                {
                    dummyButtonForFocus.KeyDown   -= this.OnDummyButtonForFocus_KeyDown;
                    dummyButtonForFocus.KeyUp     -= this.OnDummyButtonForFocus_KeyUp;
                    dummyButtonForFocus.LostFocus -= this.OnDummyButtonForFocus_LostFocus;
                    dummyButtonForFocus.GotFocus  -= this.OnDummyButtonForFocus_GotFocus;

                    _targetPanel.Children.Remove(dummyButtonForFocus);
                }

                // Deregister all events
                _targetPanel.PointerExited       -= this.OnTargetPanel_PointerExited;
                _targetPanel.PointerEntered      -= this.OnTargetPanel_PointerEntered;
                _targetPanel.PointerWheelChanged -= this.OnTargetPanel_PointerWheelChanged;
                _targetPanel.PointerPressed      -= this.OnTargetPanel_PointerPressed;
                _targetPanel.PointerReleased     -= this.OnTargetPanel_PointerReleased;
                _targetPanel.PointerMoved        -= this.OnTargetPanel_PointerMoved;

                _targetPanel = null;

                // Deregister events from CoreWindow
                coreWindow.KeyDown -= this.OnCoreWindow_KeyDown;
                coreWindow.KeyUp   -= this.OnCoreWindow_KeyUp;
            });

            // set all references to zero
            _dummyButtonForFocus = null;
            _painter             = null;
            _coreWindow          = null;
            _dispatcher          = null;
        }
Example #8
0
        /// <summary>
        /// Stops input handling.
        /// </summary>
        public void Stop()
        {
            m_hasFocus = false;
            if (m_painter == null)
            {
                return;
            }
            if (m_dispatcher == null)
            {
                return;
            }

            // Deregister all events on UI thread
            Button dummyButtonForFocus      = m_dummyButtonForFocus;
            SeeingSharpPanelPainter painter = m_painter;
            CoreWindow coreWindow           = m_coreWindow;

            m_dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                // Remove the dummy button
                if (dummyButtonForFocus != null)
                {
                    dummyButtonForFocus.KeyDown   -= OnDummyButtonForFocus_KeyDown;
                    dummyButtonForFocus.KeyUp     -= OnDummyButtonForFocus_KeyUp;
                    dummyButtonForFocus.LostFocus -= OnDummyButtonForFocus_LostFocus;
                    dummyButtonForFocus.GotFocus  -= OnDummyButtonForFocus_GotFocus;

                    painter.TargetPanel.Children.Remove(dummyButtonForFocus);
                }

                // Deregister all events
                painter.TargetPanel.PointerExited       -= OnTargetPanel_PointerExited;
                painter.TargetPanel.PointerEntered      -= OnTargetPanel_PointerEntered;
                painter.TargetPanel.PointerWheelChanged -= OnTargetPanel_PointerWheelChanged;
                painter.TargetPanel.PointerPressed      -= OnTargetPanel_PointerPressed;
                painter.TargetPanel.PointerReleased     -= OnTargetPanel_PointerReleased;
                painter.TargetPanel.PointerMoved        -= OnTargetPanel_PointerMoved;

                // Deregister events from CoreWindow
                coreWindow.KeyDown -= OnCoreWindow_KeyDown;
                coreWindow.KeyUp   -= OnCoreWindow_KeyUp;
            }).FireAndForget();

            // set all references to zero
            m_dummyButtonForFocus = null;
            m_painter             = null;
            m_coreWindow          = null;
            m_dispatcher          = null;
        }
        private async void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null)
            {
                return;
            }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_panelPainter.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = m_panelPainter.Camera;

            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
        private async void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null) { return; }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_panelPainter.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create pallet geometry resource
                PalletType pType = new PalletType();
                pType.ContentColor = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource<GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                    .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = m_panelPainter.Camera;
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
        /// <summary>
        /// Starts input handling.
        /// </summary>
        /// <param name="viewObject">The view object (e. g. Direct3D11Canvas).</param>
        public void Start(IInputEnabledView viewObject)
        {
            _painter = viewObject as SeeingSharpPanelPainter;
            if (_painter == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            _viewInterface = _painter;
            if (_viewInterface == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            _renderLoop = _viewInterface.RenderLoop;
            if (_renderLoop == null)
            {
                throw new ArgumentException("Unable to handle given view object!");
            }

            _dispatcher = _painter.Dispatcher;
            if (_dispatcher == null)
            {
                throw new ArgumentException("Unable to get CoreDispatcher from target panel!");
            }

            // Delegate start logic to UI thread
            _ = _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                // Register all events
                _targetPanel = _painter.TargetPanel;
                _targetPanel.PointerExited       += this.OnTargetPanel_PointerExited;
                _targetPanel.PointerEntered      += this.OnTargetPanel_PointerEntered;
                _targetPanel.PointerWheelChanged += this.OnTargetPanel_PointerWheelChanged;
                _targetPanel.PointerPressed      += this.OnTargetPanel_PointerPressed;
                _targetPanel.PointerReleased     += this.OnTargetPanel_PointerReleased;
                _targetPanel.PointerMoved        += this.OnTargetPanel_PointerMoved;

                // Create the dummy button for focus management
                //  see posts on: https://social.msdn.microsoft.com/Forums/en-US/54e4820d-d782-45d9-a2b1-4e3a13340788/set-focus-on-swapchainpanel-control?forum=winappswithcsharp
                _dummyButtonForFocus = new Button
                {
                    Content             = "Button",
                    Width               = 0,
                    Height              = 0,
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Top,
                    BorderThickness     = new Thickness(0.0)
                };

                _dummyButtonForFocus.KeyDown   += this.OnDummyButtonForFocus_KeyDown;
                _dummyButtonForFocus.KeyUp     += this.OnDummyButtonForFocus_KeyUp;
                _dummyButtonForFocus.LostFocus += this.OnDummyButtonForFocus_LostFocus;
                _dummyButtonForFocus.GotFocus  += this.OnDummyButtonForFocus_GotFocus;
                _targetPanel.Children.Insert(0, _dummyButtonForFocus);

                _coreWindow          = CoreWindow.GetForCurrentThread();
                _coreWindow.KeyDown += this.OnCoreWindow_KeyDown;
                _coreWindow.KeyUp   += this.OnCoreWindow_KeyUp;

                // Set focus on the target
                _dummyButtonForFocus.Focus(FocusState.Programmatic);
            });
        }