如何查询5月份当前的视区渲染器

2024-09-20 07:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一个很好的解决方案可以在python中查询当前的maya视口渲染器(viewport 2.0、Default viewport、High Quality viewport)?


Tags: default解决方案qualityhighviewportmaya视口
3条回答

此脚本返回聚焦面板的渲染器:

import maya.cmds as cmds

print cmds.modelEditor( cmds.getPanel(wf=True), q=True, rnm=True )

@托马克的回答会很有效的。如果要走PyMEL路线,可以执行以下操作:

import pymel.core.uitypes as pmui

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

不过,这一片段似乎是喜怒无常。它有时会抛出一个错误,抱怨找不到模型编辑器,特别是在从工具架执行时。

另一种方法可能有点冗长,但每次都有效:

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

一个简洁的,伪PyMEL的方法就是PyMEL-ify-Tomek的答案:

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

要获取视口渲染器列表,请执行以下操作:

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

下面是一些关于模型编辑器和视口渲染器的额外信息。 为了得到他们“友好”的名字:

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

简明扼要地说,我会使用PyMEL并执行以下操作:

import pymel.core.uitypes as pmui

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

要影响所有视口(modelPanels),我将执行以下操作:

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")

要仅影响焦点中的视口,请执行以下操作:

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

遍历所有模型面板,找到一个活动的(灰色轮廓) 并请求renderame(rnm)

梅尔:

// find current modelEditor
string $cur_mp;
for ($mp in `getPanel -typ "modelPanel"`){
    // check if active
    if (`modelEditor -q -av $mp`){
        $cur_mp = $mp;
        break;
    }
}

if ($cur_mp != ""){
    // your coude next
    print $cur_mp;
    $new_rndr = "ogsRenderer";
    // set new renderer
    modelEditor -e -rnm $new_rndr $cur_mp;
}

py公司:

import maya.cmds as cm

cur_mp = None
for mp in cm.getPanel(type="modelPanel"):
    if cm.modelEditor(mp, q=1, av=1):
        cur_mp = mp
        break

if cur_mp:
    # do your stuff
    print cur_mp
    new_rndr = "ogsRenderer"
    cm.modelEditor(cur_mp, e=1, rnm=new_rndr)

皮梅尔:

import pymel.core as pm

# maybe its not the best solution to iterate over all existing modelPanels
mp_ls = [x
         for x in pm.lsUI() 
         if type(x).__name__ == "ModelEditor"
         and type(x.getParent()).__name__ == "PyUI"
         and x.getActiveView()]

if mp_ls:
    # do your stuff
    print mp_ls[0]    # current modelEditor
    new_rndr = "ogsRenderer"
    mp_ls[0].setRendererName(new_rndr)

相关问题 更多 >