76 lines
2.9 KiB
Python
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() |