Szymon Kobalczyk's Blog

A Developer's Notebook

  Home  |   Contact  |   Syndication    |   Login
  96 Posts | 5 Stories | 258 Comments | 369 Trackbacks

News

Spotkasz mnie na CodeCamp'09 View Szymon Kobalczyk's profile on LinkedIn

Twitter












Article Categories

Archives

Post Categories

Blogs I Read

Tools I Use

Wednesday, October 28, 2009 #

Now that .NET Framework 4.0 Beta 2 is out let’s look again what is available for building multi-touch application in WPF. In Beta 1 we got only a preview of manipulation and inertia components. With Beta 2 we finally get access to whole touch input system, and it looks very close to what was shown on PDC last year. Here is an overview from MSDN:

Elements in WPF now accept touch input. The UIElement, and UIElement3D, and ContentElement classes expose events that occur when a user touches an element on a touch-enabled screen. The following events are defined on UIElement and respond to touch input. Note that these events are also defined on UIElement3D and ContentElement.

In addition to the touch events, the UIElement supports manipulation. A manipulation is interpreted to scale, rotate, or translate the UIElement. For example, a photo viewing application might allow users to move, zoom, resize, and rotate a photo by touching the computer screen over the photo. The following events have been added to UIElement:

To enable manipulation, set the IsManipulationEnabled to true.

This is exactly what we were waiting for. I started playing with this new API and I will try to share some samples soon. But here is one problem I run into already. When I tried to use touch in ordinary WPF application, I noticed that all Buttons have a weird behavior, so that when I touched the Button it didn’t go into a pressed state immediately (I’m testing this on HP TouchSmart). Instead it only fires the Click event when I lift the finger. Testing it more I noticed that on any UIElement it won’t fire the MouseDown event until I lift the finger or slide it quite a bit.

To help me diagnose this issue I created a simple test application shown here:

multitouchtest

From left to right I have gray rectangles that react to input events from mouse, stylus and touch. Each rectangle will change color to orange when mouse or stylus is over, and to green when is pressed. In addition, on press I capture the appropriate device and during capture the border changes color to red.

This test confirms that when I use touch panel then the xxxDown events don’t arrive immediately regardless of the device used. I spent quite a while trying to figure it out and trying various settings in both the Touch and Pen Control Panel and the NextWindow’s USB Config utility.

Finally I noticed that somehow this works perfectly fine when I use manipulations. From this I quickly found that this problem goes away when you set IsManipulationEnabled property on the element. Turns out that the side effect of setting this property to true is also changing the stylus properties to disable PressAndHold and Flicks gestures on the element. This explains this problem because stylus engine has to postpone these events trying to interpret the gestures. You can see the difference by selecting the appropriate checkbox on the window.

However although now we get the xxxDown events immediately (which will be very useful for manipulations) this doesn’t fix the problem with Button pressed state. You will notice that MouseDown event is still deferred regardless of the IsManipulationEnabled settings. I believe that in this case this might be caused by input logic in Windows itself. In fact the only way I could affect this was to force the touch panel to report input as mouse events (using NextWindow’s USB Config tool).

In the end I believe the proper fix for this would require extending all WPF built-in controls so that they understand the touch events and react accordingly. At the same time some controls might get some multi-touch specific behaviors as well. For example it was already announced that ScrollViewer will be enhanced to support multi-touch panning. In case of Button it was mentioned several times, that when simultaneous touches occur the correct behavior should be to fire the Click event only after the last touch is lifted. I hope that we get some of these enhancements in the RTM timeframe.

You can download the sample code here.


Monday, July 06, 2009 #

Last Friday I’ve received new Futaba S3001 servos. Turns out they are more easier to modify to Hitec’s, and at the same seem more reliable. I’ve simply followed this Instructable, and you can also find some additional photos in my gallery. What most important the servos are also easier to calibrate, so now my SERB will actually stop in place when I want it.

Below is a short video of the completed SERB robot where it just runs in random directions:

