Allowing to configure the VR menu
This plugin creates a new menu entry under “Scripts/VRMenu”. With this menu you can configure the visible tools in the VR menu.
VRMenuSetupModule.py
# © 2025 Autodesk, Inc. All rights reserved.
from PySide2 import QtCore, QtWidgets
from shiboken2 import wrapInstance
from vrKernelServices import vrdImmersiveMenu
class VRSetupMenu(QtCore.QObject):
def __init__(self, parent=None):
super(VRSetupMenu, self).__init__(parent)
self.settings = QtCore.QSettings("Autodesk","VRED")
QtCore.QTimer.singleShot(1, self.init)
self.menuName = QtCore.QCoreApplication.translate("QVRDockWindowManager","Scripts")
def init(self):
self.createMenu()
vrFileIOService.newScene.connect(self.updateMenu)
vrFileIOService.projectLoaded.connect(self.onProjectLoaded)
def __del__(self):
self.destroyMenu()
def createToolsActions(self,tools,internal):
for tool in tools:
if tool.getIsInternal() != internal:
continue
action = QtWidgets.QAction(tool.getText(), self.mw)
action.setCheckable(True)
key = "VRMenu_"+tool.getName();
if self.settings.contains(key):
hideAway = bool(self.settings.value(key,"false") == "true")
else:
hideAway = tool.getHideAway()
tool.hideAway(hideAway)
action.setChecked(not hideAway)
action.setProperty("tool",tool.getName())
action.toggled.connect(self.actionTriggered)
self.menu.addAction(action)
def createMenu(self):
self.mw = wrapInstance(VREDMainWindowId, QtWidgets.QMainWindow)
self.menu = QtWidgets.QMenu("VR Menu", self.mw)
showAllAction = QtWidgets.QAction("Show all Tools", self.mw)
hideAllAction = QtWidgets.QAction("Hide all Tools", self.mw)
self.menu.addAction(showAllAction)
self.menu.addAction(hideAllAction)
self.menu.addSeparator()
showAllAction.triggered.connect(self.showAll)
hideAllAction.triggered.connect(self.hideAll)
tools = sorted(vrImmersiveUiService.getTools(), key=lambda tool: tool.getName())
self.createToolsActions(tools,True)
self.menu.addSeparator()
self.createToolsActions(tools,False)
self.menu.addSeparator()
showStatusAction = QtWidgets.QAction("Show status panel", self.mw)
showStatusAction.setCheckable(True)
showStatusAction.setChecked(not vrImmersiveUiService.getHideStatusVRPanel())
showStatusAction.toggled.connect(self.showStatus)
self.menu.addAction(showStatusAction)
showParticipantsAction = QtWidgets.QAction("Show participants panel", self.mw)
showParticipantsAction.setCheckable(True)
showParticipantsAction.setChecked(not vrImmersiveUiService.getHideParticipantsVRPanel())
showParticipantsAction.toggled.connect(self.showParticipants)
self.menu.addAction(showParticipantsAction)
self.menu.addSeparator()
showVRMenuAction = QtWidgets.QAction("Show VR Menu", self.mw)
showVRMenuAction.setCheckable(True)
showVRMenuAction.setChecked(False)
showVRMenuAction.toggled.connect(self.showVRMenu)
self.menu.addAction(showVRMenuAction)
for action in self.mw.menuBar().actions():
if action.text() == self.menuName:
scriptMenu = action.menu()
first = scriptMenu.actions()[0];
scriptMenu.insertAction(first, self.menu.menuAction())
self.separator = scriptMenu.insertSeparator(first)
break
def destroyMenu(self):
for action in self.mw.menuBar().actions():
if action.text() == self.menuName:
action.menu().removeAction(self.menu.menuAction())
def actionTriggered(self,checked):
action = self.sender()
toolName = action.property("tool")
tool = vrImmersiveUiService.findTool(toolName)
tool.hideAway(not checked)
self.settings.setValue("VRMenu_"+tool.getName(),tool.getHideAway())
self.settings.sync()
def showAll(self):
for action in self.menu.actions():
if not action.property("tool") == None:
action.setChecked(True)
def hideAll(self):
for action in self.menu.actions():
if not action.property("tool") == None:
action.setChecked(False)
def showStatus(self,checked):
vrImmersiveUiService.setHideStatusVRPanel(not checked)
def showParticipants(self,checked):
vrImmersiveUiService.setHideParticipantsVRPanel(not checked)
def updateMenu(self):
self.destroyMenu()
self.createMenu()
def onProjectLoaded(self):
QtCore.QTimer.singleShot(0, self.updateMenu)
def showVRMenu(self,checked):
# Just for testing. Show VR menu in desktop mode
if not checked:
vrImmersiveUiService.showToolsMenu(False,False)
return
vrImmersiveUiService.showToolsMenu(True,False)
tools = vrImmersiveUiService.findMenu("ToolsMenu")
tools.setOrigin(vrdImmersiveMenu.MenuOrigin.ORIGIN_LOCAL)
tools.setDepth(3)
tools.setWidth(200)
tools.setTranslation(0,300,0)
tools.setRotation(0,0,0)
tools.setOrigin(vrdImmersiveMenu.MenuOrigin.ORIGIN_CAMERA)
menuSetup = VRSetupMenu()
label = QtWidgets.QLabel(VREDPluginWidget)
label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter);
label.setScaledContents(True)
label.setText("Python VR menu configure tool\n" + __file__)
VREDPluginWidget.layout().addWidget(label)