【问题标题】:How can I change command function using checkbox in pymel如何使用 pymel 中的复选框更改命令功能
【发布时间】:2017-06-13 23:26:52
【问题描述】:

我想用一个复选框来控制滑块函数中的倍率。

首先我尝试直接更改变量,但失败了。

然后我尝试改变dragCommand,也失败了。

我该如何控制它?

import pymel.core as pm
import math

myRatio = math.sqrt(2) * 0.5

def myPolyBevel(*args): 

    # called by convert
    def convertOn(*args):        
        #myRatio = math.sqrt(2) * 0.5
        myOffsetSlider.dragCommand = myOffsetOn

    def convertOff(*args):
       #myRatio = 1.0
        myOffsetSlider.dragCommand = myOffsetOff

    # called by offset    
    def myOffsetOn(*args):        
        temp =  pm.floatSliderGrp( myOffsetSlider, query = True, value = True ) * myRatio
        pm.setAttr( myBevel.name()+".offset", temp ) 

    def myOffsetOff(*args):        
        temp =  pm.floatSliderGrp( myOffsetSlider, query = True, value = True )
        pm.setAttr( myBevel.name()+".offset", temp )          

    # main    
    if pm.selected():
        # add Bevel
        newBevel = pm.polyBevel3( pm.selected(), offset = 0.1 * myRatio, segments = 2, smoothingAngle  = 30, chamfer = 1 )
        myBevel = newBevel[0]

        # UI        
        bevelWindow = pm.window(title = 'Bevel')
        bevelLayout = pm.columnLayout() 
        myConvert = pm.checkBoxGrp( numberOfCheckBoxes = 1, label = '', label1 = 'Convert', value1 = 1, onCommand = convertOn, offCommand = convertOff )       
        myOffsetSlider = pm.floatSliderGrp( label='Offset', field = True, 
                                        minValue = 0.0, maxValue = 5.0, 
                                        fieldMinValue = 0.0, fieldMaxValue = 100.0, 
                                        value = 0.1, step = 0.001, 
                                        dragCommand  = myOffsetOn, changeCommand = myOffsetOn )

        pm.showWindow() 

# Main
mainWindow = pm.window(title = 'Star')
mainLayout = pm.gridLayout( cellWidthHeight = (40,40), numberOfColumns = 5 ) 
bevelButton = pm.button( label = 'Bevel', command = myPolyBevel)    
pm.showWindow()

【问题讨论】:

    标签: python maya pymel


    【解决方案1】:

    您可能不必嵌套所有这些命令,这会使它变得更难(或使用一些 Class 方法)

    使用 partial 传递参数:

    Maya Python - Using data from UI

    这里有一篇有用的帖子,您可以参考,查看 theodor 和我对该主题的回答(我们经常回答这个问题)

    【讨论】:

    • 谢谢!我把它作为一个班级并解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多