# ------------------------------------------------------------------------------------ # gbAverageLocator.py - Maya Python Script # ------------------------------------------------------------------------------------ # # DESCRIPTION: # This script creates a locator in average position between two selected vertex. # Something useful when placing joints in the right spot inside the geo. # # USAGE: # (PYTHON) import gbAverageLocator; gbAverageLocator.averageLocator() # (MEL) python("import gbAverageLocator;AverageLocator.averageLocator()") # # AUTHOR: # Giorgio Bertolone - mail@giorgiobertolone.com - www.giorgiobertolone.com # Copyright (C)2010- Giorgio Bertolone - All Rights Reserved. # # VERSIONS: # 1.00 - Dec 19, 2010 - Initial Release # # ------------------------------------------------------------------------------------ import maya.cmds as mc def averageLocator(): # check and warn if nothing is selected sel = mc.ls( sl=True, fl=True ) if sel == []: mc.confirmDialog( title="Selection Error", message="Nothing is selected. Please select two vertex.", button=["Ok"], defaultButton="Ok" ) # calculate number of selected vertex and warn in case of selection errors verNum = mc.polyEvaluate( vc=True ) if verNum == 0: mc.confirmDialog( title="Selection Error", message="No vertex selected. Please select two vertex.", button=["Ok"], defaultButton="Ok" ) if verNum == 1: mc.confirmDialog( title="Selection Error", message="Only one vertex selected. Please select two vertex.", button=["Ok"], defaultButton="Ok" ) if verNum > 2 and sel != []: mc.confirmDialog( title="Selection Error", message="More than two vertex are selected. Please select only two vertex.", button=["Ok"], defaultButton="Ok" ) # if two vertex are selected if verNum == 2: # get the position of both vertex posFir = mc.xform( sel[0], q=True, ws=True, t=True ) posSec = mc.xform( sel[1], q=True, ws=True, t=True ) pXFir = posFir[0] pYFir = posFir[1] pZFir = posFir[2] pXSec = posSec[0] pYSec = posSec[1] pZSec = posSec[2] # calculate the average between the two pXTot =( posFir[0] + posSec[0] ) / 2 pYTot =( posFir[1] + posSec[1] ) / 2 pZTot =( posFir[2] + posSec[2] ) / 2 # create a locator in average position loc = mc.spaceLocator( p=(pXTot, pYTot, pZTot) ) # change the locator color to red to make it more visible. Default green is hard to see. mc.setAttr( loc[0] + ".overrideEnabled", 1 ) mc.setAttr( loc[0] + ".overrideColor", 13 )