121 lines
5.5 KiB
Python
121 lines
5.5 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
# @Author : Jerry Tsai
|
||
# @Site : Zoroot
|
||
import xgenm as xg
|
||
import xgenm.xgGlobal as xgg
|
||
import xgenm.XgExternalAPI as xge
|
||
import maya.cmds as cmds
|
||
# 定义设置头发宽度默认值
|
||
hairwidth = 0.1000
|
||
hairwidthmax = 0.5000
|
||
hairwidthmin = 0.0050
|
||
hairwithstep = 0.0001
|
||
# 定义窗口的函数
|
||
def create_window():
|
||
global hairwidth
|
||
global hairwidthmax
|
||
global hairwidthmin
|
||
global hairwithstep
|
||
# 创建窗口
|
||
window = cmds.window(title="Hair Width", iconName='Hair Width', widthHeight=(600, 100))
|
||
# 创建窗口的布局
|
||
cmds.columnLayout(adjustableColumn=True)
|
||
# 创建最大值最小值输入框,可编辑,设置最大值最小值输入框的值
|
||
cmds.floatFieldGrp('SetMinMax', label='Set Min and Max', numberOfFields=2, value1=hairwidthmin, value2=hairwidthmax, changeCommand=update)
|
||
# 创建Hair Width滑块,设置最大值最小值输入框的值,步长,设置滑块的值
|
||
cmds.floatSliderGrp('SetHairWidth', label='Set Hair Width', field=True, minValue=hairwidthmin, maxValue=hairwidthmax, fieldMinValue=hairwidthmin, fieldMaxValue=hairwidthmax, value=hairwidth, step=hairwithstep, changeCommand=update)
|
||
# 设置宽度表达式
|
||
set_width_expression(hairwidth)
|
||
# 显示窗口
|
||
cmds.showWindow(window)
|
||
# 定义更新函数
|
||
def update(*args):
|
||
# 获取参数
|
||
hairwidthmin = cmds.floatFieldGrp('SetMinMax', query=True, value1=True)
|
||
hairwidthmax = cmds.floatFieldGrp('SetMinMax', query=True, value2=True)
|
||
hairwidth = cmds.floatSliderGrp('SetHairWidth', query=True, value=True)
|
||
# 定义最大值与最小值的范围个规则
|
||
if hairwidthmin > hairwidthmax:
|
||
hairwidthmin = hairwidthmax
|
||
elif hairwidthmax < hairwidthmin:
|
||
hairwidthmax = hairwidthmin
|
||
elif hairwidthmin == hairwidthmax:
|
||
hairwidthmax = hairwidthmin + 0.0001
|
||
# 定义最大值最小值输入框均为0~1之间
|
||
if hairwidthmin < 0:
|
||
hairwidthmin = 0
|
||
if hairwidthmax < 0:
|
||
hairwidthmax = 0
|
||
if hairwidthmin > 1:
|
||
hairwidthmin = 1
|
||
if hairwidthmax > 1:
|
||
hairwidthmax = 1
|
||
# 定义滑块的值在最大值最小值之间
|
||
if hairwidth < hairwidthmin:
|
||
hairwidth = hairwidthmin
|
||
elif hairwidth > hairwidthmax:
|
||
hairwidth = hairwidthmax
|
||
# 定义滑块的值为正数
|
||
if hairwidth < 0:
|
||
hairwidth = 0
|
||
# 回调参数
|
||
cmds.floatFieldGrp('SetMinMax', edit=True, value1=hairwidthmin, value2=hairwidthmax)
|
||
cmds.floatSliderGrp('SetHairWidth', edit=True, minValue=hairwidthmin, maxValue=hairwidthmax, fieldMinValue=hairwidthmin, fieldMaxValue=hairwidthmax, value=hairwidth)
|
||
# 设置宽度表达式
|
||
set_width_expression(hairwidth)
|
||
print("Set the Description Primitive Attributes : ")
|
||
print(" Min : " + str(hairwidthmin) + " Max : " + str(hairwidthmax) + " Width: " + str(hairwidth))
|
||
# 定义设置宽度表达式的函数
|
||
def set_width_expression(hairwidth):
|
||
hairwidthmin = cmds.floatFieldGrp('SetMinMax', query=True, value1=True)
|
||
hairwidthmax = cmds.floatFieldGrp('SetMinMax', query=True, value2=True)
|
||
hairwidth = cmds.floatSliderGrp('SetHairWidth', query=True, value=True)
|
||
# 将hairwith转换为字符串
|
||
hairwidth_str = str(hairwidth)
|
||
# 将最大值最小值转换为字符串
|
||
hairwidthmax_str = str(hairwidthmax)
|
||
hairwidthmin_str = str(hairwidthmin)
|
||
# 获取被选中的物体
|
||
selectedobject = cmds.ls(selection=True)
|
||
print(hairwidth)
|
||
if not selectedobject:
|
||
ERROR_MESSAGE = "No object selected"
|
||
cmds.warning(ERROR_MESSAGE)
|
||
cmds.confirmDialog(title='Warning', message=ERROR_MESSAGE, button=['OK'], defaultButton='OK')
|
||
else:
|
||
if xgg.Maya:
|
||
# palette 是collection,先用palettes 获取collections
|
||
palettes = xg.palettes()
|
||
# 筛选出被选中的palette
|
||
palettes = [palette for palette in palettes if palette in selectedobject]
|
||
# 筛选出被选中的Desciption
|
||
descriptions = xg.descriptions()
|
||
descriptions = [description for description in descriptions if description in selectedobject]
|
||
# 设置新的快读表达式
|
||
new_width_expression = "$a=", hairwidth_str + ";#" + hairwidthmax_str + "," + hairwidthmin_str
|
||
# 当palettes为空时,将被选中的Desciption的父级collection筛选出来,加入到palettes中
|
||
if palettes == []:
|
||
# 将被选中的Desciption筛选出来
|
||
for description in descriptions:
|
||
# 将被选中的Desciption的父级collection筛选出来
|
||
if description in selectedobject:
|
||
# 将被选中的Desciption的父级collection加入到palettes中
|
||
palettes.append(xg.palette(description))
|
||
# 将palettes转换为集合,去除重复的collection
|
||
palettes = list(set(palettes))
|
||
if palettes != [] and descriptions == []:
|
||
# 选择的是collection
|
||
for palette in palettes:
|
||
# 获取collection下的所有Desciption
|
||
descriptions = xg.descriptions(palette)
|
||
if palettes == [] and descriptions == []:
|
||
print("No xGen collection or description selected")
|
||
print("Current selected hair collection : " + str(palettes))
|
||
print("Current selected hair description : " + str(descriptions))
|
||
# 设置宽度表达式
|
||
|
||
|
||
# if __name__ == "__main__":
|
||
# # 创建窗口
|
||
# create_window() |