48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
import maya.cmds as cmds
|
|
|
|
def fixReverse():
|
|
cmds.undoInfo(ock = 1)
|
|
sel = cmds.ls(sl=1)
|
|
selAll = cmds.filterExpand(sel,sm=12)
|
|
if selAll == None:
|
|
cmds.warning("Nothing Selected!")
|
|
return
|
|
for sel_child in selAll:
|
|
cmds.select(sel_child)
|
|
fixReverseDo(sel_child)
|
|
cmds.select(sel,r=1)
|
|
cmds.undoInfo(cck = 1)
|
|
|
|
def dotProduct(vecA,vecB):
|
|
return vecA[0]*vecB[0] + vecA[1]*vecB[1] + vecA[2]*vecB[2]
|
|
|
|
def fixReverseDo(sel_child):
|
|
selShape = sel_child
|
|
if len(selShape) == 0:
|
|
print("Nothing Selected!")
|
|
else:
|
|
node_CPOM = cmds.createNode('closestPointOnMesh')
|
|
selShape_worldMesh = selShape + '.worldMesh[0]'
|
|
selShape_worldMatrix = selShape + '.worldMatrix[0]'
|
|
node_CPOM_inMesh = node_CPOM + '.inMesh'
|
|
node_CPOM_inPosition = node_CPOM + '.inPosition'
|
|
node_CPOM_inputMatrix = node_CPOM + ".inputMatrix"
|
|
node_CPOM_result_normal = node_CPOM + ".result.normal"
|
|
node_CPOM_outPosition = node_CPOM + ".position"
|
|
persp_translate = "persp.translate"
|
|
|
|
cmds.connectAttr(selShape_worldMesh, node_CPOM_inMesh ,force=1)
|
|
cmds.connectAttr(persp_translate, node_CPOM_inPosition ,force=1)
|
|
cmds.connectAttr(selShape_worldMatrix, node_CPOM_inputMatrix ,force=1)
|
|
|
|
vec_persp_pos = cmds.getAttr(persp_translate)
|
|
vec_closestPoint_pos = cmds.getAttr(node_CPOM_outPosition)
|
|
vec_closestPoint_normal = cmds.getAttr(node_CPOM_result_normal)
|
|
vec_persp_closestPoint = [vec_persp_pos[0][0] - vec_closestPoint_pos[0][0],
|
|
vec_persp_pos[0][1] - vec_closestPoint_pos[0][1],
|
|
vec_persp_pos[0][2] - vec_closestPoint_pos[0][2]]
|
|
dotProductResult = dotProduct(vec_persp_closestPoint,vec_closestPoint_normal[0])
|
|
if dotProductResult<0:
|
|
cmds.polyNormal(selShape,normalMode=0,userNormalMode=1,ch=1)
|
|
cmds.delete(node_CPOM)
|