![](https://megestus-1309556466.cos.ap-shanghai.myqcloud.com/img/20240609235543.png)
Maya-UV Transfer Tool
啊~学习学习
![](https://megestus-1309556466.cos.ap-shanghai.myqcloud.com/img/20240609225045.png)
python3
import maya.cmds as cmds
def get_object_name(*args):
# 获取当前选中的对象并将其名称填入文本字段
selected = cmds.ls(sl=True)
if selected:
cmds.textField('objectNameField', edit=True, text=selected[0])
else:
cmds.warning("没有选中任何对象。")
def set_uv(*args):
# 获取源对象和目标对象,执行UV传递,并清理历史记录
source_object = cmds.textField('objectNameField', query=True, text=True)
target_object = cmds.ls(sl=True)
if not source_object or not target_object:
cmds.warning("请确保已经选择了源对象和目标对象。")
return
target_object = target_object[0]
sample_space_dict = {'世界': 0, '局部': 1, 'UV': 5, '组件': 4}
sample_space = cmds.radioCollection('sampleSpaceRadio', query=True, select=True)
sample_space = cmds.radioButton(sample_space, query=True, label=True)
sample_space = sample_space_dict.get(sample_space, 'World')
cmds.transferAttributes(source_object, target_object, transferPositions=0, transferNormals=0, transferUVs=2, transferColors=0, sampleSpace=sample_space, searchMethod=3) #执行UV传递
cmds.delete(target_object, constructionHistory=True)#清理历史记录
if cmds.window('uvTransferWindow', exists=True):
# 如果窗口已经存在,先删除它
cmds.deleteUI('uvTransferWindow', window=True)
# 创建一个新的窗口,并设置其标题和初始大小
window = cmds.window('uvTransferWindow', title="UV Transfer Tool", widthHeight=(200, 100),tlb=True)
# 创建一个列布局,所有的子元素都会垂直排列
cmds.columnLayout(adjustableColumn=True, width=230, height=100)
# 创建一个行布局,其中包含三个元素:两个按钮和一个文本字段
cmds.rowLayout(numberOfColumns=3, columnWidth3=(50, 100, 50), )
cmds.button(label='Get', command=get_object_name, backgroundColor=(1,0.5,0.5),width=45 ) # 创建一个按钮,点击时调用 get_object_name 函数
cmds.textField('objectNameField', enable=False,width=120 ) # 创建一个文本字段,用于显示选中的对象的名称
cmds.button(label='Set', command=set_uv, backgroundColor=(1,0.5,0.5), width=45) # 创建一个按钮,点击时调用 set_uv 函数
cmds.setParent('..') # 结束当前的行布局
# 创建一个分隔符
cmds.separator(height=20, style='in')
cmds.frameLayout( label='采样空间' )
# 创建一个表单布局,用于精确控制其子元素的位置
form = cmds.formLayout()
cmds.radioCollection('sampleSpaceRadio') # 创建一个单选按钮组
rb1 = cmds.radioButton(label='世界', select=True) # 创建一个单选按钮
rb2 = cmds.radioButton(label='局部') # 创建一个单选按钮
rb3 = cmds.radioButton(label='UV') # 创建一个单选按钮
rb4 = cmds.radioButton(label='组件') # 创建一个单选按钮
# 设置表单布局的参数,使得单选按钮在窗口大小变化时始终保持横向排列并居中
cmds.formLayout(form, edit=True, attachForm=[(rb1, 'left', 10), (rb4, 'right', 10)], attachControl=[(rb2, 'left', 5, rb1), (rb3, 'left', 5, rb2), (rb4, 'left', 5, rb3)])
cmds.setParent('..') # 结束当前的表单布局
cmds.showWindow(window) # 显示窗口