import maya.cmds as cmds import maya.mel as mel # Get objList, first object, pivot position and parent of the first objList = cmds.ls(selection=True, l=1) firstObj = objList[0] print (firstObj) objPos = cmds.xform( firstObj, q=True, ws=True, rp=True ) objRot = cmds.xform( firstObj, q=True, ws=True, ro=True ) objPar = cmds.listRelatives(firstObj, parent=True, fullPath=True) tempCube = 'unique_placeholder_cube_delete' cmds.polyCube(name=tempCube) cmds.parent( tempCube, objPar) cmds.select( objList) locName = "tempLocNameDel" #combine, rename and set pivot back cmds.polyUnite() lastName = firstObj.split("|") nameInd = len(lastName)-1 print(lastName[nameInd]) cmds.rename(lastName[nameInd]) newObj = cmds.ls(selection=True, l=1 ) #Create temp locator, set its pivot to match first selected object, parent combined object to locator spaceLoc = cmds.spaceLocator(name=locName) cmds.move(objPos[0], objPos[1], objPos[2], locName) cmds.rotate( objRot[0], objRot[1], objRot[2], locName) cmds.select( newObj[0]) cmds.parent( newObj[0], locName ) #reset xform cmds.makeIdentity( a=True, t=True, r=True, s=True ) cmds.xform(pivots=[objPos[0], objPos[1], objPos[2]], ws=True ) cmds.delete(constructionHistory=1) objRef = cmds.ls(selection=True) #If first object had a parent, parent it back, else try to find next parent in hierarchy if objPar: cmds.parent( objRef, objPar) else: cmds.parent( objRef, world=1) cmds.delete( locName ) cmds.delete( tempCube ) mel.eval('setPolygonDisplaySettings("dispSoftEdge");')