This weekend I’ve also started looking at Microsoft Robotics Development Studio 2008. This environment promises easy entry level to robotics. However this is true only when you have a compatible robotics platform (like Lego Mindstorms NXT, fishertechnik, iRobot and few others). There are pretty good tutorials on how to control these robots both from C# and from VPL. However before I can apply them to my SERB robot, first I need to implement the hardware interface and generic services to control the robot. Not much information on this and closest what I found so for is the Robotics Tutorial 6 – Remotely Connected Robots. It would be cool to get more detailed example on writing such services, but fortunately source code of services for other robots is included. In particular I’m trying to understand the code for iRobot and this additional service for VEX Robotics. If you know of any other good examples or tutorials please let me know.


Thursday, July 02, 2009 #

Few weeks ego we went to an exhibition in one of Kraków’s malls to celebrate the 100 year anniversary of robotics. Besides some nice exhibits there was also a place where kids could try to build a robot from Lego Mindstorms NXT and Fishertechnik sets. We spent few hours there with my older son Jaś and even managed to build a walking robot.

It was fun for both of us so I started looking if we could continue playing with robots at home. Unfortunately most of the sets I found are pretty expensive (starting at $200). This is where my good pal Marcin Książek turned me to the Arduino electronic prototyping platform.

Arduino is really a simple and cheap microcontroller kit that can be easily connected to a PC and programmed. What makes it fun is that there are also many extensions that come as “shields” and adapters for the board and add capabilities such as XBee and Ethernet communication, accelerometer, DC motor control, GPS or even a touch LCD. The platform is open source so there are tons of information and fun projects on the web. Good place to start would be the Arduino Experimentation Kit (ARDX) – you can buy the kit from oomlout, but it’s also open source so you can download all guides and buy the parts in your local electronics store yourself. I also enjoy reading the book “Getting started with Arduino” by Massimo Banzi. And make sure to send the Arduino gift guide to your relatives. There are even Arduino user groups such as Howduino in Liverpool.

[In Poland you can buy Arduino from Nettigo]

All of this makes Arduino a great basis for building a simple robot. And in fact there is already a project on Instructables that shows exactly How to build a Arduino Controlled Servo Robot. Again this project is open source so you can buy a kit from oomlout or download the blueprints and find all the parts yourself. The body of the robot is done from acrylic sheets and I found a local shop with a laser cutter that could cut the parts for me. Most of the other parts can be easily found in your local DIY store.

One exception are the servo motors. Normal servos for RC models are constrained to movement in 180 degrees range, but what we need here is a “Continuous Rotation” servo. You can get one that was pre-modified such as Parallax, GWS S35 or Hitec HSR-1425CR. Another option is to modify the servo yourself, and there are also many instructions on how to do it on the web. I found that it’s really not hard to do, but you have to work a bit on the calibration.

So having all the parts I could finally begin the assembly. Below you can see is a photo gallery where we build our first SERB robot. As you can see I’m one happy geek dad, because both kids were pretty interested with this.

Right now the robot can’t do much besides running around in random directions, but I have some plans to make it smarter.

  1. Add remote control via Xbox pad or WiiMote. There is already a project showing how to use a netbook to control the robot via Skype. But being a .NET geek I would like to use Microsoft Robotics Studio for this.
  2. Add wireless connection with XBee so that robot can roam freely without cables the but still being controlled from the PC.
  3. Add some sensors so the robot gets more information from the world. I think first I would add bumpers to detect obstacles as shown in this project. Later I might also add wheel encoders (such as Nubotics WheelWatcher) for odometry.
  4. Play with some AI algorithms.

So it looks like I already have found myself a summer project :-)


Wednesday, June 17, 2009 #

Glenn Block TourNext week several .NET User Groups in Poland will host a special guest - Glenn Block, Program Manager in the .NET FX team (and previously PM for p&p “Prism”). As you probably already know, Glenn is the man behind the Managed Extensibility Framework (MEF) project and thus this will be the main topic of his talks:

Building openly extensible applications in .NET 4.0

Are you tired of building monolithic style apps? Are you tired of hacking your app to bits to meet just one more requirement. Do you want to enable third parties to provide add-on value to your apps? 

If the answer to any of these is yes, then come learn about the new Managed Extensibility Framework which ships in .NET 4.0. 

Applications built on MEF dynamically discover and compose available components at runtime. This makes MEF ideal for third-party extensibility scenarios, where the type and number of extensions are undefined. With MEF you can enable customers and third-parties to take your apps where no man has gone before.

During the tour Glenn will visit following cities:

You can register for the meeting in the city near you by clicking on the links above. More information on the official website. Also visit Glenn’s blog and leave him a comment if you like to hear about any particular topic.


Monday, April 27, 2009 #

Wczoraj zakończyła się rejestracja do konkursu o tytuł Speaker Idol 2009, a zatem znamy już nazwiska siedmiu śmiałków którzy zmierzą się ze sobą w środowy wieczór. Oto oni:

  1. Marcin Kruszyński – Innowacje w Silverlight 3
  2. Michał Brzozowski – Zasada „SOLID”
  3. Wiesław Nizio – Microsoft Excel i Windows Forms. Co wybrać Ole Automation, czy OleDb?
  4. Jakub Malinowski – CRUD UI dla danych w .Net
  5. Krystian Czepiel – Wykorzystanie Modelu MVC przy tworzeniu aplikacji ASP.NET
  6. Łukasz Podolak – Software Craftsmanship
  7. Arkadiusz Beer – Pex: Zautomatyzowane generatory testów

Już teraz możecie się zapoznać z tematami ich prezentacji opublikowanymi na stronie konkursu

Serdecznie zapraszamy na spotkanie – wieczór zapowiada się naprawdę interesująco!


Thursday, April 16, 2009 #

Speaker Idol 2009Chcesz sprawdzić się w roli prezentera? Weź udział w konkursie Speaker Idol i zostań idolem publiczności CodeCamp 2009! Wystarczy 10 minutowa prezentacja. Zasady są proste, a nagrody ciekawe...

Co należy zrobić?

  1. Przygotować krótką prezentację (do 7-10 minut).
  2. Zgłosić swoje uczestnictwo do 26 kwietnia 2009 (niedziela) włącznie.
  3. Wygłosić prezentację na spotkaniu KGD 29 kwietnia 2009 (środa) i zachwycić publiczność.
  4. Wygrać w głosowaniu publiczności i odebrać nagrodę!

Zachęcamy do nadsyłania swoich zgłoszeń na adres si@codecamp.pl

Co można wygrać?

  • Możliwość wystąpienia na CodeCamp 2009
  • Visual Studio 2008 Professional
  • Lincencje na produkty firmy Telerik
    Do wyboru: OpenAccess for ORM, Sitefinity Telerik Reporting, RadControls for Winforms, RadControls for ASP.NET Ajax, RadControls for WPF lub RadControls for Silverlight
  • Nevron Chart for .NET Lite edition
  • Narzędzia NDepend
  • Plecaki Microsoft
  • Kamerka internetowa i myszka
  • i inne...

Więcej informacji na stronie: http://codecamp.pl/pl/speakeridol.aspx

Strona spotkania: http://ms-groups.pl/kgd.net/47_spotkanie/default.aspx


Tuesday, March 10, 2009 #

4DevelopersShort while after I wrote about resources for multi-touch on Windows 7 Daniel D left a comment that got me very excited:

MultiTouchVista now has a driver that emulates multitouch hardware for Windows 7

I got to try it out myself! Bit later I got everything up and running and I’m happy to report that it’s all true: you can now effectively emulate multi-touch devices under Windows 7. You can see it yourself on this video. In fact it works so well that I was able to demonstrate it last Saturday at 4Developers conference.

That being said, the process to get it running involves few steps so I thought it would help to have a walkthrough to follow for anyone who would like to try it. So here it goes.

Hardware

