Currently if applications fail to support the 3D mouse it is pretty much just useful as a paper weight in those apps Truth is some of them may never get the support and others will get it in the future but do not have it now (like Unreal 5).
If it were possible to map a pair of keys to an axis (i.e. a,d or e,s) then you would have at least a use for the device. Is this possible? It could be just making a single key trigger at x displacement of the axis or it could be that key being pressed with an increasing frequency as the axis is moved. If you could add the 2D mouse x and y to this or scroll button it could even be used in productivity products as well.
In my head this feels like a no brainer. Does not feel too hard to implement either whilst adding extra utility to an expensive device so the fact it does not seem to be available suggests that maybe there are reasons, which could be technical or philosophical. Is there a way to do this I am missing? Or some software I could load to give the ability?
The driver supports this, but the GUI does not expose it. It can only be enabled by editing XML files.
We ship some files that show the assignments that need to be made. E.g., KeyboardTemplate.xml has AxisActions that map 3D mouse axes to arrow keys. KeyboardWASDTemplate.xml maps them to WASD (typical game keys).
The Axis entries need to be moved into an application-specific file to use them. The Template file is not used on its own.
There are several options to control this behavior.
There is also a driver extension mechanism where you can do whatever you want by writing some code.
You'll more than likely need help to make these changes.
Awesome I will have a look at this, it could really make a difference to some of the things I try to do and might even make it useful when using other Apps that are not 3D related!
One further question then, is there also an ability to swap the axis. I use a couple of pieces of software that have chosen to map different axis to the zoom and up down function and it means I have a swap time issue when moving between them as my brain adjusts. I have found no way to say I want the movement in the up down axis to do ... and the movement in the back forward direction to do ... etc.
Awesome looks straight forward, are there any docs for the options available?
I see for example <repeatstyle> can be PressAndHold so there are probably other options.
Also I am guessing from this if I uses the Devices Axis keys I may be able to map HIDMultiAxis_X to something else directly by having say HIDMultiAxis_Z as the target?
From this I think I have X Y Z and Rx Ry Rz to map between.
I assume if the new file sits in the CFG directory it is picked up using the App identification information in the file when that App is running?
Finally, do you guys have an XML swapping service anywhere so that those that knock these up can share them?
Ah, It picks up the default and then shapes a .CFG file in Users AppData folder. These have been created for apps that don't exist in the main CFG folder so I assume they create based on a template then are customised here. Assume if I create a MyApp.xml template in the drivers CFG folder it will then create a MyApp.xml one in the user directory when I run the app, but if there is no template it will create a MyApp.xml one in the user directory based on I think AppCfg.xml in the WinCore library?
More than likely the driver will start with the AppCfgDef_KMJ.xml file. It has the least specific Signature.
Your changes, overrides, are written into AppData.
It will make up a file name in AppData, something like (appname-KMJ.xml).
There's nothing wrong with using this file.
If you want to create a file for a specific application, you need to fill in more of the signature (ExecutableName).
That file should Inherit from another file that will supply many default details (e.g., AppCfgDef_KMJ.xml ("ID_Default_KMJ_Cfg")).
It's not necessary for the file to be in Program Files. In fact, you should not have write privileges there. You can put it in AppData or ProgramData.
Sorry, there is no external documentation available on this. You can ask me when you have questions.
For swapping axes, you determine what each Input axis does. You should remap one HIDMultiAxis_* to another only for 3D mouse supporting apps.
If you are doing kb emulation, the HIDMultiAxis_*'s Output section should contain the instructions about what to do. See the Device sections in the KeyboardWASDTemplate.xml file.
In case it is not clear (why should it be?), there are three different types of Outputs.
1) HIDMultiAxis_* : these are high res analog 3D mouse actions, for apps that support the 3D mouse correctly.
2) HIDMouse/Joystick : these are for mouse and joystick emulation. Still high res analog controls.
3) KB_Keystroke : this is for Keyboard emulation. PWM or PressAndHold. The software is rapidly pressing keys. Neither high res, nor analog.