Cardoso Gabriel Schade - Microsoft Kinect: Crie aplicações interativas стр 7.

Шрифт
Фон

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="*"/>

<RowDefinition Height="*"/>

<RowDefinition Height="*"/>

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="50"/>

<ColumnDefinition Width="*"/>

</Grid.ColumnDefinitions>

</Grid>

Nossa estrutura do layout já está pronta! Agora vamos incluir os componentes

para exibir as informações. Um componente simples e útil para exibir informações é o campo Label. Teremos 6 campos deste tipo e iremos definir algumas propriedades visuais para eles. Os três primeiros campos devem receber os valores X, Y

20

Casa do Código

Capítulo 3. Acelerômetro e Eixo Motorizado

e Z na propriedade Content e os três últimos campos devem receber os valores

labelX, labelY e labelZ na propriedade Name para que eles se tornem acessíveis no codebehind de nossa janela. Precisamos disso porque vamos atualizar o valor da propriedade Content com o valor do acelerômetro em nosso código C#, além disso, é

importante utilizar as propriedades de alinhamento e as propriedades herdadas do componente Grid para posicionar a informação adequadamente no nosso layout.

Com tudo terminado, o código desta janela deve ficar semelhante ao código a seguir.

<Window x:Class="Acelerometro.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="MainWindow" Height="150" Width="300">

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="*"/>

<RowDefinition Height="*"/>

<RowDefinition Height="*"/>

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="50"/>

<ColumnDefinition Width="*"/>

</Grid.ColumnDefinitions>

<Label Content="X" HorizontalAlignment="Center"

FontSize="24" VerticalAlignment="Center" />

<Label Content="Y" HorizontalAlignment="Center"

FontSize="24" VerticalAlignment="Center"

Grid.Row="1"/>

<Label Content="Z" HorizontalAlignment="Center"

FontSize="24"

VerticalAlignment="Center"

Grid.Row="2"/>

<Label Name="labelX" HorizontalAlignment="Left"

FontSize="24" VerticalAlignment="Center"

Margin="10,0" Grid.Column="1"

/>

<Label Name="labelY" HorizontalAlignment="Left"

FontSize="24" VerticalAlignment="Center"

Margin="10,0" Grid.Column="1" Grid.Row="1"/>

21

3.1. Acelerômetro

Casa do Código

<Label Name="labelZ" HorizontalAlignment="Left"

FontSize="24" VerticalAlignment="Center"

Margin="10,0" Grid.Column="1" Grid.Row="2"/>

</Grid>

</Window>

Agora nossa janela já está pronta. Podemos implementar o código que irá atu-

alizar estes campos com os valores do acelerômetro do sensor. Para fazer isso criaremos um método chamado AtualizarValoresAcelerometro(), no qual ire-

mos obter os valores através do método disponível na SDK e inseri-los na propriedade Content dos componentes labelX, labelY e labelZ, conforme o código a seguir.

private void AtualizarValoresAcelerometro()

{

Vector4 resultado = kinect.AccelerometerGetCurrentReading();

labelX.Content = Math.Round(resultado.X, 3);

labelY.Content = Math.Round(resultado.Y, 3);

labelZ.Content = Math.Round(resultado.Z, 3);

}

Esta é a forma de obter os valores do acelerômetro, bem simples não é? Agora temos que observar um ponto importante, quando este método será executado? Con-

forme dito anteriormente não há eventos para a atualização do acelerômetro, pois ele sofre variações constantemente, para atualizarmos o valor iremos criar nosso próprio timer.

O objeto DispatcherTimer funciona como um cronômetro: cada vez que o

tempo definido como seu intervalo passa, o evento Tick é chamado. Vamos inter-

pretar este evento e dentro dele chamaremos o método criado anteriormente. Para criar um timer em C# basta utilizar o objeto mencionado, preencher a propriedade Interval que irá definir o intervalo com que o evento Tick é chamado e invocar

o método Start para que o timer inicie. Veja como o método de inicialização do

timer e o método que interpreta o evento Tick ficaram simples.

private void InicializarTimer()

{

DispatcherTimer timer = new DispatcherTimer();

timer.Interval = TimeSpan.FromMilliseconds(100);

timer.Tick += timer_Tick;

timer.Start();

22

Casa do Código

Capítulo 3. Acelerômetro e Eixo Motorizado

}

private void timer_Tick(object sender, EventArgs e)

{

AtualizarValoresAcelerometro();

}

Agora basta que o construtor de nossa janela invoque os métodos para inicializar o sensor Kinect e o timer que tudo irá funcionar. Execute sua aplicação e veja os valores do acelerômetro sendo alterados conforme você mexe no sensor. A figura 3.1

ilustra a janela da nossa aplicação.

Figura 3.1: Aplicação Acelerômetro

3.2

Eixo Motorizado

O Eixo motorizado é uma peça importante no Kinect, através dele é possível alterar o ângulo de elevação do componente onde ficam as câmeras do sensor, alterando assim a visão que o sensor possui do ambiente. Este eixo movimenta o sensor apenas para cima e para baixo, atualmente não há uma forma de movimentá-lo horizontalmente.

O Kinect possui um raio de visão de 57.5 graus na horizontal e 43.5 graus na vertical, contudo este eixo motorizado pode movimentar a visão vertical para 27 graus para cima ou para baixo, conforme ilustrado na figura 3.2.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке