September 27, 2010

Follow Canvas - Module

I have finished a "Follow-Canvas" module using the new Proximity Toolkit. It provides you with a Canvas that aligns itself on a Display so that it keeps the minimal the distance between a specified followed Presence and the FollowCanvas. The main features are:
  • Choose between movement on the border of the display or also allow projection to any position on the display
  • Choose between two strategies for calculating the position. One uses the connection between the Displays and the FollowedPresences Center, projects it into the display plane and places the canvas onto the intersection with the display border. The other one does a projection of the FollowedPresences center onto the display plane and places the canvas to the closest point at the displays border
  • Set a threshold for the movement, so that the canvas only moves when the position-change of the presence exceeds a certain threshold
  • Choose to have animated movement
  • Resize the Canvas by setting its Width and Height, while it automatically repositions.
  • Choose if you want to reposition the canvas center at the border or have the complete canvas inside the display bounds
Here is a simple example of how to let a black box follow a Hat:

DeviceFollowCanvas followCanvas = new DeviceFollowCanvas(displayCanvas, "SmartBoard", "pencil");
followCanvas.Width = 100;
followCanvas.Height = 100;
followCanvas.Background = Brushes.Black;
                                
//additional Settings
followCanvas.PositioningBehaviour = DeviceFollowCanvas.ScreenAlignment.Inside;
followCanvas.AnimatedMovement = true;
followCanvas.AnimatedScaling = false;
followCanvas.MovementAnimationSpeed = .3;
followCanvas.ScalingAnimationSpeed = .3;
followCanvas.AllowProjection = false;
followCanvas.PositionCalculationStrategie = DeviceFollowCanvas.CalculationStrategie.AngleFromCenter;
followCanvas.MovementThreshold = 0.1;

September 19, 2010

Region Observer - Module

I created a module that lets your define Region-Shapes inside the homespace and observes artifact moving in and out.
  • The Regions can be either a box, a box with a hole, a cylinder or a ring
  • An event handler fires whenever a Presence moves into a new Region
  • You can have overlapping regions and set Priorities
  • A Dynamic-Border-Value can be set, which is applied to a shape and prevents quick region changes when someone stands between two regions
  • You can also be notified whenever an artifact is no longer visible to the tracking system

This is a example, that uses the RegionDetector to observe two people in the homespace and writes their current region to the screen:

public RegionTeller(){
    InitializeComponent();

    //This shows how we you can define custom regions and observe two people moving in and out of them
    RegionsDetector peopleObserver = new RegionsDetector();

    //add two hats that will be observed as people
    peopleObserver.AddObservedPresence("WhiteHat");
    peopleObserver.AddObservedPresence("BlackHat");
               
    //define and Add custom regions
    ProximityToolkit.Vector3 displayCenter = new ProximityToolkit.Vector3(-350,0,-89);

    //Touchregion is a rectangular Box around the display
    RectangularRegion touchRegion = new RectangularRegion("touch", 400, 700, 3000);
    touchRegion.Center = displayCenter;
    touchRegion.DynamicRegionBelt = 150;
    peopleObserver.AddRegion(touchRegion,2);           

    //Sitting Region is a Rectangular Box around the couch
    RectangularRegion sittingRegion = new RectangularRegion("sitting", 600, 1500, 1350);
    sittingRegion.Center = new ProximityToolkit.Vector3(1500, 0, 0);
    sittingRegion.DynamicRegionBelt = 150;
    peopleObserver.AddRegion(sittingRegion, 2);

    //Intermediate Interaction Region is a Cylindrical Region around the display below the Touchregion and SittingRegion
    CircularRegion intermediateRegion = new CircularRegion("intermediate", 2000);
    intermediateRegion.Center = displayCenter;
    intermediateRegion.DynamicRegionBelt = 150;
    peopleObserver.AddRegion(intermediateRegion, 1);

    //Far awar Region is a circular belt around the intermediate interaction region below the Touchregion and SittingRegion
    CircularRegion farRegion = new CircularRegion("far away", new RegionValue(2000, 4000));
    farRegion.Center = displayCenter;
    farRegion.DynamicRegionBelt = 150;
    peopleObserver.AddRegion(farRegion, 1);
               
    //Be notified whenever a person changes in between Regions
    peopleObserver.OnRegionChange += new RegionChangeHandler(peopleObserver_OnRegionChange);
}
RegionLabel.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
    delegate()
    {
        RegionLabel.Content = presence.Presence.Name + ": " + presence.Region.Name;
    }
    ));  
}

September 14, 2010

synchronized Canvas and synchonized Media Repository

Nic and me talked about the idea of implementing a module that
- first offers a shared synchronized repository for any media that can be shared between computers (for example the large screen and a tablet)
- and on top provides a shared Canvas, that could either be duplicated between two connected screens or that could extend from one screen to the other. This could for example enable easy transfer of a screen-object from a tablet to a large screen or let someone control complete large screen with her tablet.

September 05, 2010

Purpose of this blog

Here I will post information about my diploma project. This includes:
- Short and long term tasks
- Findings from meetings with my supervisors Nic and Saul
- Updates of the work I did in terms of programming and progress of my thesis
- Documents like sketches, writings, videos, photos... that I create during my work for the thesis