"""
https://sartikadelly.github.io/

cubeMerge()
- Create a cube
- Merge it with current selection
- Delete the old cube
- Freeze tranform & delete history
"""
import pymel.core as pm
 
def cubeMerge():
    # Get Selected
    selection = pm.selected()
    oldName = selection[0].name()
   
    # Make Cube & Save Cube Verts position
    cube = pm.polyCube()
    selection.append(cube)
    vertices =  [i for i in pm.polyListComponentConversion(cube[0], tv=True)]
    vertices = pm.filterExpand(vertices[0], sm=31)
    vertsPos = [pm.PyNode(i).getPosition() for i in vertices]
    
    # Combine Object
    newObj, uniteNode = pm.polyUnite(selection, ch=True, mergeUVSets=True)
   
    # Delete Cube Faces
    vertsToDelete = []
    for pos in vertsPos:
        pm.polySelectConstraint( mode=3, type=1, dist=1, distpoint=pos)
        vertsToDelete.append(pm.selected())
    pm.polySelectConstraint(dist=0)
    facesToDelete = pm.polyListComponentConversion(vertsToDelete, tf=True)
    pm.delete(facesToDelete)
   
    # Freeze Transformation & Delete history
    pm.makeIdentity(apply=True, translate=True, rotate=True, scale=True, normal=0)
    pm.delete(newObj, constructionHistory=True)
  
    # Rename Merged object to original name (1st selected object)
    pm.rename(newObj, oldName)   
    pm.select(newObj)