Как мне определить floatSlider, используя python2 .7 в Maya? - PullRequest
0 голосов
/ 28 апреля 2020

очень плохо знаком со сценариями с python в майе, так что извините за мои ограниченные знания.

Мне нужна помощь, чтобы выяснить, как определить переменную для floatSlider. Мне нужно два поплавка для выполнения задания, которое я делаю. Мне нужен один, который изменит размер выбранных или указанных объектов, и мне нужен другой, который будет использовать MA SH для изменения счетчика этого объекта.

У меня есть скрипт с этими ползунками и кнопка «Распределить» выложил. Я не уверен, что мне нужно включить, чтобы связать масштаб объекта с имеющимся у меня ползунком.

У меня есть такой код:

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)

1 Ответ

1 голос
/ 29 апреля 2020

Scale - это значение с плавающей точкой, поэтому вы можете использовать cmds.floatSliderGrp, чтобы установить масштаб источника * me 1009 *. Сначала вы должны определить отдельную функцию, которая будет срабатывать при изменении значения 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)

Перетаскивание ползунка приведет к Теперь установите масштаб куба. Хотя, честно говоря, структура кода здесь очень грязная и слишком жестко запрограммирована (подумайте о том, как он будет работать с текущим выбором, вместо того, чтобы явно использовать имена объектов)

...