Advertisement
yaotungyu

repair orphans

Sep 17th, 2019
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.78 KB | None | 0 0
  1. ## this part is for repairing meshes detached from it original transform into a forsterparent ##
  2.  
  3. #list out all the meshes with foster parent naming scheme
  4. orphaned_meshes = cmds.ls('*fosterParent*',type='mesh')
  5.  
  6.  
  7. mesh_handles_to_delete = []  # this is to record the foster parent handles so we can delete later
  8.  
  9. for o in orphaned_meshes: #with a list of bad meshed to repair we loop through them and perform fix below
  10.     print 'performing fix on:',o
  11.     mesh_handle = cmds.listRelatives(o,p=1)[0]
  12.     orphan_refNode = cmds.listConnections(mesh_handle)[0]
  13.     for r in cmds.file(q=1,r=1):
  14.         if cmds.referenceQuery(r,referenceNode=1) == orphan_refNode:
  15.             belonged_ns = cmds.referenceQuery(r,ns=1)[1:]
  16.             if not cmds.referenceQuery(r,il=1):
  17.                 cmds.file(r,lr=1)
  18.     original_mesh_name = o.replace(mesh_handle+'_','').replace('ShapeDeformedDeformed','')
  19.     renamed_orphan = cmds.rename(o,belonged_ns+':'+original_mesh_name+'ShapeDeformedDeformed')
  20.     cmds.parent(renamed_orphan,belonged_ns+':'+original_mesh_name,shape=1)
  21.     new_orphan_handle = cmds.listRelatives(renamed_orphan,p=1)
  22.     cmds.rename(new_orphan_handle,belonged_ns+':'+original_mesh_name+'_reattached')
  23.     mesh_handles_to_delete.append(mesh_handle)
  24.    
  25.     print 'mesh_handle',mesh_handle
  26.     print 'orphan_refNode',orphan_refNode
  27.     print 'original_mesh_name',original_mesh_name
  28.     print 'renamed_orphan',renamed_orphan
  29.     print 'renamed_orphan',renamed_orphan
  30.    
  31.     ## deal with missing ids:
  32.     rigged_deform_node = belonged_ns+':'+original_mesh_name+'ShapeDeformed'
  33.     mesh_node_obj_id = cmds.getAttr(rigged_deform_node+'.objectID')
  34.     mesh_node_ass_id = cmds.getAttr(rigged_deform_node+'.assetID')
  35.     if 'objectID' not in cmds.listAttr(renamed_orphan):
  36.         cmds.addAttr(renamed_orphan,longName='objectID',k=1,at='long')
  37.         cmds.setAttr(renamed_orphan+'.objectID',mesh_node_obj_id)
  38.     if 'assetID' not in cmds.listAttr(renamed_orphan):
  39.         cmds.addAttr(renamed_orphan,longName='assetID',k=1,at='long')
  40.         cmds.setAttr(renamed_orphan+'.assetID',mesh_node_ass_id)
  41.        
  42.     print 'rigged_deform_node',rigged_deform_node
  43.     print 'mesh_node_obj_id',mesh_node_obj_id
  44.     print 'mesh_node_ass_id',mesh_node_ass_id
  45.     print
  46.  
  47. cmds.delete(list(set(mesh_handles_to_delete)))
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. ####
  56.  
  57. ####
  58. #### the below part is for fixing all the deform deform nodes in the scene without asset and object id
  59. geo_transforms = cmds.listRelatives('*:Geo_Grp',ad=1,type='transform')
  60. for g_transform in geo_transforms:
  61.     if g_transform.endswith('_Geo'):
  62.         is_deformed = False
  63.         for c in cmds.listRelatives(g_transform,c=1):
  64.             if 'DeformedDeformed' in c:
  65.                 is_deformed = True
  66.                 deformed_deformed = c
  67.                 supposed_ns = g_transform.split(':')[0]
  68.  
  69.                 if supposed_ns not in deformed_deformed and not cmds.objExists(deformed_deformed):
  70.                     cmds.rename(deformed_deformed,supposed_ns+':'+deformed_deformed)
  71.                 nsed_deformed_deformed = deformed_deformed
  72.             elif 'DeformedDeformed' not in c and 'Deformed' in c:
  73.                 rigged_deform_node = c
  74.         if is_deformed:
  75.             print g_transform
  76.        
  77.             ## deal with missing ids:
  78.             rigged_deform_node = belonged_ns+':'+original_mesh_name+'ShapeDeformed'
  79.             mesh_node_obj_id = cmds.getAttr(rigged_deform_node+'.objectID')
  80.             mesh_node_ass_id = cmds.getAttr(rigged_deform_node+'.assetID')
  81.             if 'objectID' not in cmds.listAttr(nsed_deformed_deformed):
  82.                 cmds.addAttr(nsed_deformed_deformed,longName='objectID',k=1,at='long')
  83.                 cmds.setAttr(nsed_deformed_deformed+'.objectID',mesh_node_obj_id)
  84.             if 'assetID' not in cmds.listAttr(nsed_deformed_deformed):
  85.                 cmds.addAttr(nsed_deformed_deformed,longName='assetID',k=1,at='long')
  86.                 cmds.setAttr(nsed_deformed_deformed+'.assetID',mesh_node_ass_id)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement