Support for 3dconnexion 3dMouse SpaceMouse

Wacom is definitely better – there’s no comparison – and on the iPad, the Apple Pencil. Best regards,

Ajubel

www.ajubel.com
#ajubelstudio

firma_emails.jpg

I don’t have any spacemouse device but check in the “3d connexion” Nomad settings.
It’s a 3dconnexion panel “per app” where you can enable/disable some options.

I have everything checked in there

So, i’ve managed to get the spacemouse working “fairly” well with the latest updates.

One issue I noticed, I have the UP/DOWN set to Pan Forward / Pan Backward. This control was much slower than the other pan controls.
A fix I tested, which is working well sofar, is to double up on the Pan Forward / Pan Backward. This doubles the speed and actually makes it workable.

I do notice that nomad ignores everything in the 3dconn. settings.
Here I’ve disabled everything, but it works just fine.

I just purchased nomadsculpt for mac. I have an macbook pro M4 max and a spacemouse I tried all suggestions in this post but it just doesn’t want to work. This is very disappointing since according to this post it’s been asked atleast a year ago to support the spacemouse. Now I’m forced to work with Plasticity and on my iPad with nomad the switching is annoying.

1 Like

I had AI fix this for me on my m4max: nomad can’t use the 3dconnexion driver, zbrush and blender however need the driver, so I made a toggle to turn the service on or off:

Option 1: The One-Click Toggle Utility (Recommended)

This approach places a toggle switch in the macOS Menu Bar. Clicking it stops or restarts the driver on demand and posts a system notification via the Finder.

Setup Instructions

  1. Open the built-in macOS Shortcuts app.
  2. Create a new Shortcut and name it “Toggle SpaceMouse”.
  3. Add a Run Shell Script action block.
  4. Paste the following bash script into the block:

code Bash

if pgrep -x "3DconnexionHelper" > /dev/null; then
    # Kill the driver helper
    killall 3DconnexionHelper
    
    # Send notification through Finder (bypasses terminal privacy restrictions)
    osascript -e 'tell application "Finder" to display notification "SpaceMouse switched to Nomad Mode (Raw Joystick)" with title "SpaceMouse"'
else
    # Restart the driver helper
    open "/Applications/3DconnexionHelper.app"
    
    # Send notification through Finder
    osascript -e 'tell application "Finder" to display notification "SpaceMouse switched to CAD Mode (Blender/ZBrush)" with title "SpaceMouse"'
fi
  1. In the Shortcut settings panel on the right, check the box to Pin in Menu Bar or add it to the Dock for quick access.

nevermind the notifications: they don’t work

Perhaps I can send Stephomi a spare SpaceMouse of mine if that would be of benefit for implementing official support? :thinking:

No, I’ll buy one when I’ll have time to spend time on it.

2 Likes

Is super easy! You will love it too!

Custom 3Dconnexion SpaceMouse Pro configuration for Nomad Sculpt on Windows

I managed to create a custom 3Dconnexion SpaceMouse Pro configuration for Nomad Sculpt using the 3DxWare configuration system.

Nomad does not currently need to recognize the SpaceMouse as a joystick for this setup. Instead, 3DxWare translates the SpaceMouse movements into normal mouse actions that Nomad already understands.

I tested this configuration specifically with a 3Dconnexion SpaceMouse Pro on Windows.

How the camera controls work

The configuration uses the physical Rotation Lock / LOCK button on the SpaceMouse Pro to switch between two navigation modes.

LOCK OFF – Rotate mode

The SpaceMouse behaves like holding the Right Mouse Button and moving the mouse:

  • Tilt forward/backward → rotate camera up/down

  • Tilt left/right → rotate camera left/right

  • Zoom is disabled in this mode

  • Pan is disabled in this mode

This makes the SpaceMouse behave mainly as a camera orbit controller.

LOCK ON – Pan + Zoom mode

The same tilt movements now behave like holding the Middle Mouse Button:

  • Tilt forward/backward → pan camera up/down

  • Tilt left/right → pan camera left/right

  • Lift/push the SpaceMouse cap vertically → zoom in/out

  • Rotation is disabled in this mode

So the LOCK button effectively switches between:

Rotate ↔ Pan/Zoom

I also increased the zoom sensitivity because the default mouse-wheel emulation was much too slow for Nomad.

SpaceMouse Pro button mapping

I also mapped the physical buttons on the SpaceMouse Pro to keyboard function keys.

The configuration sends:

  • Button 1F1

  • Button 2F2

  • Button 3F3

  • Button 4F4

  • FrontF5

  • RightF6

  • TopF7

  • Roll+F8

  • FITHome

  • Shift → Shift

  • Ctrl → Ctrl

  • Alt → Alt

  • Esc → Esc

  • Menu → opens 3Dconnexion Properties

  • LOCK → switches between Rotate and Pan/Zoom modes

Important: F1–F8 must also be assigned inside Nomad

