documentation

VLWorker Class Reference

The VLWorker is a wrapper for an Worker object. The Worker object manages the tracking thread. More...

Inherits IDisposable.

Public Member Functions

delegate void BoolCallback (bool data, IntPtr clientData)
 
delegate void StringCallback ([MarshalAs(UnmanagedType.LPStr)] string message, IntPtr clientData)
 
delegate void JsonStringCallback ([MarshalAs(UnmanagedType.LPStr)] string errorJson, [MarshalAs(UnmanagedType.LPStr)] string dataJson, IntPtr clientData)
 
delegate void JsonStringAndBinaryCallback ([MarshalAs(UnmanagedType.LPStr)] string description, IntPtr data, System.UInt32 dataSize, IntPtr clientData)
 
delegate void ImageWrapperCallback (IntPtr handle, IntPtr clientData)
 
delegate void ExtrinsicDataWrapperCallback (IntPtr handle, IntPtr clientData)
 
delegate void IntrinsicDataWrapperCallback (IntPtr handle, IntPtr clientData)
 
 VLWorker (VLAbstractApplicationWrapper aap, bool syncWorker=false)
 Constructor of VLWorker. More...
 
bool GetDisposed ()
 
void Dispose ()
 Explicitly releases references to unmanaged resources. More...
 
bool Start ()
 Starts the tracking thread. More...
 
bool Stop ()
 Stops the tracking thread. More...
 
bool RunOnceSync ()
 Processes the enqueued commands and the tracking once. More...
 
VLImageWrapper GetImageSync ()
 Returns a pointer to the camera image. More...
 
bool IsRunning ()
 Returns whether the thread is currently running or not. More...
 
bool PushCommand (string name, string parameter, BoolCallback callback, IntPtr clientData)
 Enqueues a command for the tracking thread as string. More...
 
bool PushJsonCommand (string jsonString, JsonStringCallback callback, IntPtr clientData)
 Enqueues a command for the tracking thread using a JSON string. More...
 
bool PushCommand (VLWorkerCommands.CommandBase cmd, JsonStringCallback callback, IntPtr clientData)
 Enqueues a command for the tracking thread. More...
 
bool ProcessCallbacks ()
 Executes all enqueued callbacks. More...
 
bool AddImageListener (ImageWrapperCallback listener, IntPtr clientData)
 Registers a listener for image events. More...
 