Of course you need a PC. Note that computer vision puts CPU to heavy use, and I was able to get barely 15 FPS on my laptop with 1.6Ghz, and thus the interaction wasn’t very smooth. In fact Windows 7 specification requires multi-touch devices to report at least 50hz per finger.

The software that we are going to use allows to work with number of protocols. One option is to simply connect multiple USB mice to emulate multi-touch. But it is much more fun to build your own surface-like table. For start you can built a MTmini table designed by Seth Sanders – it takes about 20 minutes to build and all you will need is:

  • Webcam – people try different kinds of webcams for this, but I think even something simple with decent video should work. I have great results using Logitech QuickCam Pro 9000 because it has excellent video quality in 640x480 and most important you can set the focus and other parameters manually.
  • Tracing paper – it’s purpose is to diffuse the light coming to the camera so only objects very close to the surface (i.e. your fingers) look sharp. Initially I used just ordinary printer paper, but tracing paper gives more even image.
  • Photo frame – no, I’m not talking about any fancy LCD frames. It’s just plain wood frame (word of advice: bad things will happen if you try to repurpose frame from your wedding photo). Frame I use has A4 paper format (210mm × 297mm) and fits nicely on top of the carton box from the packs of A4 office paper.
  • Cardboard box, duck tape, and scissors.

When you have all the materials here is what you do:

  1. Put the camera at the bottom of the box facing up, and glue it with the duck tape. You might need to cut out the hole for the camera’s USB cord.
  2. Remove the back board from the photo frame and put only the tracing paper on the glass.
  3. Put the frame on top of the box.

You can also watch this video for step by step instructions.

Here is my completed setup:

My MTmini setup

Software

Obviously you need to have Windows 7 Beta installed. So hopefully you was able to download it while it lasted.

Next thing to download and configure is tBeta. Here is description of it from official website:

The Beta, tbeta for short, is a open source/cross-platform solution for computer vision and multi-touch sensing. It takes an video input stream and outputs tracking data (e.g. coordinates and blob size) and touch events (e.g. finger down, moved and released) that are used in building multi-touch applications. tbeta can interface with various web cameras and video devices as well as connect to various TUIO/OSC enabled applications and supports many multi-touch lighting techniques including: FTIR, DI, DSI, and LLP with expansion planned for the future (custom modules/filters).

Download the software from the above website and unzip to folder you choose. Before you run it you might want to change configuration to use higher resolution if your webcam supports it. Go to \tbeta\data folder and open config.xml file. Specify the correct values for  WIDTH and HEIGHT in CAMERA_0 node.

One more thing I did to get more predictable results was to turn off all automatic adjustments in camera software. For Logitech QuickCam this includes switching to manual focus, and turning off Automatic settings for RightLight, exposure and gain. We are not going to move the camera around or dramatically change the lightning conditions so it will be best to make all settings constant.

When you run tbeta.exe you should see something like this:

tBeta

The tricky part is calibration, which means adjusting the sliders for all filters at the bottom so that you get best recognition accuracy. Unfortunately I don’t know any rules that would help you with this. You would have to play with the settings a bit to get a feeling how it works. If you make it right you should see an outline and unique id associated with each of your fingers as seen on the above screenshot. When all works well you can minimize this window (press spacebar) so it won’t consume CPU for rendering.

The last piece of this puzzle is MultiTouchVista project that I mentioned in previous post as well. This framework, which actively developed by Daniel D himself (aka nesher), adds support of multi-touch to the current version of WPF. But for purpose of this article the important thing is the recently added Windows 7 multi-touch driver. It’s not even officially released yet, so you would need to go directly to Source Code tab and download latest bits (I run it on changeset 18685).

