Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to query current viewport renderer in maya

Tags:

python

maya

pymel

Anyone have a good solution for querying the current maya viewport renderer (Viewport 2.0, Default Viewport, High Quality Viewport) in python?

like image 548
TheBeardedBerry Avatar asked Nov 23 '25 01:11

TheBeardedBerry


1 Answers

@Tomek's answer will perfectly work. If you are going the PyMEL route, you can do this:

import pymel.core.uitypes as pmui

model_panel = pmui.ModelEditor(pm.getPanel(withFocus=True))
print pmui.ModelEditor.getRendererName(model_panel)

Although, that snippet seems to be temperamental. It sometimes throws an error complaining that the model editor was not found, especially when executed from the shelf.

Another way would be a bit wordy, but it works everytime:

import pymel.core as pm
import pymel.core.uitypes as pmui

modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
    if myModelPanel.find('modelPanel') != -1:
        modelPanelList.append(myModelPanel)

for modelPanel in modelPanelList:    
    if pmui.ModelEditor(modelPanel).getActiveView():
        try:
            # Always better to try in the case of active panel operations
            # as the active panel might not be a viewport.
            print pmui.ModelEditor(modelPanel).getRendererName()
        except Exception as e:
            # Handle exception
            print e

A concise, pseudo-PyMEL way would be to just PyMEL-ify Tomek's answer:

import pymel.core as pm
print pm.modelEditor(pm.getPanel(wf=True), q=True, rnm=True)

To get a list of viewport renderers:

import pymel.core.uitypes as pmui
print pmui.ModelEditor().getRendererList()

Here is some extra info on model editors and viewport renderers. To get their "friendly" names:

import pymel.core.uitypes as pmui
print pmui.ModelEditor().getRendererListUI()

To set them, concisely, I would use PyMEL and do:

import pymel.core.uitypes as pmui

# assuming you know which modelPanel you want to affect
pmui.ModelEditor("modelPanel4").setRendererName("ogsRenderer")

To affect all viewports (modelPanels) I would do:

import pymel.core as pm
import pymel.core.uitypes as pmui

modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
    if myModelPanel.find('modelPanel') != -1:
        modelPanelList.append(myModelPanel)

for modelPanel in modelPanelList:
    pmui.ModelEditor(modelPanel).setRendererName("ogsRenderer")

To affect just the viewport in focus:

import pymel.core as pm
import pymel.core.uitypes as pmui

modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
    if myModelPanel.find('modelPanel') != -1:
        modelPanelList.append(myModelPanel)

for modelPanel in modelPanelList:    
    if pmui.ModelEditor(modelPanel).getActiveView():
        try:
            # Always better to try in the case of active panel operations
            # as the active panel might not be a viewport.
            pmui.ModelEditor(modelPanel).setRendererName("ogsRenderer")
        except Exception as e:
            # Handle exception
            print e
like image 171
kartikg3 Avatar answered Nov 25 '25 15:11

kartikg3