2017-06-08 2 views
0

Je veux utiliser une case à cocher pour contrôler le ratio multiplié dans la fonction de curseur.Comment puis-je changer la fonction de commande en utilisant la case à cocher dans pymel

D'abord j'essaie de changer la variable directement, mais j'ai échoué. Puis j'ai essayé de changer la dragCommand, mais j'ai aussi échoué.

Comment puis-je le contrôler?

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

Répondre

0

Vous devrez peut-être de ne pas nicher toute cette commande, elle rend plus difficile (ou utiliser une méthode de classe)

utilisation partielle passer args:

Maya Python - Using data from UI

ici un utile poster vous pouvez vous référer, vérifier theodor et mes réponses sur le sujet (nous répondons souvent à cette question)

+0

Merci! Je le fais comme une classe et résolu ce problème. –