3DxWare only sends the keyboard keys. You still need to tell Nomad what each key should do.

In Nomad Sculpt → Settings → Bindings, I assigned:

  • F1Undo

  • F2Redo

  • F3Gizmo

  • F4Insert

  • F5Front View

  • F6Right View

  • F7Top View

  • F8 → currently unused / available for any additional function

The F8 button is intentionally left free for now, so it can later be assigned to whatever function becomes useful during sculpting.

The FIT button sends Home, which I assigned in Nomad to the Frame current object function, so pressing FIT centers and frames the current object in the viewport.

Installing the 3DxWare configuration

The XML configuration should be placed in:

%APPDATA%\3Dconnexion\3DxWare\Cfg

I use the filename:

Nomad-KMJ.xml

The application entry in the XML targets:

Nomad.exe

After replacing the configuration file, restart the 3Dconnexion driver:

Stop 3DxWare

and then:

Start 3DxWare

After that, start Nomad Sculpt and make sure that 3Dconnexion Properties shows Nomad as the active application profile.

Nomad input settings

This configuration does not rely on Nomad’s joystick support.

The important part is that normal mouse camera navigation works in Nomad:

  • Right Mouse Button + mouse movement → rotate

  • Middle Mouse Button + mouse movement → pan

  • Mouse wheel → zoom

3DxWare simply generates those actions from the SpaceMouse.

So Nomad can essentially remain on its normal mouse navigation settings.

I also use a Huion graphics tablet at the same time. In Nomad’s Gesture settings I keep:

  • Camera → Mouse enabled

  • Camera → Stylus disabled

  • Sculpt → Stylus enabled

This allows the SpaceMouse to control the camera while the pen is used only for sculpting.

Current SpaceMouse Pro layout

SPACE MOUSE MOVEMENT

LOCK OFF
Tilt up/down       = Rotate up/down
Tilt left/right    = Rotate left/right

LOCK ON
Tilt up/down       = Pan up/down
Tilt left/right    = Pan left/right
Lift/push cap      = Zoom


BUTTONS

1       = F1 = Undo
2       = F2 = Redo
3       = F3 = Gizmo
4       = F4 = Insert

Front   = F5 = Front View
Right   = F6 = Right View
Top     = F7 = Top View
Roll+   = F8 = Free / user assignable

FIT     = Home = Frame current object
LOCK    = Rotate / Pan+Zoom mode switch

Shift   = Shift
Ctrl    = Ctrl
Alt     = Alt
Esc     = Esc
Menu    = 3Dconnexion Properties

This is not native 3Dconnexion support — it is a 3DxWare mouse/keyboard emulation profile — but after some tuning it works surprisingly well for sculpting in Nomad.

The configuration was created and tested on a 3Dconnexion SpaceMouse Pro.

<?xml version="1.0" encoding="utf-8" standalone="no"?> Nomad Nomad.exe ID_Nomad Nomad ID_Default_KMJ_Cfg Nomad_To_PanZoom Nomad PanZoom ON Push PanZoom All
<ButtonAction Type="ApplicationBank">
  <ID>Nomad_Back_To_Default</ID>
  <Name>Nomad PanZoom OFF</Name>
  <Action>Pop</Action>
  <BankID>Default</BankID>
  <ApplyTo>All</ApplyTo>
