Files
MetaBox/Scripts/Modeling/Edit/LDMT/ldmt_fixReverse.py
2025-04-17 04:52:48 +08:00

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)