You can follow instruction in this video on how to install the driver and run the services. Here is a short summary of the same:

  1. Compile all projects for MultiTouchVista. Follow instructions on this page.
  2. From Windows Explorer go to MultiTouchVista\Main Source folder, and while holding down Shift right click on Multitouch.Diver folder and select “Open Command Window Here”.
  3. In this window type: install driver.cmd, press Enter and ignore all warnings about not certified drivers.
  4. Open Device Manager and confirm that new driver called “Universal Software HID device” is installed under “Human Interface Devices”. Video suggests to disable and then enable the driver to ensure it is working correctly.
  5. To verify the driver is installed you can open “Pen and Touch” applet from Control Panel. It should now contain the Panning tab.
  6. Back in Explorer go to MultiTouchVista\Main Source\Output folder and run  Multitouch.Service.Consol.exe. By default it loads the MultipleMiceInputProvider so if you should see red dots indicating “virtual cursor” for each USB mouse you have attached. But to use your MTmini table you would need to change configuration so it connects to tBeta through TUIO interface.
  7. From MultiTouchVista\Main Source\Output run Multitouch.Configuration.WPF.exe. From list of Available devices select Tuio and click the arrow button in middle to make it Active device. Then click “Restart service” button to apply the new configuration.
  8. Finally go to MultiTouchVista\Main Source\Multitouch.Driver.Console\bin\debug and run Multitouch.Driver.Console.exe.
  9. Now if you put finger on surface, you should see the input messages coming to the console window. And of course now you should be read to use it as input device for Windows.

Try it on several touch enable applications that I listed in my last post (XPS Viewer and Paint are great for quick demo). You can also find some C++/C# examples on MSDN Code Galery.

Great thanks for Daniel D for leaving this inspiring comment, and even bigger compliments for developing such great library. Please don’t hesitate to let me know if I can help with anything.


Wednesday, February 18, 2009 #

Last month I wrote about two conferences coming up soon in Poland. Organizers were busy all the time working on providing you with greatest speakers and technical content, and today we know the full agenda of both events.

4Developers, 7th March, Kraków

Here is the agenda for .NET track:

  • Ted Neward - Busy .NET Developer’s Guide to F#: Introduction
  • Marcin Celej - Wykresy przy użyciu biblioteki .NET Charts
  • Szymon Pobiega - Inversion of Control w systemach zbudowanych w oparciu o obiektowy model domeny
  • Marcin Kruszyński - Model-driven development w technologii “Oslo”
  • Barbara Fusińska - Od aspektów do Design by Contract, czyli wyraź swoje intencje
  • Mateusz Kierepka - BOKU aktualnie KODU (Xbox 360) – czyli nowatorski wizualny język programowania
  • Raymond Lewallen

I’m especially proud that we also have KGD speakers representing us on this conference.

You can find more information and registration form here: http://4developers.org.pl/

(There is a special discount available for KGD.NET members, so contact me before you register.)

C2C 2009, 14th March, Warsaw

I think C2C shoots for more sophisticated audience, and provides great content from both well known international speakers, as well as our polish best selected from speaker idol contest. Just take a look at list of sessions for .NET track:

  • Marek Byszewski - Tour de VSTS 2010
  • Julia Lerman - My Favorite Entity Framework Tips & Tricks
  • Piotr Leszczyński - Kolejny kontener Dependency Injection? NIE - dziękuję! Czyli o koncepcji meta-kontenera słów kilka
  • Ingo Rammer - Hardcore Production Debugging of .NET Applications
  • Udi Dahan - Avoid a Failed SOA - Business and Autonomous Components to the Rescue
  • Artur Paluszyński - Interakcyjne sceny 3D w Windows Presentation Foundation

Also check out the agenda for SQL and IT Pro tracks here: http://2009.c2c.org.pl/pl/sessions.aspx

Updated: Registration will be open soon. Registration ended very quickly because number of tickets was very limited. Hope you made it though and we can meet there.

Both conferences look very promising, and I do my best to participate in both.


Sunday, February 15, 2009 #

Ever since I got my first digital camera I was trying to create panoramic photos. This means take multiple shots of the view around me and then stitch them together into one image to create a panorama.

At the time I used a tool called PTGui and below you can see couple attempts from that time.

Long Beach, CA

Harbor in Long Beach, CA (3 photos)

castle

Castle near Vienna, Austria (2 photos)

This tool is still around, but nowadays we have some easier options. 