bool RemoveImageListener (ImageWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from image events. More...
 
bool AddExtrinsicDataListener (ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Registers a listener for extrinsic data events. More...
 
bool RemoveExtrinsicDataListener (ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from extrinsic data events. More...
 
bool AddIntrinsicDataListener (IntrinsicDataWrapperCallback listener, IntPtr clientData)
 Registers a listener for intrinsic data events. More...
 
bool RemoveIntrinsicDataListener (IntrinsicDataWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from intrinsic data events. More...
 
bool AddTrackingStateListener (StringCallback listener, IntPtr clientData)
 Registers a listener for tracking state events. More...
 
bool RemoveTrackingStateListener (StringCallback listener, IntPtr clientData)
 Unregisters a listener from tracking state events. More...
 
bool AddPerformanceInfoListener (StringCallback listener, IntPtr clientData)
 Registers a listener for performance information events. More...
 
bool RemovePerformanceInfoListener (StringCallback listener, IntPtr clientData)
 Unregisters a listener from performance info events. More...
 
bool AddNamedImageListener (string key, ImageWrapperCallback listener, IntPtr clientData)
 Registers a listener for named image events. More...
 
bool RemoveNamedImageListener (string key, ImageWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from named image events. More...
 
bool AddNamedExtrinsicDataListener (string key, ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Registers a listener for named extrinsic data events. More...
 
bool RemoveNamedExtrinsicDataListener (string key, ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from named extrinsic data events. More...
 
bool AddNamedIntrinsicDataListener (string key, IntrinsicDataWrapperCallback listener, IntPtr clientData)
 Registers a listener for named intrinsic data events. More...
 
bool RemoveNamedIntrinsicDataListener (string key, IntrinsicDataWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from named intrinsic data events. More...
 
bool AddAnchorToWorldTransformListener (string anchorName, ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Registers a listener for anchor to world transform events. More...
 
bool RemoveAnchorToWorldTransformListener (string anchorName, ExtrinsicDataWrapperCallback listener, IntPtr clientData)
 Unregisters a listener from anchor to world transform events. More...
 
bool PollEvents ()
 Calls the registered listeners for the enqueued events. More...
 
bool WaitEvents (uint timeout)
 Waits for enqueued events and calls the registered listeners. More...
 
bool PushJsonAndBinaryCommand (string jsonString, IntPtr binaryDataPtr, UInt32 binaryDataSize, JsonStringAndBinaryCallback callback, IntPtr clientData)
 Enqueues a command for the tracking thread using a JSON string and binary data - THIS FUNCTION IS CONSIDERED AS BETA AND MAY BE MATTER OF CHANGE. More...
 
bool SetNodeImageSync (VLImageWrapper image, string node, string key)
 
VLImageWrapper GetNodeImageSync (string node, string key)
 
bool SetNodeIntrinsicDataSync (VLIntrinsicDataWrapper intrinsicData, string node, string key)
 
VLIntrinsicDataWrapper GetNodeIntrinsicDataSync (string node, string key)
 
bool SetNodeExtrinsicDataSync (VLExtrinsicDataWrapper extrinsicData, string node, string key)
 
VLExtrinsicDataWrapper GetNodeExtrinsicDataSync (string node, string key)
 
VLTrackingState GetNodeTrackingStateSync (string node)
 

Detailed Description

The VLWorker is a wrapper for an Worker object. The Worker object manages the tracking thread.

Constructor & Destructor Documentation

◆ VLWorker()

VLWorker.VLWorker ( VLAbstractApplicationWrapper  aap,
bool  syncWorker = false 
)
inline

Constructor of VLWorker.

Member Function Documentation

◆ AddAnchorToWorldTransformListener()

bool VLWorker.AddAnchorToWorldTransformListener ( string  anchorName,
ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for anchor to world transform events.

Parameters
anchorNameName of the anchor which the listener should be getting the extrinsic from.
listenerListener which will be notified during the event processing, if an extrinsic data event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLExtrinsicDataWrapper

◆ AddExtrinsicDataListener()

bool VLWorker.AddExtrinsicDataListener ( ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for extrinsic data events.

Parameters
listenerListener which will be notified during the event processing, if an extrinsic data event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLExtrinsicDataWrapper

◆ AddImageListener()

bool VLWorker.AddImageListener ( ImageWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for image events.

Parameters
listenerListener which will be notified during the event processing, if an image event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLImageWrapper

◆ AddIntrinsicDataListener()

bool VLWorker.AddIntrinsicDataListener ( IntrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for intrinsic data events.

Parameters
listenerListener which will be notified during the event processing, if an intrinsic data event occurred.
clientDataThe listener function will be called with the given pointer value as argument.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLIntrinsicDataWrapper

◆ AddNamedExtrinsicDataListener()

bool VLWorker.AddNamedExtrinsicDataListener ( string  key,
ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for named extrinsic data events.

Parameters
keyKey of the requested extrinsic data.
listenerListener which will be notified during the event processing, if a named extrinsic data event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLImageWrapper

◆ AddNamedImageListener()

bool VLWorker.AddNamedImageListener ( string  key,
ImageWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for named image events.

Parameters
keyKey of the requested image.
listenerListener which will be notified during the event processing, if a named image event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLImageWrapper

◆ AddNamedIntrinsicDataListener()

bool VLWorker.AddNamedIntrinsicDataListener ( string  key,
IntrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for named intrinsic data events.

Parameters
keyKey of the requested intrinsic data.
listenerListener which will be notified during the event processing, if a named intrinsic data event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.
See also
VLImageWrapper

◆ AddPerformanceInfoListener()

bool VLWorker.AddPerformanceInfoListener ( StringCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for performance information events.

Parameters
listenerListener which will be notified during the event processing, if a performance info state event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.

◆ AddTrackingStateListener()

bool VLWorker.AddTrackingStateListener ( StringCallback  listener,
IntPtr  clientData 
)
inline

Registers a listener for tracking state events.

Parameters
listenerListener which will be notified during the event processing, if an tracking state event occurred.
clientDataThe listener function will be called with the given pointer value as parameter.
Returns
true, if the listener was registered successfully; false otherwise.

◆ BoolCallback()

delegate void VLWorker.BoolCallback ( bool  data,
IntPtr  clientData 
)

◆ Dispose()

void VLWorker.Dispose ( )
inline

Explicitly releases references to unmanaged resources.

Call Dispose when you are finished using the VLWorker. The Dispose method leaves the VLWorker in an unusable state. After calling Dispose, you must release all references to the VLWorker so the garbage collector can reclaim the memory that the VLWorker was occupying.

◆ ExtrinsicDataWrapperCallback()

delegate void VLWorker.ExtrinsicDataWrapperCallback ( IntPtr  handle,
IntPtr  clientData 
)

◆ GetDisposed()

bool VLWorker.GetDisposed ( )
inline

◆ GetImageSync()

VLImageWrapper VLWorker.GetImageSync ( )
inline

Returns a pointer to the camera image.

This function only works, if the Worker was created as synchronous instance.

NOTICE: This functions is experimental and might get removed in future.

Returns
VLImageWrapper, on success; null, otherwise.

◆ GetNodeExtrinsicDataSync()

VLExtrinsicDataWrapper VLWorker.GetNodeExtrinsicDataSync ( string  node,
string  key 
)
inline

◆ GetNodeImageSync()

VLImageWrapper VLWorker.GetNodeImageSync ( string  node,
string  key 
)
inline

◆ GetNodeIntrinsicDataSync()

VLIntrinsicDataWrapper VLWorker.GetNodeIntrinsicDataSync ( string  node,
string  key 
)
inline

◆ GetNodeTrackingStateSync()

VLTrackingState VLWorker.GetNodeTrackingStateSync ( string  node)
inline

◆ ImageWrapperCallback()

delegate void VLWorker.ImageWrapperCallback ( IntPtr  handle,
IntPtr  clientData 
)

◆ IntrinsicDataWrapperCallback()

delegate void VLWorker.IntrinsicDataWrapperCallback ( IntPtr  handle,
IntPtr  clientData 
)

◆ IsRunning()

bool VLWorker.IsRunning ( )
inline

Returns whether the thread is currently running or not.

Returns
true, if the thread is running; false otherwise.

◆ JsonStringAndBinaryCallback()

delegate void VLWorker.JsonStringAndBinaryCallback ( [MarshalAs(UnmanagedType.LPStr)] string  description,
IntPtr  data,
System.UInt32  dataSize,
IntPtr  clientData 
)

◆ JsonStringCallback()

delegate void VLWorker.JsonStringCallback ( [MarshalAs(UnmanagedType.LPStr)] string  errorJson,
[MarshalAs(UnmanagedType.LPStr)] string  dataJson,
IntPtr  clientData 
)

◆ PollEvents()

bool VLWorker.PollEvents ( )
inline

Calls the registered listeners for the enqueued events.

Listeners aren't called immediately from the tracking thread in order to avoid synchronisation problems. Instead this method should be called regularly from the main thread.

Returns
true, if the events where processed successfully; false otherwise.
See also
AddImageListener, AddExtrinsicDataListener, AddIntrinsicDataListener

◆ ProcessCallbacks()

bool VLWorker.ProcessCallbacks ( )
inline

Executes all enqueued callbacks.

Callbacks aren't called immediately from the tracking thread in order to avoid synchronisation problems. Instead this method should be called regularly from the main thread.

Returns
true, if the command was enqueue successfully; false otherwise.
See also
PushCommand

◆ PushCommand() [1/2]

bool VLWorker.PushCommand ( string  name,
string  parameter,
BoolCallback  callback,
IntPtr  clientData 
)
inline

Enqueues a command for the tracking thread as string.

The command gets processed asynchronously by the tracking thread and a callback will called once after the processing has finished.

The following tracking independent commands exist:

  • createLineTracker <trackingFile>: Creates a line tracker.
  • runTracking: Starts the tracking.
  • pauseTracking: Stops the tracking.
  • setTargetFPS <fps>: Sets the target number of frames per seconds of the tracking thread.

The following commands exist for the line tracker:

  • (Deprecated) reset: Resets the tracking pose to the initial pose.
  • resetSoft: Resets the tracking.
  • resetHard: Resets the tracking and all keyframes.
  • setInitPose: Set the initial pose. The parameter must have the following structure: t_{x} t_{y} t_{z} q_{x} q_{y} q_{z} q_{w}.

NOTICE: Calling PushCommand with a name and parameter string is obsolete. Use one of the other Push(Json)Command functions instead.

Parameters
nameName of the command.
parameterParameter for the command. Value will be ignored, if no parameters are expected by the command.
callbackCallback, which will be called inside ProcessCallbacks after the command was processed.
clientDataThe callback function will be called with the given pointer value as parameter.
Returns
true, if the command was enqueue successfully; false otherwise.

◆ PushCommand() [2/2]

bool VLWorker.PushCommand ( VLWorkerCommands.CommandBase  cmd,
JsonStringCallback  callback,
IntPtr  clientData 
)
inline

Enqueues a command for the tracking thread.

A callback will called once after the processing has finished.

The different commands are defined inside the VLWorkerCommands namespace.

Parameters
cmdThe command object.
callbackCallback, which will be called inside ProcessCallbacks after the command was processed.
clientDataThe callback function will be called with the given pointer value.
Returns
true, if the command was enqueue successfully; false otherwise.

◆ PushJsonAndBinaryCommand()

bool VLWorker.PushJsonAndBinaryCommand ( string  jsonString,
IntPtr  binaryDataPtr,
UInt32  binaryDataSize,
JsonStringAndBinaryCallback  callback,
IntPtr  clientData 
)
inline

Enqueues a command for the tracking thread using a JSON string and binary data - THIS FUNCTION IS CONSIDERED AS BETA AND MAY BE MATTER OF CHANGE.

The command gets processed asynchronously by the tracking thread and a callback will called once after the processing has finished. Since the memory is pinned until the callback is called in order to prevent multiple copies, the static FreeBinaryMemory() function should be called from the callback, in order to free allocated memory, which has eventually beeing passed to the function.

Parameters
jsonStringThe command with all necessary data as JSON string. The JSON string should describe the data
binaryDataPtrBinary data ptr, which is a pinned gcHandle memory pointer, which should be given to the vlSDK
binaryDataSizeThe size of the Binary data.
callbackCallback, which will be called inside ProcessCallbacks after the command was processed.
clientDataThe callback function will be called with the given pointer value.
Returns
true, if the command was enqueue successfully; false otherwise (usually some JSON syntax error).

◆ PushJsonCommand()

bool VLWorker.PushJsonCommand ( string  jsonString,
JsonStringCallback  callback,
IntPtr  clientData 
)
inline

Enqueues a command for the tracking thread using a JSON string.

The command gets processed asynchronously by the tracking thread and a callback will called once after the processing has finished.

You need to make sure, that the JSON string has the expected format. Therefore you might want to use the VLWorker.PushCommand functions instead. This function will ensure that the command will be pushed as expected.

Parameters
jsonStringThe command with all necessary data as JSON string.
callbackCallback, which will be called inside ProcessCallbacks after the command was processed.
clientDataThe callback function will be called with the given pointer value.
Returns
true, if the command was enqueue successfully; false otherwise (usually some JSON syntax error).

◆ RemoveAnchorToWorldTransformListener()

bool VLWorker.RemoveAnchorToWorldTransformListener ( string  anchorName,
ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from anchor to world transform events.

Parameters
anchorNameName of the anchor from which the listener should be removed.
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLExtrinsicDataWrapper

◆ RemoveExtrinsicDataListener()

bool VLWorker.RemoveExtrinsicDataListener ( ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from extrinsic data events.

Parameters
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveImageListener()

bool VLWorker.RemoveImageListener ( ImageWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from image events.

Parameters
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveIntrinsicDataListener()

bool VLWorker.RemoveIntrinsicDataListener ( IntrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from intrinsic data events.

Parameters
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveNamedExtrinsicDataListener()

bool VLWorker.RemoveNamedExtrinsicDataListener ( string  key,
ExtrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from named extrinsic data events.

Parameters
keyKey of the requested extrinsic data.
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveNamedImageListener()

bool VLWorker.RemoveNamedImageListener ( string  key,
ImageWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from named image events.

Parameters
keyKey of the requested image.
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveNamedIntrinsicDataListener()

bool VLWorker.RemoveNamedIntrinsicDataListener ( string  key,
IntrinsicDataWrapperCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from named intrinsic data events.

Parameters
keyKey of the requested intrinsic data.
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemovePerformanceInfoListener()

bool VLWorker.RemovePerformanceInfoListener ( StringCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from performance info events.

Parameters
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RemoveTrackingStateListener()

bool VLWorker.RemoveTrackingStateListener ( StringCallback  listener,
IntPtr  clientData 
)
inline

Unregisters a listener from tracking state events.

Parameters
listenerListener which should be unregistered.
clientDataPointer value used as parameter during the registration of the listener.
Returns
true, if the listener was unregistered successfully; false otherwise.
See also
VLImageWrapper

◆ RunOnceSync()

bool VLWorker.RunOnceSync ( )
inline

Processes the enqueued commands and the tracking once.

This function only works, if the Worker was created as synchronous instance. The target number of FPS will get ignored. After calling this function you should call VLWorker.ProcessCallbacks and VLWorker.PollEvents to invoke callbacks and registered listeners.

Returns
true, on success; false otherwise.

◆ SetNodeExtrinsicDataSync()

bool VLWorker.SetNodeExtrinsicDataSync ( VLExtrinsicDataWrapper  extrinsicData,
string  node,
string  key 
)
inline

◆ SetNodeImageSync()

bool VLWorker.SetNodeImageSync ( VLImageWrapper  image,
string  node,
string  key 
)
inline

◆ SetNodeIntrinsicDataSync()

bool VLWorker.SetNodeIntrinsicDataSync ( VLIntrinsicDataWrapper  intrinsicData,
string  node,
string  key 
)
inline

◆ Start()

bool VLWorker.Start ( )
inline

Starts the tracking thread.

Returns
true, if the thread was started successfully; false otherwise.

◆ Stop()

bool VLWorker.Stop ( )
inline

Stops the tracking thread.

Returns
true, if the thread was stopped successfully; false otherwise.

◆ StringCallback()

delegate void VLWorker.StringCallback ( [MarshalAs(UnmanagedType.LPStr)] string  message,
IntPtr  clientData 
)

◆ WaitEvents()

bool VLWorker.WaitEvents ( uint  timeout)
inline

Waits for enqueued events and calls the registered listeners.

Listeners aren't called immediately from the tracking thread in order to avoid synchronisation problems. Instead this method should be called regularly from the main thread.

Parameters
timeoutNumber of milliseconds before stopping to wait. Under normal circumstances this shouldn't happen, but in case something went wrong, we don't want to wait indefinitely.
Returns
true, on success or false, if there was an error while waiting for events. false is also returned, if the tracking is enabled, but the timeout elapsed without an event arriving.
See also
AddImageListener, AddExtrinsicDataListener, AddIntrinsicDataListener