Open CASCADE Technology 7.8.0
Public Types | Public Member Functions | Static Public Member Functions
WNT_HIDSpaceMouse Class Reference

Wrapper over Space Mouse data chunk within WM_INPUT event (known also as Raw Input in WinAPI). This class predefines specific list of supported devices, which does not depend on 3rdparty library provided by mouse vendor. Supported input chunks: More...

#include <WNT_HIDSpaceMouse.hxx>

Public Types

enum  { VENDOR_ID_LOGITECH = 0x46D , VENDOR_ID_3DCONNEXION = 0x256F }
 Vendor HID identifier. More...
 

Public Member Functions

 WNT_HIDSpaceMouse (unsigned long theProductId, const Standard_Byte *theData, Standard_Size theSize)
 Main constructor.
 
int16_t RawValueRange () const
 Return the raw value range.
 
void SetRawValueRange (int16_t theRange)
 Set the raw value range.
 
bool IsTranslation () const
 Return TRUE if data chunk defines new translation values.
 
Graphic3d_Vec3d Translation (bool &theIsIdle, bool theIsQuadric) const
 Return new translation values.
 
bool IsRotation () const
 Return TRUE if data chunk defines new rotation values.
 
Graphic3d_Vec3d Rotation (bool &theIsIdle, bool theIsQuadric) const
 Return new rotation values.
 
bool IsKeyState () const
 Return TRUE for key state data chunk.
 
uint32_t KeyState () const
 Return new keystate.
 
Aspect_VKey HidToSpaceKey (unsigned short theKeyBit) const
 Convert key state bit into virtual key.
 

Static Public Member Functions

static bool IsKnownProduct (unsigned long theProductId)
 Return if product id is known by this class.
 

Detailed Description

Wrapper over Space Mouse data chunk within WM_INPUT event (known also as Raw Input in WinAPI). This class predefines specific list of supported devices, which does not depend on 3rdparty library provided by mouse vendor. Supported input chunks:

To use the class, register Raw Input device:

aRawSpace.dwFlags = 0; // RIDEV_DEVNOTIFY
aRawSpace.hwndTarget = (HWND )theWindow->NativeHandle();
if (!::RegisterRawInputDevices (aRawInDevList, 1, sizeof(aRawInDevList[0]))) { Error; }
#define Handle(Class)
Define Handle() macro.
Definition Standard_Handle.hxx:399
Definition NCollection_UBTree.hxx:64

Then handle WM_INPUT events within window message loop.

case WM_INPUT:
{
UINT aSize = 0;
NCollection_LocalArray<BYTE> aRawData (aSize); // receive Raw Input for any device and process known devices
{
break;
}
if (aRawInput->header.dwType != RIM_TYPEHID)
{
break;
}
{
break;
}
Aspect_VKeySet& aKeys = theViewCtrl.ChangeKeys();
const double aTimeStamp = theViewCtrl.EventTime();
WNT_HIDSpaceMouse aSpaceData (aDevInfo.hid.dwProductId, aRawInput->data.hid.bRawData, aRawInput->data.hid.dwSizeHid);
if (aSpaceData.IsTranslation())
{
// process translation input
bool isIdle = true, isQuadric = true;
}
if (aSpaceData.IsRotation()) {} // process rotation input
if (aSpaceData.IsKeyState()) {} // process keys input
break;
}
@ Aspect_VKey_NavSlideRight
sidewalk, right
Definition Aspect_VKey.hxx:168
@ Aspect_VKey_NavSlideDown
fall down
Definition Aspect_VKey.hxx:170
@ Aspect_VKey_NavForward
go forward
Definition Aspect_VKey.hxx:165
@ Aspect_VKey_NavBackward
go backward
Definition Aspect_VKey.hxx:166
@ Aspect_VKey_NavSlideUp
lift up
Definition Aspect_VKey.hxx:169
@ Aspect_VKey_NavSlideLeft
sidewalk, left
Definition Aspect_VKey.hxx:167
Auxiliary structure for handling viewer events between GUI and Rendering threads.
Definition AIS_ViewController.hxx:54
Structure defining key state.
Definition Aspect_VKeySet.hxx:26
Wrapper over Space Mouse data chunk within WM_INPUT event (known also as Raw Input in WinAPI)....
Definition WNT_HIDSpaceMouse.hxx:84
@ VENDOR_ID_3DCONNEXION
Definition WNT_HIDSpaceMouse.hxx:87
@ VENDOR_ID_LOGITECH
Definition WNT_HIDSpaceMouse.hxx:87

Member Enumeration Documentation

◆ anonymous enum

Vendor HID identifier.

Enumerator
VENDOR_ID_LOGITECH 
VENDOR_ID_3DCONNEXION 

Constructor & Destructor Documentation

◆ WNT_HIDSpaceMouse()

WNT_HIDSpaceMouse::WNT_HIDSpaceMouse ( unsigned long  theProductId,
const Standard_Byte theData,
Standard_Size  theSize 
)

Main constructor.

Member Function Documentation

◆ HidToSpaceKey()

Aspect_VKey WNT_HIDSpaceMouse::HidToSpaceKey ( unsigned short  theKeyBit) const

Convert key state bit into virtual key.

◆ IsKeyState()

bool WNT_HIDSpaceMouse::IsKeyState ( ) const
inline

Return TRUE for key state data chunk.

◆ IsKnownProduct()

static bool WNT_HIDSpaceMouse::IsKnownProduct ( unsigned long  theProductId)
static

Return if product id is known by this class.

◆ IsRotation()

bool WNT_HIDSpaceMouse::IsRotation ( ) const
inline

Return TRUE if data chunk defines new rotation values.

◆ IsTranslation()

bool WNT_HIDSpaceMouse::IsTranslation ( ) const
inline

Return TRUE if data chunk defines new translation values.

◆ KeyState()

uint32_t WNT_HIDSpaceMouse::KeyState ( ) const
inline

Return new keystate.

◆ RawValueRange()

int16_t WNT_HIDSpaceMouse::RawValueRange ( ) const
inline

Return the raw value range.

◆ Rotation()

Graphic3d_Vec3d WNT_HIDSpaceMouse::Rotation ( bool theIsIdle,
bool  theIsQuadric 
) const

Return new rotation values.

Parameters
theIsIdle[out] flag indicating idle state (no rotation)
theIsQuadric[in] flag to apply non-linear scale factor
Returns
vector of 3 elements defining rotation values within [-1..1] range, 0 meaning idle, .x defining tilt, .y defining roll and .z defining spin.

◆ SetRawValueRange()

void WNT_HIDSpaceMouse::SetRawValueRange ( int16_t  theRange)
inline

Set the raw value range.

◆ Translation()

Graphic3d_Vec3d WNT_HIDSpaceMouse::Translation ( bool theIsIdle,
bool  theIsQuadric 
) const

Return new translation values.

Parameters
theIsIdle[out] flag indicating idle state (no translation)
theIsQuadric[in] flag to apply non-linear scale factor
Returns
vector of 3 elements defining translation values within [-1..1] range, 0 meaning idle, .x defining left/right slide, .y defining forward/backward and .z defining up/down slide.

The documentation for this class was generated from the following file: