MetaBox/Scripts/Animation/Blendshape/MorphShape.py
2025-01-14 03:08:55 +08:00

76 lines
2.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
import os
WINDOW_NAME = "MorphShape"
class show():
def __init__(self):
txt = 'none'
iconPath = cmds.internalVar(userScriptDir=True)
print(iconPath)
buttColor=[0.53, 0.81, 0.98]
self.baseMesh=None
win = 'MorphShape'
if cmds.window(win,exists=True):
cmds.deleteUI(win)
window = cmds.window("MorphShape", t=WINDOW_NAME, w=200, h=100)
cmds.columnLayout('mainColumn',adj = True)
# Get the directory of the current script
current_dir = os.path.dirname(os.path.abspath(__file__))
# Construct the path to the icon
icon_path = os.path.join(current_dir, 'MorphShapeLogo.png')
# Display the icon in the UI
cmds.image(image=icon_path)
cmds.text(l='')
cmds.text('baseMeshName', l='Ref Mesh : '+ str(self.baseMesh))
cmds.button(l='Set Reference Mesh', c=self.setBaseMesh, p='mainColumn')
cmds.text(l='')
cmds.text(l='Position Old Mesh')
self.xPos = cmds.intSliderGrp(min=-50, max=50, value=0, step=1 ,field=True,l='xPos')
self.yPos = cmds.intSliderGrp(min=-50, max=50, value=0, step=1 ,field=True,l='yPos')
self.zPos = cmds.intSliderGrp(min=-50, max=50, value=0, step=1 ,field=True,l='zPos')
cmds.text(l='')
self.strength = cmds.intSliderGrp(min=1, max=100, value=50, step=1 ,field=True,l='strength')
self.iterations = cmds.intSliderGrp(min=1, max=50, value=3, step=1 ,field=True,l='iterations')
cmds.text(l='')
cmds.button(l='MorphShape',c=self.morph, p='mainColumn', bgc=buttColor)
cmds.text(l='')
cmds.showWindow(win)
def morph(self, *args):
selection = cmds.ls(sl=True)[0]
cmds.select(self.baseMesh)
dupBaseMesh = cmds.duplicate(n='Delta')
cmds.blendShape(selection, dupBaseMesh,n='deltaShape')
val = cmds.intSliderGrp(self.iterations,q=True,v=True)
mult = cmds.intSliderGrp(self.strength,q=True,v=True)
xPos = cmds.intSliderGrp(self.xPos,q=True,v=True)
yPos = cmds.intSliderGrp(self.yPos,q=True,v=True)
zPos = cmds.intSliderGrp(self.zPos,q=True,v=True)
for i in range(val):
cmds.deltaMush(dupBaseMesh,si=mult)
#fix jaggies with secondary delta mush
cmds.deltaMush(dupBaseMesh,si=3)
cmds.blendShape( 'deltaShape', edit=True, w=[0,1.0] )
cmds.delete(dupBaseMesh, constructionHistory = True)
pos = cmds.xform(selection, q=1, t=True, ws=True)
cmds.xform(dupBaseMesh,t=pos)
cmds.xform(selection, t=[xPos,yPos,zPos], r=True)
cmds.select(dupBaseMesh)
def setBaseMesh(self, *args):
self.baseMesh = cmds.ls(sl=True)[0]
cmds.text('baseMeshName',e=True,l='Ref Mesh : '+ str(self.baseMesh))
if __name__ == "__main__":
show()