Windows Live Photo Gallery

If you use Windows Live Photo Gallery you probably already found out, that it has an option to create panoramic photos. Simply select all photos in your series and use menu option “Create panoramic photo”. Application doesn’t even ask you any further questions and immediately starts the conversion. When it’s done it will only ask you where to save the final image.

Here are the same shots stitched using this tool:

panorama2 

castle2

One of the problems with panoramic photos is that algorithm needs to figure out the correct projection so that your scene would have natural proportions all the way (this is similar problem as projection of Earth surface on maps in cartography). In my opinion even with default settings the photos from Windows Live Photo Gallery are much less deformed (especially on the sides) than the previous examples. I’m not saying that PTGui is a bad tool - probably you can get the same result with it if only you can figure out the correct settings.

Microsoft ICE

But there is another tool that you might not know about called Image Composite Editor (ICE) available from Microsoft Research. In fact it’s the same algorithm that is used in Windows Live but gives you some more control on the conversion process.

image

There are three groups of options that you can select:

  • Stitch – allows you to select type of camera motion used to create the shots. You have choice between 3 types of planar motion, and rotating motion, but most of the time you can leave it on Automatic.
  • Crop – while in WLPG you have to crop your images manually, here you can do it automatically or adjust the crop before saving the output image.
  • Export – the output image can be saved not only as a single bitmap image (JPEG, TIFF, BMP or PNG), but also as multi-resolution tiled formats like HD View and Silverlight Deep Zoom.

But the best feature is that you can preview your scene in 3D. And with enough photos you can even create a 360 degree view all around you. This view also allows you to adjust panorama’s center and curvature, and even change the type of projection from planar to cylindrical or spherical.

image

Tip: Notice that in above panorama not all photos are aligned on the same baseline. This is because I shot them quickly from free hand. To get best results always use a tripod and lock the camera to use the same settings for each shot in the series.

Deep Zoom Composer

Because panorama image consists of multiple high resolutions photos stitching them together will easily create some insane resolutions. Clearly putting such large files directly on your webpage isn’t the best option. Also scaling them down contradicts the point because you loose all the fine details. Here Silverlight DeepZoom comes to the rescue, and it’s very convenient that Microsoft ICE includes it as one of the export options.

But the same option was also added in recent versions of Deep Zoom composer. Add your photos in Compose mode, select all, right click on them, and select “Create panoramic photo”. Like in Windows Live Photo Gallery, you can’t adjust any parameters of the algorithm. Of course, you can combine benefits of both tools: first stitch your images in ICE and save it as high-resolution image, then import it to Deep Zoom Composer.

image

However, the main difference is that Deep Zoom Composer allows you to easily publish your panorama to PhotoZoom, or if you want to have more control you can host it yourself on Silverlight Live Streaming - simply follow the instructions in this tutorial.

Below you can see two panoramas that I created this way from photos shot last week on our vacations in Egypt (click image to open Silverlight page).

 image

Beach at the Sharm Grand Plaza Hotel (8 photos)

image

Desert outside Sharm El Sheik (11 photos)

As you can see creating panoramic photos is quite easy nowadays with all the tools available to do the hard job for you. I hope that this encourages some of you to take some great shots on your next trip. And don’t hesitate to leave me link to your panorama in the comments.


Friday, February 13, 2009 #

Last couple of months I’ve been working on very cool project that utilizes new multi-touch features in Windows 7. Although I can’t talk yet about our product, I thought it would be good to start sharing my experience with multi-touch programming. I’ll begin with some general resources to get you started.

Prerequisites

Of course first thing you need is a multi-touch capable hardware. As far as I know currently there are only three devices available on the market. Those lucky to be at PDC could see that most demos were run on HP TouchSmart All-in-One PC, or Dell Letitude XT tablet. Later in December HP released TouchSmart tx2z tablet, and this week Dell announced specs on Letitude XT2. For my work I use HP TouchSmart IQ504 PC.

