Font Resizer
Font Resizer - An Introductory Example of Using the Proximity Toolkit
Here we will show you step by step how to construct a simple WPF application by using the Proximity Toolkit. The software will have two words on its main window: pencil and hat. Each word is corresponding to a physical object tagged with markers that can be tracked by Vicon cameras. The words will become larger when the corresponding objects approaching the computer display. [video or pic]
Contents
Device Setup
This example is focused on showing you how to use the toolkit to write a software. However, you will need to do the following first:
- Use markers to create two objects that can be tracked by Vicon Cameras: a pencil and hat.
- Define the space that are tracked by the Vicon cameras.
- Define the computer display's location and dimension.
- Launch the Proximity Toolkit's sever application.
Writing the software
The example here are developed using Visual Studio 2008 and .NET Framework 3.5.
First create a new WPF application in Visual Studio. Switch to the window1.xmal, add two text blocks to the window. The XMAL code will look like this:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ViconWPFTest" Height="300" Width="612" WindowState="Maximized">
<StackPanel VerticalAlignment="Center">
<Grid>
<TextBlock Name="TextBlock1" Text="Pencil" FontSize="20" HorizontalAlignment="Left" Margin="400"/>
<TextBlock Name="TextBlock2" FontSize="20" Text="Hat" HorizontalAlignment="Right" Margin="400"/>
</Grid>
</StackPanel>
</Window>
Then add a reference to the ProximityToolkit.dll. Select Project->Add Reference. A new window will appear and select the Browse tab. Browse to the proximity folder and select ProximityToolkit.dll and add the following code at the top of your program:
using ProximityToolkit.Networking;
using ProximityToolkit.Presence;
Now we want to declare the member variables being used in the project:
private ProximitySpace space = null;
private PresenceBase pencil = null;
private PresenceBase smartboard = null;
private PresenceBase jagerHat = null;
Then you want to initialize these objects.
client.Start("127.0.0.1", 888, true);
space = client.GetSpace();
pencil = space.GetPresence("Pencil");
smartboard = space.GetDisplay("Smartboard");
jagerHat = space.GetPresence("JagerHat");
pencil.WaitForEmbodiment(0);
smartboard.WaitForEmbodiment(0);
jagerHat.WaitForEmbodiment(0);
Then we want to detect the distance change between the objects th and the display. We also want to hook up a event handler when the distance changes.
space.StartMonitor(smartboard, jagerHat, ProximityRelation.Location);
space.RelationUpdated += new SpaceRelationHandler(space_RelationUpdated);
The callback happens on a different thread from the main thread where it contains all the UI controls. Therefore, we need to dispatch the text font change actions through a message rather than changing it directly.
{
if(args.PresenceA == pencil)
{
TextBlock1.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
TextBlock1.FontSize = 1 + (int)(250 - args.Location.HorizontalDistance / 10);
}
));
}
else if (args.PresenceA == smartboard)
{
TextBlock2.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
TextBlock2.FontSize = 1 + (int)(250 - args.Location.HorizontalDistance / 10);
}
));
}
}
Now you are done! Build and run your code.
Download
- Version 1.0
- Initial working version. (by Miaosen Wang)