Loading...
Searching...
No Matches
trackingtarget/trackingtarget.cs
// Copyright PS-Tech B.V. All Rights Reserved.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using PSTech.Pstsdk;
namespace PsTech.TrackingTarget
{
public class TrackingTarget
{
//Registering control handler function.
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(ConsoleEventHandler handler, bool add);
private delegate bool ConsoleEventHandler(CtrlType sig);
static ConsoleEventHandler ConsoleCtrlEventHandler;
public enum CtrlType
{
CtrlCEvent = 0,
CtrlBreakEvent = 1,
CtrlCloseEvent = 2,
CtrlLogOffEvent = 5,
CtrlShutdownEvent = 6,
}
private static bool ConsoleHandler(CtrlType sig)
{
Exithandler((int)sig);
return true;
}
// Control variable for main loop.
static bool Running = true;
// Number of data points to grab before application termination.
static int NumberOfSamplesToGrab = 100;
static int SamplesGrabbed = 0;
class MyTrackerListener : TrackerListener
{
public override void OnTrackerData(TrackerData data, ErrorStatus status)
{
if (SamplesGrabbed++ >= NumberOfSamplesToGrab)
{
Running = false;
}
foreach (TargetPose pose in data.TargetPoseList)
{
Console.Write("Detected " + pose.Target.Name + "\n");
}
// Do something with the received data.
}
}
static void Exithandler(int sig)
{
Tracker.Shutdown(); // Cleans up native resources only; does NOT remove listeners
Running = false;
}
static int Main(string[] args)
{
// Register the exit handler with the application
ConsoleCtrlEventHandler += new ConsoleEventHandler(ConsoleHandler);
SetConsoleCtrlHandler(ConsoleCtrlEventHandler, true);
// Implement error handling of PSTech.TrackerException exceptions to prevent
// improper PST Tracker shutdown on errors.
try
{
// Create an instance of the Tracker object using the default configuration path and file names.
// Wrap the Tracker in a using statement to ensure Dispose() is called automatically
using (Tracker tracker = new Tracker())
{
// Print version number of the tracker server being used.
Console.Write("Running PST Server version " + tracker.GetVersionInfo() + "\n");
//Create tracker listener with callback functions for data and/or mode updates.
TrackerListener listener = new MyTrackerListener();
// Register the TrackerListener object to the tracker server.
tracker.AddTrackerListener(listener);
Console.Write("Put the Reference card in front of the PST in order to see tracking results.\n\n");
// Start the tracker server.
tracker.StartTracker();
// Perform a system check to see if the tracker server is running OK and print the result.
Console.Write("System check: " + tracker.Systemcheck() + "\n\n");
// Retrieve the list of registered tracking targets and print their names and current status (active or not).
TargetStatus[] targets = tracker.GetTargetList();
Console.Write("Found " + targets.Length + " tracking targets:\n");
foreach (TargetStatus t in targets)
{
Console.Write(t.Target.Name + "\t" + t.Status + "\n");
}
Console.Write("\n");
// Enable the Reference target. Note that this will cause a PSTech.TrackerException in case the Reference
// target has not been created. The Reference target can be created using the PST Client.
tracker.SetTargetStatus("Reference", true);
// Get the 3D marker positions making up the Reference device and display them.
// Note that this will cause a PSTech.TrackerException in case the Reference target has not been created.
TargetMarker[] markers = tracker.GetTargetMarkers("Reference");
Console.Write("3D marker positions making up the Reference target:\n");
foreach (TargetMarker marker in markers)
{
Console.Write("x: " + marker.Coordinates[0] + "\t" + "y: " + marker.Coordinates[1] + "\t" + "z: " + marker.Coordinates[2] + "\n");
}
Console.Write("\n");
// Main loop, wait for auto-termination.
while (Running)
{
Thread.Sleep(100);
}
}
}
catch (Exception e)
{
// Catch PSTech.TrackerException exceptions and print error messages.
Console.Write(e + "\n");
}
// Pause command line to see results.
Console.Write("Press enter to continue...\n");
Console.Read();
return 0;
}
}
}
Exception
PSTech.Pstsdk.TargetPose
Estimated tracking target pose.
Definition TargetPose.cs:24
PSTech.Pstsdk.TargetPose.Target
Target Target
Definition TargetPose.cs:41
PSTech.Pstsdk.TrackerData
Tracking information retrieved from tracker.
Definition TrackerData.cs:25
PSTech.Pstsdk.TrackerData.TargetPoseList
TargetPose[] TargetPoseList
Definition TrackerData.cs:58
PSTech.Pstsdk.Tracker
Main PST SDK class implementing tracker communication.
Definition Tracker.cs:198
PSTech.Pstsdk.Tracker.Shutdown
static void Shutdown()
Shutdown the tracking system, stopping tracking.
Definition Tracker.cs:548
PSTech.Pstsdk.Tracker.StartTracker
void StartTracker()
Start tracking.
Definition Tracker.cs:524
PSTech.Pstsdk.Tracker.Systemcheck
StatusMessage Systemcheck()
Check if the tracker is running correctly.
Definition Tracker.cs:568
PSTech.Pstsdk.Tracker.AddTrackerListener
void AddTrackerListener(TrackerListener listener)
Add a listener for tracker data and/or mode change reporting.
Definition Tracker.cs:476
PSTech.Pstsdk.Tracker.SetTargetStatus
void SetTargetStatus(string targetName, bool active)
Set status of a single tracking Target.
Definition Tracker.cs:842
PSTech.Pstsdk.Tracker.GetTargetMarkers
TargetMarker[] GetTargetMarkers(string targetName)
Get 3D marker positions of stored tracking Target.
Definition Tracker.cs:869
PSTech.Pstsdk.Tracker.GetTargetList
TargetStatus[] GetTargetList()
Get TargetStatuses object containing all tracking targets and their status.
Definition Tracker.cs:806
PSTech.Pstsdk.Tracker.GetVersionInfo
string GetVersionInfo()
Get version information of the SDK.
Definition Tracker.cs:400
PSTech.Pstsdk.TrackerListener
Implements the TrackerListener class to receive tracking information and tracking mode updates.
Definition Tracker.cs:166
PSTech.Pstsdk
Definition CApi.cs:9
PSTech.Pstsdk.ErrorStatus
ErrorStatus
Tracker error messages enum class.
Definition ErrorHandler.cs:17
PSTech.Pstsdk.Target.Name
string Name
User given name of the tracking target as listed in the PST-Client software.
Definition Tracker.cs:37
PSTech.Pstsdk.TargetMarker
3D marker positions of a single marker of a tracking Target.
Definition Tracker.cs:90
PSTech.Pstsdk.TargetMarker.Coordinates
float[] Coordinates
3D marker position of a tracking Target.
Definition Tracker.cs:93
PSTech.Pstsdk.TargetStatus
Tracking target status.
Definition Tracker.cs:77
PSTech.Pstsdk.TargetStatus.Target
Target Target
Tracking target information.
Definition Tracker.cs:79
PSTech.Pstsdk.TargetStatus.Status
bool Status
Status of the tracking target (active or inactive) as listed in the PST-Client software.
Definition Tracker.cs:82