如何使用pymel中的复选框更改命令功能

时间:2017-06-08 03:17:34

标签: python maya pymel

我想使用一个复选框来控制滑块功能乘以的比率。

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

然后我尝试更改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()

1 个答案:

答案 0 :(得分:0)

你可能不必嵌套所有这个命令,它会使它更难(或使用一些类方法)

使用partial来传递args:

Maya Python - Using data from UI

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