0

I want to use a checkbox to control the ratio multiplied in slider function.

First I try to change the variable directly, but failed.

Then I try to change the dragCommand, but also failed.

How can I control it?

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()
Chenxing Zheng
  • 117
  • 1
  • 2
  • 10

1 Answers1

0

You may have to not nest all this command, it makes it harder (or use some Class method)

use partial to pass args :

Maya Python - Using data from UI

here a useful post you can refer, check theodor and my answers on the topic (we often answer this question )

DrWeeny
  • 2,487
  • 1
  • 14
  • 17