簡體   English   中英

如何在 Maya 中使用 python2.7 定義 floatSlider?

[英]How do I define a floatSlider using python2.7 in maya?

在 Maya 中使用 python 編寫腳本非常新,所以請原諒我的知識有限。

我需要幫助弄清楚如何為 floatSlider 定義變量。 我需要兩個浮動滑塊來完成我正在做的任務。 我需要一個可以更改所選或指定對象的大小,我需要另一個將使用 MASH 更改 object 的計數。

我有帶有這些滑塊的腳本和一個分發按鈕。 我不確定將 object 的比例鏈接到我擁有的 slider 需要包括什么。

這是我到目前為止的代碼:

from maya import cmds

if cmds.window('mainUI2', exists=True):
    cmds.deleteUI

win = cmds.window("mainUI2", title="Bush Generator", widthHeight=(300, 300))

# Layout
cmds.columnLayout(adjustableColumn=True)
cmds.text(label='Bush Generator')
cmds.button(label='Distribute', command='DistributeMesh()')
cmds.text(label=' ')
# need help defining Leaf_size
Leaf_size = cmds.floatSlider(min=0, max=100, value=0, step=1)

# I tried another type of slider
LeafScale = cmds.intSliderGrp(min=0, max=100, f=True)

cmds.text(label='Leaf Size')
# need defining Leaf_amount and linking to mash count
Leaf_amount = cmds.floatSlider(min=0, max=100, value=0, step=1)
cmds.text(label='Leaf Amount')


# Bush tool
def DistributeMesh():
    cmds.loadPlugin("MASH", quiet=True)
    import MASH.api as mapi
    count = 3000

    source_mesh = "pCube2"
    scatter_mesh = "pSphere1"

    source_shape = cmds.listRelatives(scatter_mesh, children=True)[0]

    cmds.select(source_mesh)
    mash_network = mapi.Network()
    mash_network.createNetwork(name="Test", geometry="Instancer")

    # set to use meshes to scatter
    cmds.setAttr(mash_network.distribute + ".arrangement", 4)
    cmds.setAttr(mash_network.distribute + ".pointCount", count)

    # connect mesh
    cmds.connectAttr(
        source_shape + ".worldMesh[0]",
        mash_network.distribute + ".inputMesh",
        force=True)


cmds.showWindow(win)

Scale 是一個浮點值,因此您可以使用cmds.floatSliderGrp設置源網格的比例。 首先,您必須定義一個單獨的 function,當您更改floatSliderGrp的值時將觸發它,然后在floatSliderGrp中將其changeCommand參數設置為該 function:

from maya import cmds

# Define a function that will be called when the slider changes values.
def on_size_slider_changed(value):
    source_mesh = "pCube2"
    if cmds.objExists(source_mesh):  # Check if it exists.
        cmds.setAttr("{}.scale".format(source_mesh), value, value, value)  # Set its scale.

if cmds.window('mainUI2', exists=True):
    cmds.deleteUI

win = cmds.window("mainUI2", title="Bush Generator", widthHeight=(300, 300))

# Layout
cmds.columnLayout(adjustableColumn=True)
cmds.text(label='Bush Generator')
cmds.button(label='Distribute', command='DistributeMesh()')

# Use `changeCommand` to define what function it should call.
leaf_size_slider = cmds.floatSliderGrp(label="Size", field=True, min=0, max=100, value=1, changeCommand=on_size_slider_changed)

# Bush tool
def DistributeMesh():
    cmds.loadPlugin("MASH", quiet=True)
    import MASH.api as mapi
    count = 3000

    source_mesh = "pCube2"
    scatter_mesh = "pSphere1"

    source_shape = cmds.listRelatives(scatter_mesh, children=True)[0]

    cmds.select(source_mesh)
    mash_network = mapi.Network()
    mash_network.createNetwork(name="Test", geometry="Instancer")

    # set to use meshes to scatter
    cmds.setAttr(mash_network.distribute + ".arrangement", 4)
    cmds.setAttr(mash_network.distribute + ".pointCount", count)

    # connect mesh
    cmds.connectAttr(
        source_shape + ".worldMesh[0]",
        mash_network.distribute + ".inputMesh",
        force=True)


cmds.showWindow(win)

拖動 slider 現在將設置立方體的比例。 雖然老實說這里的代碼結構非常混亂,而且編碼有點太硬(想想它如何與當前選擇一起工作,而不是顯式使用對象的名稱)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM