Как подключить floatField к переменной? - PullRequest
0 голосов
/ 04 ноября 2018

Я работаю над сценарием, в котором мне нужно подключить floatField к переменной, которая вызывается в функции. Я попробовал connectControl, но он все еще выдает ошибки и не будет работать. Есть предложения?

Это мой блок интерфейса

##### UI #####
def createUI ():
    # Delete
    if cmds.window("TerrainUI", exists= True):
        cmds.deleteUI("TerrainUI")
    cmds.windowPref( 'TerrainUI', remove=True )
    # Create Window
    window=cmds.window ("TerrainUI", title="Terrain UI", w=350, h=750, mnb=0, mxb=0, sizeable=0)
    mainLayout=cmds.columnLayout(w=300, h=750,cal="left")
    ### Make Stuff ###
    cmds.button(label="Cleanup",w=300,h=25,c=cleanup)
    cmds.button(label="Create Viewport Lights",w=300,h=25,c=createViewportLights)
    cmds.button(label="Create Render Lights",w=300,h=25,c=createRenderLights)
    cmds.button(label="Create Plane",w=300,h=25,c=createPlane)
    cmds.rowColumnLayout( numberOfRows=16 )
    ## NOISE CONTROL ##
    cmds.text(label="Threshold")
    thresh=cmds.floatField( minValue=-1, maxValue=1, precision=4, step=.01 )
    #cmds.connectControl(thresh,"t")
    cmds.text(label="Depth Map")
    depmap=cmds.floatField( minValue=-1, maxValue=1, precision=4, step=.01 )
    #cmds.connectControl(depmap,"dm")
    cmds.text(label="Size Randomization")
    sizeran=cmds.floatField( minValue=-1, maxValue=1, precision=4, step=.01 )
    #cmds.connectControl(sizeran,"sr")
    cmds.button(label="Create Noise",w=300,h=25,c=noise)
    cmds.button(label="Color Plane",w=300,h=25,c=colorPlane)
    cmds.button(label="Create Trees",w=300,h=25,c=makeTree)
    cmds.button(label="Color Trees",w=300,h=25,c=treeShade)
    cmds.button(label="Create Mushrooms",w=300,h=25,c=makeMush)
    cmds.button(label="Color Mushrooms",w=300,h=25,c=mushShade)
    cmds.button(label="Create Clouds",w=300,h=25,c=makeCloud)
    cmds.button(label="Color Clouds",w=300,h=25,c=cloudShade)
    cmds.button(label="Create Moon",w=300,h=25,c=makeMoon)
    cmds.button(label="Color Moon",w=300,h=25,c=moonShade)
    # Show Window
    cmds.showWindow(window)

И эта функция дает мне проблемы

def noise(t,dm,sr):
    if cmds.objExists("noise*"):
        cmds.delete("noise*")
    cmds.select("terrain_plane")
    cmds.textureDeformer(en=.9, s=1.5, o=0, d="Normal", ps="World")
    cmds.rename("textureDeformerHandle1", tPfx+"deform")
    cmds.shadingNode('noise', asShader=True)
    cmds.setAttr ("noise1.threshold", t)
    cmds.setAttr ("noise1.depthMax", dm)
    cmds.setAttr ("noise1.sizeRand", sr)
    cmds.connectAttr ("noise1.outColor", "textureDeformer1.texture")

Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

так что вы хотите передать переменные в пользовательский интерфейс. Это большая тема, и главный ответ - использовать лямбду или частичное: Использование слайдеров в Maya с Python для управления фигурами - intSliderGrp

from functools import partial

def noise(t,dm,sr, *args):
    # * args is used to skip default arguments passed by maya ui (a boolean pass as last)
    if cmds.objExists("noise*"):
        cmds.delete("noise*")
    cmds.select("terrain_plane")
    cmds.textureDeformer(en=.9, s=1.5, o=0, d="Normal", ps="World")
    cmds.rename("textureDeformerHandle1", tPfx+"deform")
    cmds.shadingNode('noise', asShader=True)
    cmds.setAttr ("noise1.threshold", t)
    cmds.setAttr ("noise1.depthMax", dm)
    cmds.setAttr ("noise1.sizeRand", sr)
    cmds.connectAttr ("noise1.outColor", "textureDeformer1.texture")

# with partial you can pass your three arguments.
# it is written partial(function, argument1, arguments2, ....etc)
button = cmds.button(label="Create Noise",w=300,h=25, c=partial(noise, t, dm, sr))

для получения дополнительной информации перейдите к теме, на которую я ссылался выше, если у вас есть вопросы, не стесняйтесь, ура!

...