如何在maya中使用python2.7定义浮动滑块?

2024-05-15 22:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在maya中使用python编写脚本非常新,请原谅我的知识有限

我需要帮助了解如何定义浮动滑块的变量。我需要两个浮动滑块来完成我正在做的作业。我需要一个可以更改所选或指定对象的大小,我需要另一个可以使用MASH来更改该对象的计数

我有带滑块的脚本和一个分发按钮。我不确定我需要包括什么来将对象的比例链接到我拥有的滑块

这是我目前掌握的代码:

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)

Tags: 对象texttruesourcenetworkminlabelmax
1条回答
网友
1楼 · 发布于 2024-05-15 22:17:13

缩放是一个浮点值,因此可以使用cmds.floatSliderGrp设置源网格的缩放。首先,您必须定义一个单独的函数,当您更改floatSliderGrp的值时,该函数将被触发,然后在floatSliderGrp中,将其changeCommand参数设置为该函数:

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)

拖动滑块将设置立方体的比例。尽管老实说,这里的代码结构非常混乱,而且有点太硬(想想它如何处理当前选择,而不是显式使用对象的名称)

相关问题 更多 >