/// <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()); }
/// <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; }
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 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; }
/// <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); }); }