</ButtonAction>
ID_Standard_3D_Mouse None Default Default
  <!-- LOCK OFF: tylko obrót jak RMB -->
  <AxisBank Default="true">
    <Name>Default</Name>
    <ID>Default</ID>

    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_X</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>80</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_X</ActionID></Output>
    </Axis>

    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Y</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>100</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_Wheel</ActionID></Output>
    </Axis>

    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Z</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>100</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_Wheel</ActionID></Output>
    </Axis>

    <!-- Tilt forward/back = RMB + Mouse Y -->
    <Axis>
      <Enabled>true</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Rx</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>70</Deadband>
      </Input>
      <Output>
        <ActionID>HIDMouse_Y</ActionID>
        <Scale>0.40</Scale>
        <Reversed>false</Reversed>
        <Modifiers>
          <Modifier>RightMouse</Modifier>
        </Modifiers>
      </Output>
    </Axis>

    <!-- Tilt left/right = RMB + Mouse X -->
    <Axis>
      <Enabled>true</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Ry</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>70</Deadband>
      </Input>
      <Output>
        <ActionID>HIDMouse_X</ActionID>
        <Scale>0.40</Scale>
        <Reversed>true</Reversed>
        <Modifiers>
          <Modifier>RightMouse</Modifier>
        </Modifiers>
      </Output>
    </Axis>

    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Rz</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>100</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_X</ActionID></Output>
    </Axis>
  </AxisBank>

  <!-- LOCK ON: pełny PAN + ZOOM na podnoszeniu/dociskaniu -->
  <AxisBank>
    <Name>PanZoom</Name>
    <ID>PanZoom</ID>

    <!-- Translation X OFF -->
    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_X</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>100</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_X</ActionID></Output>
    </Axis>

    <!-- Push/pull forward/back OFF -->
    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Y</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>120</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_Wheel</ActionID></Output>
    </Axis>

    <!-- Lift/push down = ZOOM -->
    <Axis>
      <Enabled>true</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Z</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>25</Deadband>
      </Input>
      <Output>
        <ActionID>HIDMouse_Wheel</ActionID>
        <Scale>2.00</Scale>
        <Reversed>false</Reversed>
      </Output>
    </Axis>

    <!-- Tilt forward/back = MMB + Mouse Y = PAN góra/dół -->
    <Axis>
      <Enabled>true</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Rx</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>90</Deadband>
      </Input>
      <Output>
        <ActionID>HIDMouse_Y</ActionID>
        <Scale>0.22</Scale>
        <Reversed>false</Reversed>
        <Modifiers>
          <Modifier>MiddleMouse</Modifier>
        </Modifiers>
      </Output>
    </Axis>

    <!-- Tilt left/right = MMB + Mouse X = PAN lewo/prawo -->
    <Axis>
      <Enabled>true</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Ry</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>90</Deadband>
      </Input>
      <Output>
        <ActionID>HIDMouse_X</ActionID>
        <Scale>0.22</Scale>
        <Reversed>true</Reversed>
        <Modifiers>
          <Modifier>MiddleMouse</Modifier>
        </Modifiers>
      </Output>
    </Axis>

    <!-- Twist OFF -->
    <Axis>
      <Enabled>false</Enabled>
      <Input>
        <ActionID>HIDMultiAxis_Rz</ActionID>
        <Min>-512</Min><Max>511</Max><Deadband>100</Deadband>
      </Input>
      <Output><ActionID>HIDMouse_X</ActionID></Output>
    </Axis>
  </AxisBank>

  <ButtonBank Default="true">
    <Name>Default</Name>
    <ID>Default</ID>
    <InheritsFromID />
    <Button>
      <Input><ActionID>V3DK_ROTATE</ActionID></Input>
      <Output><ActionID>Nomad_To_PanZoom</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_FIT</ActionID></Input>
      <Output><ActionID>KB_Home</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_1</ActionID></Input>
      <Output><ActionID>KB_F1</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_2</ActionID></Input>
      <Output><ActionID>KB_F2</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_3</ActionID></Input>
      <Output><ActionID>KB_F3</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_4</ActionID></Input>
      <Output><ActionID>KB_F4</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_FRONT</ActionID></Input>
      <Output><ActionID>KB_F5</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_RIGHT</ActionID></Input>
      <Output><ActionID>KB_F6</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_TOP</ActionID></Input>
      <Output><ActionID>KB_F7</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_SHIFT</ActionID></Input>
      <Output><ActionID>KB_Shift</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_CTRL</ActionID></Input>
      <Output><ActionID>KB_Ctrl</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ALT</ActionID></Input>
      <Output><ActionID>KB_Alt</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ESC</ActionID></Input>
      <Output><ActionID>KB_Esc</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ROLL_CW</ActionID></Input>
      <Output><ActionID>KB_F8</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_MENU</ActionID></Input>
      <Output><ActionID>Driver_ShowDriverGUI</ActionID></Output>
    </Button>
  </ButtonBank>

  <ButtonBank>
    <Name>PanZoom</Name>
    <ID>PanZoom</ID>
    <InheritsFromID />
    <Button>
      <Input><ActionID>V3DK_ROTATE</ActionID></Input>
      <Output><ActionID>Nomad_Back_To_Default</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_FIT</ActionID></Input>
      <Output><ActionID>KB_Home</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_1</ActionID></Input>
      <Output><ActionID>KB_F1</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_2</ActionID></Input>
      <Output><ActionID>KB_F2</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_3</ActionID></Input>
      <Output><ActionID>KB_F3</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_4</ActionID></Input>
      <Output><ActionID>KB_F4</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_FRONT</ActionID></Input>
      <Output><ActionID>KB_F5</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_RIGHT</ActionID></Input>
      <Output><ActionID>KB_F6</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_TOP</ActionID></Input>
      <Output><ActionID>KB_F7</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_SHIFT</ActionID></Input>
      <Output><ActionID>KB_Shift</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_CTRL</ActionID></Input>
      <Output><ActionID>KB_Ctrl</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ALT</ActionID></Input>
      <Output><ActionID>KB_Alt</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ESC</ActionID></Input>
      <Output><ActionID>KB_Esc</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_ROLL_CW</ActionID></Input>
      <Output><ActionID>KB_F8</ActionID></Output>
    </Button>

    <Button>
      <Input><ActionID>V3DK_MENU</ActionID></Input>
      <Output><ActionID>Driver_ShowDriverGUI</ActionID></Output>
    </Button>
  </ButtonBank>

</Device>
1 Like

It is working properly?
No lag and no problems at all?

Can you share the files?