The good news is that we have already seen some announcements from other manufacturers, and can expect number of devices to increase closer to Windows 7 release date.

In terms of touch-screen technology both tablets use the same DuoSense capacitive digitizer from N-Trig, while HP All-in-one PC uses optical overlay developed by NextWindow. The main difference is that NextWindow device supports only two touch points, while N-Trig’s can recognize more contacts.

Unfortunately multi-touch works only with dedicated hardware, so you can’t use other digitizers (like Wacom’s), touchpads or TabletPCs. Also there is no way to emulate multi-touch on Windows 7, for example by attaching multiple mice, although this is supported on Surface SDK emulator as demonstrated by Scott Hanselman (see around 14:30).

Software

In terms of software you need two things: Windows 7 and proper multi-touch driver for your device. Currently I run on Windows 7 Beta 1 (build 7000 for x86), and when I did clean install today most of the drivers are now available through Windows Update. The only driver I had to install manually was for Ralink WLAN adapter. However the TouchSmart version I have doesn’t have TV tuner, so if yours does you might need to install some additional software. Fortunately Kurt Brockett published detailed guide how to setup Windows 7 on HP TouchSmart.

If by any chance the multi-touch drivers won’t install for you automatically, you can download them directly from NextWindow’s or N-trig’s websites:

To verify all works fine open any page in IE8 and you should be able to use two fingers for zooming.

Here are some other areas in Windows 7 that were enhanced with multi-touch features:

  • Panning with inertia is enabled “everywhere” where scrollbars exist.
  • Paint
    • Choose a brush from the “brush gallery” and you can then multi touch finger paint.
  • Games
    • Hearts/Solitaire have been optimized for touch
  • Shell
    • Windows Snapping (Aero Snap) with Touch
    • Aero Peek with Touch
    • Taskbar Jump Lists with Increased spacing
  • Windows Media Player
  • Windows Photo Viewer
    • Zoom, Rotate, Panning and Flicks
  • XPS Viewer
    • Gestures (Zoom, Two-Finger Tap, Panning)
  • Media Center
    • Direct Panning in most Scrollable Views and Menus
  • Touch Keyboard / TIP
    • Multi-touch touch keyboard
  • Internet Explorer 8
    • Panning
    • Drag Menu (Address Bar) with Increased Spacing
    • Increased Spacing for Favorites with Touch
    • Gesture (Zoom, Panning, Flicks back and forth)
  • Windows Live Photo Gallery
    • Gesture support in the Viewer

You can also download IdentityMine’s Air Hockey game from: www.identitymine.com/airhockey

Tip: If you are using touch on regular basis touch it is a good idea to increase the size of Windows UI (fonts, icons, etc.) by changing your display settings to Medium (125%). This will make Windows much more “touchable”.

Multi-touch Programming

Most of what we know so far about multi-touch API’s introduced in Windows 7 and WPF 4.0 comes from PDC session by Reed Townsend and Anson Tsao.

There are also two later sessions from WinHEC 2008: Multi-Touch in Windows 7 Overview covers some basics and repeats information from PDC, while Multi-Touch Driver Development and Logo Compliance is more toward hardware developers.

Recently published Windows 7 SDK Beta includes header files for WM_TOUCH, WM_GESTURE messages, and related functions and structures. It also includes some documentation and samples on this (also available on MSDN).

When you have all of above installed, you can try some code samples from hands on labs from PDC available on MSDN Code Gallery. These samples are both in C++ and C#. But to get it working in WPF you will need some more advanced framework in place, and I suggest you first take a look at the Multi-touch Vista project on CodePlex. You can take a look at MIRIA SDK that adds multi-touch support to Silverlight apps. Finally, for those of you that already work with TUIO libraries (like Touchlib) here is an applet to translate WM_TOUCH to TUIO messages.

More information in multi-touch and related technology can be found in the great NUI Group Forum. You can also find all information how to build multi-touch device yourself.

 

I hope that this information will get you started, and I will try to publish more information on multi-touch programming in C# in next few days. If you have any questions or suggestions please leave a comment.